standardize sccs keyword lines
[unix-history] / usr / src / usr.bin / m4 / m4y.y
CommitLineData
c9c1d0b1
CC
1Virgin BTL M4 as sent out in 4.1
2/* @(#)m4y.y 1.1 (Berkeley) %G% */
3%{
4extern long evalval;
5#define YYSTYPE long
6%}
7
8%term DIGITS
9%left '|'
10%left '&'
11%right '!'
12%nonassoc GT GE LT LE NE EQ
13%left '+' '-'
14%left '*' '/' '%'
15%right POWER
16%right UMINUS
17%%
18
19s : e ={ evalval = $1; }
20 | ={ evalval = 0; }
21 ;
22
23e : e '|' e ={ $$ = ($1!=0 || $3!=0) ? 1 : 0; }
24 | e '&' e ={ $$ = ($1!=0 && $3!=0) ? 1 : 0; }
25 | '!' e ={ $$ = $2 == 0; }
26 | e EQ e ={ $$ = $1 == $3; }
27 | e NE e ={ $$ = $1 != $3; }
28 | e GT e ={ $$ = $1 > $3; }
29 | e GE e ={ $$ = $1 >= $3; }
30 | e LT e ={ $$ = $1 < $3; }
31 | e LE e ={ $$ = $1 <= $3; }
32 | e '+' e ={ $$ = ($1+$3); }
33 | e '-' e ={ $$ = ($1-$3); }
34 | e '*' e ={ $$ = ($1*$3); }
35 | e '/' e ={ $$ = ($1/$3); }
36 | e '%' e ={ $$ = ($1%$3); }
37 | '(' e ')' ={ $$ = ($2); }
38 | e POWER e ={ for ($$=1; $3-->0; $$ *= $1); }
39 | '-' e %prec UMINUS ={ $$ = $2-1; $$ = -$2; }
40 | '+' e %prec UMINUS ={ $$ = $2-1; $$ = $2; }
41 | DIGITS ={ $$ = evalval; }
42 ;
43
44%%
45
46yylex() {
47 extern char *pe;
48
49 while (*pe==' ' || *pe=='\t' || *pe=='\n')
50 pe++;
51 switch(*pe) {
52 case '\0':
53 case '+':
54 case '-':
55 case '/':
56 case '%':
57 case '(':
58 case ')':
59 return(*pe++);
60 case '^':
61 pe++;
62 return(POWER);
63 case '*':
64 return(peek('*', POWER, '*'));
65 case '>':
66 return(peek('=', GE, GT));
67 case '<':
68 return(peek('=', LE, LT));
69 case '=':
70 return(peek('=', EQ, EQ));
71 case '|':
72 return(peek('|', '|', '|'));
73 case '&':
74 return(peek('&', '&', '&'));
75 case '!':
76 return(peek('=', NE, '!'));
77 default:
78 evalval = 0;
79 while (*pe >= '0' && *pe <= '9')
80 evalval = evalval*10 + *pe++ - '0';
81 return(DIGITS);
82 }
83}
84
85peek(c, r1, r2)
86{
87 if (*++pe != c)
88 return(r2);
89 ++pe;
90 return(r1);
91}
92
93yyerror(s)
94char *s;
95{
96}