diff options
Diffstat (limited to 'bcc-bruce/scan.h')
-rw-r--r-- | bcc-bruce/scan.h | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/bcc-bruce/scan.h b/bcc-bruce/scan.h new file mode 100644 index 0000000..5333e96 --- /dev/null +++ b/bcc-bruce/scan.h @@ -0,0 +1,201 @@ +/* scan.h - scanner for bcc */ + +/* Copyright (C) 1992 Bruce Evans */ + +#define NAMESIZE 64 /* limit on identifier lengths */ +#define SYMOFCHAR(ch) (symofchar[(unsigned char) (ch)]) + +/* scanner codes */ + +enum +{ +/* The first group of entries consists of all the values that occur in the + switch for cppscan(). +*/ + IDENT, + INTCONST, +#define MAXIDSYM INTCONST /* IDENT and INTCONST must be the only + * symofchar[] entries below this */ + FLOATCONST, +#define MAXPPNUMSYM FLOATCONST /* IDENT, INTCONST and FLOATCONST must be the + * only symofchar[] entries below this */ + CHARCONST, + CONTROL, + SLASH, + SPECIALCHAR, + STRINGCONST, + +/* The next group of entries are all the rest of the values that occur in + symofchar[] and so in the switch for nextsym(). +*/ + AMPERSAND, /* ADDRESSOP or ANDOP */ + BADCHAR, + COLON, /* also COLONOP */ + COMMA, /* also COMMAOP */ + DECSYM, /* PREDECOP or POSTDECOP */ + EOFSYM, + HYPHEN, /* NEGOP or SUBOP */ + INCSYM, /* PREINCOP or POSTINCOP */ + LBRACE, + LBRACKET, + LPAREN, + RBRACE, + RBRACKET, + RPAREN, + SEMICOLON, + STAR, /* INDIRECTOP or MULOP */ + WHITESPACE, + +/* The next group of entries consists of all operator codes. These codes must + be contiguous so they can be used as (offsetted) array indexes. The group + is ordered by operator-precedence (this is not necessary). The first part + of it overlaps the previous group. +*/ + +/* Assign-abops (level 1) belong here but are at end to improve switch. */ + +#define FIRSTOP CONDOP + CONDOP, /* level 2 */ + + OROP, /* level 5 */ + + EOROP, /* level 6 */ + + ANDOP, /* level 7 */ + + GTOP, /* level 9 */ + LTOP, + + ADDOP, /* level 11 */ + + DIVOP, /* level 12 */ + MODOP, + + LOGNOTOP, /* level 13 */ + NOTOP, + + STRUCELTOP, /* level 14 */ + STRUCPTROP, + +/* End of symbols that appear in symofchar[]. */ + + ASSIGNOP, /* level 1 - assign ops must be contiguous */ + ADDABOP, + ANDABOP, + DIVABOP, + EORABOP, + MODABOP, + MULABOP, + ORABOP, + SLABOP, + SRABOP, + SUBABOP, + + COMMAOP, /* level 0 */ + + COLONOP, /* level 2 */ + + LOGOROP, /* level 3 */ + + LOGANDOP, /* level 4 */ + + EQOP, /* level 8 */ + NEOP, + + GEOP, /* level 9 */ + LEOP, + + SLOP, /* level 10 */ + SROP, + + SUBOP, /* level 11 */ + + MULOP, /* level 12 */ + + ADDRESSOP, /* level 13 */ + CASTOP, + INDIRECTOP, + NEGOP, + PREDECOP, + PREINCOP, + POSTDECOP, + POSTINCOP, + + FUNCOP, /* level 14 */ + LISTOP, + ROOTLISTOP, + + LEAF, /* special */ + PTRADDABOP, + PTRADDOP, + PTRSUBOP, + +/* end of operator codes (they must stay contiguous) */ + +#define LASTOP PTRSUBOP + + ENUMDECL, + NULLDECL, + STRUCTDECL, + TYPEDECL, + TYPEDEFNAME, + UNIONDECL, + UNSIGNDECL, + + AUTODECL, + EXTERNDECL, + REGDECL, + STATICDECL, + TYPEDEFDECL, + + BREAKSYM, + CASESYM, + CONTSYM, + DEFAULTSYM, + DEFINEDSYM, + DOSYM, + ELSESYM, + FORSYM, + GOTOSYM, + IFSYM, + RETURNSYM, + SIZEOFSYM, + SWITCHSYM, + WHILESYM, + + ASMCNTL, + DEFINECNTL, + ENDASMCNTL, + INCLUDECNTL, + LINECNTL, + UNDEFCNTL, + + ELIFCNTL, /* "IF" controls must be contiguous */ + ELSECNTL, + ENDIFCNTL, + IFCNTL, + IFDEFCNTL, + IFNDEFCNTL +}; + +EXTERN op_pt arg1op; /* LISTOP, or ROOTLISTOP if arg1inreg */ +EXTERN struct +{ + union + { + char *s; + value_t v; + double d; + } + value; + struct typestruct *type; +} + constant; /* value of last constant scanned */ + /* sym tells type */ +EXTERN char funcname[NAMESIZE]; /* name of current function for unique labels */ +EXTERN char gs2name[2 + NAMESIZE]; /* 2 reserved for namespace keys */ +#define gsname (gs2name + 2) /* before last identifier */ +EXTERN struct symstruct *gsymptr; /* symbol ptr for last identifier */ +EXTERN bool_t incppexpr; /* nonzero while scanning cpp expression */ +EXTERN sym_t sym; /* current symbol */ +extern sym_t symofchar[]; /* table to convert chars to their symbols */ |