📄 manifest
字号:
# include <stdio.h>/* manifest constant file for the lex/yacc interface */# define ERROR 1# define NAME 2# define STRING 3# define ICON 4# define FCON 5# define PLUS 6# define MINUS 8# define MUL 11# define AND 14# define OR 17# define ER 19# define QUEST 21# define COLON 22# define ANDAND 23# define OROR 24/* special interfaces for yacc alone *//* These serve as abbreviations of 2 or more ops: ASOP =, = ops RELOP LE,LT,GE,GT EQUOP EQ,NE DIVOP DIV,MOD SHIFTOP LS,RS ICOP ICR,DECR UNOP NOT,COMPL STROP DOT,STREF */# define ASOP 25# define RELOP 26# define EQUOP 27# define DIVOP 28# define SHIFTOP 29# define INCOP 30# define UNOP 31# define STROP 32/* reserved words, etc */# define TYPE 33# define CLASS 34# define STRUCT 35# define RETURN 36# define GOTO 37# define IF 38# define ELSE 39# define SWITCH 40# define BREAK 41# define CONTINUE 42# define WHILE 43# define DO 44# define FOR 45# define DEFAULT 46# define CASE 47# define SIZEOF 48# define ENUM 49/* little symbols, etc. *//* namely, LP ( RP ) LC { RC } LB [ RB ] CM , SM ; */# define LP 50# define RP 51# define LC 52# define RC 53# define LB 54# define RB 55# define CM 56# define SM 57# define ASSIGN 58/* END OF YACC *//* left over tree building operators */# define COMOP 59# define DIV 60# define MOD 62# define LS 64# define RS 66# define DOT 68# define STREF 69# define CALL 70# define FORTCALL 73# define NOT 76# define COMPL 77# define INCR 78# define DECR 79# define EQ 80# define NE 81# define LE 82# define LT 83# define GE 84# define GT 85# define ULE 86# define ULT 87# define UGE 88# define UGT 89# define SETBIT 90# define TESTBIT 91# define RESETBIT 92# define ARS 93# define REG 94# define OREG 95# define CCODES 96# define FREE 97# define STASG 98# define STARG 99# define STCALL 100/* some conversion operators */# define FLD 103# define SCONV 104# define PCONV 105# define PMCONV 106# define PVCONV 107/* special node operators, used for special contexts */# define FORCE 108# define CBRANCH 109# define INIT 110# define CAST 111/* node types */# define LTYPE 02# define UTYPE 04# define BITYPE 010 /* DSIZE is the size of the dope array */# define DSIZE CAST+1/* type names, used in symbol table building */# define TNULL PTR /* pointer to UNDEF */# define UNDEF 0# define FARG 1# define CHAR 2# define SHORT 3# define INT 4# define LONG 5# define FLOAT 6# define DOUBLE 7# define STRTY 8# define UNIONTY 9# define ENUMTY 10# define MOETY 11# define UCHAR 12# define USHORT 13# define UNSIGNED 14# define ULONG 15# define ASG 1+# define UNARY 2+# define NOASG (-1)+# define NOUNARY (-2)+/* various flags */# define NOLAB (-1)/* type modifiers */# define PTR 020# define FTN 040# define ARY 060/* type packing constants */# define TMASK 060# define TMASK1 0300# define TMASK2 0360# define BTMASK 017# define BTSHIFT 4# define TSHIFT 2/* macros */# define MODTYPE(x,y) x = (x&(~BTMASK))|y /* set basic type of x to y */# define BTYPE(x) (x&BTMASK) /* basic type of x */# define ISUNSIGNED(x) ((x)<=ULONG&&(x)>=UCHAR)# define UNSIGNABLE(x) ((x)<=LONG&&(x)>=CHAR)# define ENUNSIGN(x) ((x)+(UNSIGNED-INT))# define DEUNSIGN(x) ((x)+(INT-UNSIGNED))# define ISPTR(x) ((x&TMASK)==PTR)# define ISFTN(x) ((x&TMASK)==FTN) /* is x a function type */# define ISARY(x) ((x&TMASK)==ARY) /* is x an array type */# define INCREF(x) (((x&~BTMASK)<<TSHIFT)|PTR|(x&BTMASK))# define DECREF(x) (((x>>TSHIFT)&~BTMASK)|(x&BTMASK))# define SETOFF(x,y) if( x%y != 0 ) x = ( (x/y + 1) * y) /* advance x to a multiple of y */# define NOFIT(x,y,z) ( (x%z + y) > z ) /* can y bits be added to x without overflowing z */ /* pack and unpack field descriptors (size and offset) */# define PKFIELD(s,o) ((o<<6)|s)# define UPKFSZ(v) (v&077)# define UPKFOFF(v) (v>>6)/* operator information */# define TYFLG 016# define ASGFLG 01# define LOGFLG 020# define SIMPFLG 040# define COMMFLG 0100# define DIVFLG 0200# define FLOFLG 0400# define LTYFLG 01000# define CALLFLG 02000# define MULFLG 04000# define SHFFLG 010000# define ASGOPFLG 020000# define SPFLG 040000#define optype(o) (dope[o]&TYFLG)#define asgop(o) (dope[o]&ASGFLG)#define logop(o) (dope[o]&LOGFLG)#define callop(o) (dope[o]&CALLFLG)/* table sizes */# define BCSZ 100 /* size of the table to save break and continue labels */# define SYMTSZ 450 /* size of the symbol table */# define DIMTABSZ 750 /* size of the dimension/size table */# define PARAMSZ 150 /* size of the parameter stack */# ifndef FORT# define TREESZ 350 /* space for building parse tree */# else# define TREESZ 1000# endif# define SWITSZ 250 /* size of switch table */# define NCHNAM 8 /* number of characters in a name *//* common defined variables */extern int nerrors; /* number of errors seen so far */typedef union ndu NODE;typedef unsigned int TWORD;extern NODE *NIL; /* a pointer which will always have 0 in it */extern int dope[]; /* a vector containing operator information */extern char *opst[]; /* a vector containing names for ops */# ifdef ONEPASS /* in one-pass operation, define the tree nodes */union ndu { struct { int op; int rall; TWORD type; int su; char name[NCHNAM]; NODE *left; NODE *right; }; struct { int op; int rall; TWORD type; int su; char name[NCHNAM]; CONSZ lval; int rval; }; struct { int op, rall; TWORD type; int su; int label; /* for use with branching */ }; struct { int op, rall; TWORD type; int su; int stsize; /* sizes of structure objects */ int stalign; /* alignment of structure objects */ }; struct { int op; int cdim; TWORD type; int csiz; }; struct { /* this structure is used when a floating point constant is being computed */ int op; int cdim; TWORD type; int csiz; double dval; }; };# endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -