ast.h
资源名称:pccts133.zip [点击查看]
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:3k
源码类别:
编译器/解释器
开发平台:
Others
- /* Abstract syntax tree
- *
- * Macros, definitions
- *
- * SOFTWARE RIGHTS
- *
- * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
- * Set (PCCTS) -- PCCTS is in the public domain. An individual or
- * company may do whatever they wish with source code distributed with
- * PCCTS or the code generated by PCCTS, including the incorporation of
- * PCCTS, or its output, into commerical software.
- *
- * We encourage users to develop software with PCCTS. However, we do ask
- * that credit is given to us for developing PCCTS. By "credit",
- * we mean that if you incorporate our source code into one of your
- * programs (commercial product, research project, or otherwise) that you
- * acknowledge this fact somewhere in the documentation, research report,
- * etc... If you like PCCTS and have developed a nice tool with the
- * output, please mention that you developed it using PCCTS. In
- * addition, we ask that this header remain intact in our source code.
- * As long as these guidelines are kept, we expect to continue enhancing
- * this system and expect to make other tools available as they are
- * completed.
- *
- * ANTLR 1.33
- * Terence Parr
- * Parr Research Corporation
- * with Purdue University and AHPCRC, University of Minnesota
- * 1989-1998
- */
- #ifndef ZZAST_H
- #define ZZAST_H
- #define zzastOvfChk
- if ( zzast_sp <= 0 )
- {
- fprintf(stderr, zzStackOvfMsg, __FILE__, __LINE__);
- exit(PCCTS_EXIT_FAILURE);
- }
- #ifndef USER_DEFINED_AST
- #ifndef AST_FIELDS
- #define AST_FIELDS
- #endif
- typedef struct _ast {
- struct _ast *right, *down;
- #ifdef zzAST_DOUBLE
- struct _ast *left, *up;
- #endif
- AST_FIELDS
- } AST;
- #else
- #ifdef zzAST_DOUBLE
- #define AST_REQUIRED_FIELDS struct _ast *right, *down, *left, *up;
- #else
- #define AST_REQUIRED_FIELDS struct _ast *right, *down;
- #endif
- #endif
- /* N o d e a c c e s s m a c r o s */
- #define zzchild(t) (((t)==NULL)?NULL:(t->down))
- #define zzsibling(t) (((t)==NULL)?NULL:(t->right))
- /* define global variables needed by #i stack */
- #define zzASTgvars
- AST *zzastStack[ZZAST_STACKSIZE];
- int zzast_sp = ZZAST_STACKSIZE;
- #define zzASTVars AST *_ast = NULL, *_sibling = NULL, *_tail = NULL
- #define zzSTR ( (_tail==NULL)?(&_sibling):(&(_tail->right)) )
- #define zzastCur (zzastStack[zzast_sp])
- #define zzastArg(i) (zzastStack[zztsp-i])
- #define zzastPush(p) zzastOvfChk; zzastStack[--zzast_sp] = p;
- #define zzastDPush --zzast_sp
- #define zzastMARK zztsp=zzast_sp; /* Save state of stack */
- #define zzastREL zzast_sp=zztsp; /* Return state of stack */
- #define zzrm_ast {zzfree_ast(*_root); _tail = _sibling = (*_root)=NULL;}
- extern int zzast_sp;
- extern AST *zzastStack[];
- #ifdef __STDC__
- void zzlink(AST **, AST **, AST **);
- void zzsubchild(AST **, AST **, AST **);
- void zzsubroot(AST **, AST **, AST **);
- void zzpre_ast(AST *, void (*)(), void (*)(), void (*)());
- void zzfree_ast(AST *);
- AST *zztmake(AST *, ...);
- AST *zzdup_ast(AST *);
- void zztfree(AST *);
- void zzdouble_link(AST *, AST *, AST *);
- AST *zzastnew(void);
- #else
- void zzlink();
- AST *zzastnew();
- void zzsubchild();
- void zzsubroot();
- void zzpre_ast();
- void zzfree_ast();
- AST *zztmake();
- AST *zzdup_ast();
- void zztfree();
- void zzdouble_link();
- #endif
- #endif