ptoc.h

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C头文件 代码 · 共 224 行

H
224
字号
/*	Modification History: ptoc.h * * 21-July-87 afd *	Added type STRINGTY to base types for char strings *	Added st_string to const class for string constant decls. * */#define INDENT 4#define SYMBOLMAX 12#define MAXLEV 10#define NRESERVES 72#define LINELENGTH 133#define WORDLENGTH 20#define EXPRLEN 500#define MAXINT 32767#define SINGLESTMT 0#define FUNCLEVEL 1#define BEGINLEVEL 2#define WITHPTR 1#define WITHREC 2#define WITHNEST 5typedef char symbol[SYMBOLMAX+1];typedef char line[LINELENGTH+1];/* * Declaration Classes, Data structures, & Base Types */enum classes {INCLUDEC, CONSTC, TYPEC, VARC, FIELDC, DEFINEC,		PROCC, FUNCC, PROGC, COMTC, NOCLASS};enum dstructs {ARRS, UDEFS, SUBRANGES, RECORDS, SETS, PTRS, FILESTR, NOSTRUCT};enum types {BOOLTY, CHARTY, STRINGTY, INTTY, OCTALTY, HEXTY, REALTY,	    UNSIGNEDTY, DOUBLETY, ENUMTY, UNIONTY, USERTYPE, NOTYPE};/* * Tree node types, and block types */enum node_types {ASSIGNNODE, BEGINNODE, CASENODE, COMMENTNODE,     EXPRESSIONNODE, FORNODE, FDECLNODE, FCALLNODE, GOTONODE, IFNODE,     LABELNODE, LISTHEADNODE, PDECLNODE, PCALLNODE, PROGNODE, REPEATNODE,     UNTILNODE, WHILENODE, WITHNODE, WRITENODE, WRITELNNODE, READNODE,     READLNNODE, SEMINODE};    enum block_types {SEMIBLOCK, THENBLOCK, ELSEBLOCK, SUBRBLOCK, NOBLOCK,     PARAMBLOCK, DECLBLOCK, WITHBLOCK};/* * Comment structure */struct cmtinfo {    char *cmt;			/* one line of the comment */    struct cmtinfo *next;	/* ptr to next comment struct (next line) */    };/* * Scanner record */struct scaninfo {    char si_name[LINELENGTH];	/* reserved words,idents,literals;chars in [0]*/    enum reltype {eqrel, nerel, gtrel, gerel, ltrel, lerel}    	 si_rel;		/* type of relation found */    int si_idlen;		/* # of char's in ident */    char si_dflag;		/* 1 = int const;  2 = float const */    float si_cvalue;		/* numeric const */    struct cmtinfo *si_cmtptr;	/* ptr to cmtinfo struct */    };/* * For storing array bounds & subranges */struct pairs {    struct pairs *pr_next;    int pr_lower, pr_upper;	/* All types stored as int, converted to    				   other types upon retrieval */    struct stentry *pr_luser,	/* ptr to lower user const/subrange/enum */		   *pr_uuser;	/* prt to upper, if needed */    enum types pr_bound;	/* type of the bounds (esp. for arrays) */    };/* * A symbol table entry */struct stentry {    struct stentry *st_link;		/* ptr to next stentry */    char *st_name;			/* the symbol name */    int st_lexlev;			/* lexic level */    enum dstructs st_dstruct;		/* the data structure */    enum types st_tipe;			/* the base type */    enum classes st_class;		/* the symbol class */    struct stentry *st_uptr;		/* user defined name */    struct cmtinfo *st_cmt;		/* ptr to decl comment */    char st_emit;			/* == 0 if decl came from include file */    char st_funcpar;			/* == 1 if param is a func name */    					/* == 2 if param is a proc name */    union {				/* Union is based on the class */	struct {			/* CONST class */	    int St_cval;		/* BOOL=0/1, CHAR/INT = actual value */	    float St_fcval;		/* real/float const */	    char *St_string;		/* string constant */	    struct stentry *St_enumptr;	/* ptr from const name back to enum id */	    }constant;	struct {			/* TYPE, VAR, FIELD class */	    int St_numdims;	    /* St_lower[5], St_upper[5]; */	    struct pairs *St_bounds;	/* array & subrange bounds */	    char St_byref;		/* true indicates by-ref param */	    struct stentry *St_next;	/* ptr to next field of record */	    struct stentry *St_dupvar;	/* ptr to duplicate var (v1,v2: type) */	    char St_funcvar;		/* true if dummy for func value */	    char *St_value;		/* used for var's init value */	    }tvf;	struct {			/* PROC, FUNC, PROG class */	    int St_nparams;	    struct stentry *St_fparam, *St_lparam;/* ptr to first & last param */	    }func;	} st_un;    };/* * defines for the union */#define st_cval st_un.constant.St_cval#define st_fcval st_un.constant.St_fcval#define st_string st_un.constant.St_string#define st_enumptr st_un.constant.St_enumptr#define st_numdims st_un.tvf.St_numdims#define st_bounds st_un.tvf.St_bounds#define st_byref st_un.tvf.St_byref#define st_next st_un.tvf.St_next#define st_dupvar st_un.tvf.St_dupvar#define st_funcvar st_un.tvf.St_funcvar#define st_value st_un.tvf.St_value#define st_nparams st_un.func.St_nparams#define st_fparam st_un.func.St_fparam#define st_lparam st_un.func.St_lparamstruct treenode {    struct stentry *firstlocal;    struct treenode *parent;    struct treenode *prev;    struct treenode *next;    struct treenode *firstc;    struct treenode *lastc;    struct stentry *stdecl;		/* ptr to st entry */    char *expression;			/* used by most */    enum node_types type;    union {	struct {	    char *Storewhere, *Storewhat;	    } assign;	struct {	    char *Variable, *Initvalue, *Finalvalue, To;	    } afor;	struct {	    enum block_types Blktype;	    struct stentry *Firstsym;	/* first stentry under this block */	    struct stentry *Lastsym;	/* last stentry underck */	    } begin;	struct {	    struct stentry *Ftype;	/* Function type */	    } func;	struct {	    struct cmtinfo *Blkcmt;	/* Block comment */	    } comment;	} tree_un;    };/* * defines for the union */#define storewhere tree_un.assign.Storewhere#define storewhat tree_un.assign.Storewhat#define variable tree_un.afor.Variable#define initvalue tree_un.afor.Initvalue#define finalvalue tree_un.afor.Finalvalue#define to tree_un.afor.To#define blktype tree_un.begin.Blktype#define firstsym tree_un.begin.Firstsym#define lastsym tree_un.begin.Lastsym#define ftype tree_un.func.Ftype#define blkcmt tree_un.comment.Blkcmtstruct fwdstmt    {    struct fwdstmt *next;    struct treenode *tree;    };/* * Pascal Tokens */enum token {    ILLEGALTOKE	,  ANDT		,  ARRAYT	,  ASSIGNOP	,    BEGINT,    BOOLEANT	,  CASET	,    CHART	,  COMMA	,  COMMENT	,  CONSTT	,    CHARCONST	,  COLON 	,  DIVT		,  DOT		,    DOTDOT	,  DOUBLE	,  DOWNTOT	,    ELSET	,  ENDT		,  EXTERNALT	,    FALSET	,  FORT		,    LOOPDO	,  FORWARDT	,  FUNCTIONT	,  FILET	,    GOTOT	,  IDENT	,  IFT		,  IN		,    INCLUDET	,  INTEGERT	,  INTDIVT	,  LABELT	,    LEFTPAREN	,  LEFTBRACKET	,  MECHT	,    MINUS	,  MODT		,  MODULET	,    MULT	,  NOTT		,  NUMCONST	,  OFT		,    ORT		,  OTHERWISE	,  PACKED	,  PERCENT	,    PLUS	,  POUND	,  PROCEDURET	,  PROGRAMT	,    QUOTE	,  READT	,  READLNT	,  REALT	,    RECORDT	,  RELATIONAL	,  REPEATT	,    RIGHTPAREN	,  RIGHTBRACKET	,  SEMICOLON	,  SETT		,      THENT	,  TRUET	,  TOT		,  TYPET	,    UNSIGNT	,    UNTILT	,  UPARROW	,  VART		,  VARYING	,    WHILET	,  WITHT	,  WRITET	,  WRITELNT	,      };

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?