summaryrefslogtreecommitdiff
path: root/bcc/scan.h
diff options
context:
space:
mode:
Diffstat (limited to 'bcc/scan.h')
-rw-r--r--bcc/scan.h201
1 files changed, 201 insertions, 0 deletions
diff --git a/bcc/scan.h b/bcc/scan.h
new file mode 100644
index 0000000..5333e96
--- /dev/null
+++ b/bcc/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 */