]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/CodeTools/TianoTools/Pccts/h/ast.h
Restructuring for better separation of Tool packages.
[mirror_edk2.git] / Tools / CodeTools / TianoTools / Pccts / h / ast.h
1 /* Abstract syntax tree
2 *
3 * Macros, definitions
4 *
5 * SOFTWARE RIGHTS
6 *
7 * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
8 * Set (PCCTS) -- PCCTS is in the public domain. An individual or
9 * company may do whatever they wish with source code distributed with
10 * PCCTS or the code generated by PCCTS, including the incorporation of
11 * PCCTS, or its output, into commerical software.
12 *
13 * We encourage users to develop software with PCCTS. However, we do ask
14 * that credit is given to us for developing PCCTS. By "credit",
15 * we mean that if you incorporate our source code into one of your
16 * programs (commercial product, research project, or otherwise) that you
17 * acknowledge this fact somewhere in the documentation, research report,
18 * etc... If you like PCCTS and have developed a nice tool with the
19 * output, please mention that you developed it using PCCTS. In
20 * addition, we ask that this header remain intact in our source code.
21 * As long as these guidelines are kept, we expect to continue enhancing
22 * this system and expect to make other tools available as they are
23 * completed.
24 *
25 * ANTLR 1.33
26 * Terence Parr
27 * Parr Research Corporation
28 * with Purdue University and AHPCRC, University of Minnesota
29 * 1989-2000
30 */
31
32 #ifndef ZZAST_H
33 #define ZZAST_H
34
35 #define zzastOvfChk \
36 if ( zzast_sp <= 0 ) \
37 { \
38 fprintf(stderr, zzStackOvfMsg, __FILE__, __LINE__); \
39 exit(PCCTS_EXIT_FAILURE); \
40 }
41
42 #ifndef USER_DEFINED_AST
43 #ifndef AST_FIELDS
44 #define AST_FIELDS
45 #endif
46
47 typedef struct _ast {
48 struct _ast *right, *down;
49 #ifdef zzAST_DOUBLE
50 struct _ast *left, *up;
51 #endif
52 AST_FIELDS
53 } AST;
54
55 #else
56
57 #ifdef zzAST_DOUBLE
58 #define AST_REQUIRED_FIELDS struct _ast *right, *down, *left, *up;
59 #else
60 #define AST_REQUIRED_FIELDS struct _ast *right, *down;
61 #endif
62
63 #endif
64
65
66 /* N o d e a c c e s s m a c r o s */
67 #define zzchild(t) (((t)==NULL)? (AST *) NULL:(t->down)) /* MR19 */
68 #define zzsibling(t) (((t)==NULL)? (AST *) NULL:(t->right)) /* MR19 */
69
70
71 /* define global variables needed by #i stack */
72 #define zzASTgvars \
73 AST *zzastStack[ZZAST_STACKSIZE]; \
74 int zzast_sp = ZZAST_STACKSIZE;
75
76 #define zzASTVars AST *_ast = NULL, *_sibling = NULL, *_tail = NULL
77 #define zzSTR ( (_tail==NULL)?(&_sibling):(&(_tail->right)) )
78 #define zzastCur (zzastStack[zzast_sp])
79 #define zzastArg(i) (zzastStack[zztsp-i])
80 #define zzastPush(p) zzastOvfChk; zzastStack[--zzast_sp] = p;
81 #define zzastDPush --zzast_sp
82 #define zzastMARK zztsp=zzast_sp; /* Save state of stack */
83 #define zzastREL zzast_sp=zztsp; /* Return state of stack */
84 #define zzrm_ast {zzfree_ast(*_root); _tail = _sibling = (*_root)=NULL;}
85
86 extern int zzast_sp;
87 extern AST *zzastStack[];
88
89 /* MR26 */
90
91 #ifdef PCCTS_USE_STDARG
92 AST *zztmake(AST *, ...);
93 #else
94 AST *zztmake();
95 #endif
96
97 #ifdef __USE_PROTOS
98 void zzlink(AST **, AST **, AST **);
99 void zzsubchild(AST **, AST **, AST **);
100 void zzsubroot(AST **, AST **, AST **);
101 void zzpre_ast(AST *, void (*)(AST *), void (*)(AST *), void (*)(AST *));
102 void zzfree_ast(AST *);
103 AST *zzdup_ast(AST *);
104 void zztfree(AST *);
105 void zzdouble_link(AST *, AST *, AST *);
106 AST *zzastnew(void);
107
108 #else
109
110 void zzlink();
111 AST *zzastnew();
112 void zzsubchild();
113 void zzsubroot();
114 void zzpre_ast();
115 void zzfree_ast();
116 AST *zzdup_ast();
117 void zztfree();
118 void zzdouble_link();
119 #endif
120
121 #endif