```   1: /*
2:  * Copyright (c) 1982 Regents of the University of California.
4:  * specifies the terms and conditions for redistribution.
5:  *
6:  *	@(#)asexpr.h	5.1 (Berkeley) 4/30/85
7:  */
8:
9: /*
10:  *	Definitions to parse tokens
11:  */
12:
13: #define ERROR(string)       yyerror(string); goto errorfix
14:
16:
17: #define shift           val = yylex()
19:
20: #define shiftover(token)    if (val != token) { \
21:                     shiftoerror(token); \
22:                     goto errorfix; \
23:                 } \
24:                 shift
25:
27:
28: /*
29:  *	To speed up the expression processing, we class the input tokens
30:  *	into various sets.
31:  *
32:  *	We don't call the recursive descent expression analyzer if we can
33:  *	determine by looking at the next token after the first token in
34:  *	an expression that the expression is simple (name, integer or floating
35:  *	point value).  Expressions with operators are parsed using the recursive
36:  *	descent method.
37:  */
38:
39: /*
40:  *	Functional forwards for expression utility routines
41:  */
42: struct  exp *combine();
43: struct  exp *boolterm();
44: struct  exp *term();
45: struct  exp *factor();
46: struct  exp *yukkyexpr();
47:
48: /*
49:  *	The set definitions
50:  */
51:
52: extern  char    tokensets[(LASTTOKEN) - (FIRSTTOKEN) + 1];
53:
54: #define LINSTBEGIN  01  /*SEMI, NL, NAME*/
55: #define EBEGOPS     02  /*LP, MINUS, TILDE*/
56: #define YUKKYEXPRBEG    04  /*NAME, INSTn, INST0, REG, BFINT*/
57: #define SAFEEXPRBEG 010 /*INT, FLTNUM*/
58: #define ADDOPS      020 /*PLUS, MINUS*/
59: #define BOOLOPS     040 /*IOR, XOR, AND*/
60: #define MULOPS      0100    /*LSH, RSH, MUL, DIV, TILDE*/
61:
62: #define INTOKSET(val, set)  (tokensets[(val)] & (set) )
63:
64: inttoktype  exprparse();
65: inttoktype  funnyreg();
66: inttoktype  yylex();
67:
68: #define expr(xp, val) { \
70:         if (INTOKSET(val, YUKKYEXPRBEG)) xp = yukkyexpr(val, yylval); \
71:         else xp = (struct exp *) yylval; \
72:         shift; \
73:     } else { \
74:         val = exprparse(val, ptrloc1xp); \
75:         xp = loc1xp; \
76:     } \
77:     }
78:
79: /*
80:  *	Registers can be either of the form r0...pc, or
81:  *	of the form % <expression>
82:  *	NOTE:	Reizers documentation on the assembler says that it
83:  *	can be of the form r0 + <expression>.. That's not true.
84:  *
85:  *	NOTE:	Reizer's yacc grammar would seem to allow an expression
86:  *	to be: (This is undocumented)
87:  *		a)	a register
88:  *		b)	an Instruction (INSTn or INST0)
89:  */
90:
91: #define findreg(regno) \
92:     if (val == REG) { \
93:         regno = yylval; \
94:         shift; \
95:     } else \
96:     if (val == REGOP) { \
97:         shift;  /*over the REGOP*/ \
98:         val = funnyreg(val, ptrregno); \
99:     } \
100:     else { ERROR ("register expected"); }
```

Defined macros

ADDOPS defined in line 58; used 4 times
BOOLOPS defined in line 59; used 6 times
EBEGOPS defined in line 55; used 8 times
ERROR defined in line 13; used 6 times
INTOKSET defined in line 62; used 13 times
LINSTBEGIN defined in line 54; used 5 times
MULOPS defined in line 60; used 8 times
SAFEEXPRBEG defined in line 57; used 7 times
YUKKYEXPRBEG defined in line 56; used 11 times
advance defined in line 18; never used
advanceover defined in line 26; never used
expr defined in line 68; used 23 times
findreg defined in line 91; used 5 times
peekahead defined in line 15; used 1 times
• in line 69
shift defined in line 17; used 50 times
shiftover defined in line 20; used 26 times

Usage of this include

 Last modified: 1985-04-30 Generated: 2016-12-26 Generated by src2html V0.67 page hit count: 1023