|
|
1.1 root 1: %{
2: /*#ident "@(#)cpp:common/cpy.y 1.5"*/
3: %}
4: %{
5: %}
6: %term number stop DEFINED
7: %term EQ NE LE GE LS RS
8: %term ANDAND OROR
9: %left ','
10: %right '='
11: %right '?' ':'
12: %left OROR
13: %left ANDAND
14: %left '|' '^'
15: %left '&'
16: %binary EQ NE
17: %binary '<' '>' LE GE
18: %left LS RS
19: %left '+' '-'
20: %left '*' '/' '%'
21: %right '!' '~' UMINUS
22: %left '(' '.'
23: %%
24: S: e stop ={return($1);}
25:
26:
27: e: e '*' e
28: ={$$ = $1 * $3;}
29: | e '/' e
30: ={
31: if ($3 == 0) {
32: ppwarn("division by zero");
33: $$ = 0;
34: }
35: else
36: $$ = $1 / $3;
37: }
38: | e '%' e
39: ={
40: if ($3 == 0) {
41: ppwarn("remainder by zero");
42: $$ = 0;
43: }
44: else
45: $$ = $1 % $3;
46: }
47: | e '+' e
48: ={$$ = $1 + $3;}
49: | e '-' e
50: ={$$ = $1 - $3;}
51: | e LS e
52: ={$$ = $1 << $3;}
53: | e RS e
54: ={$$ = $1 >> $3;}
55: | e '<' e
56: ={$$ = $1 < $3;}
57: | e '>' e
58: ={$$ = $1 > $3;}
59: | e LE e
60: ={$$ = $1 <= $3;}
61: | e GE e
62: ={$$ = $1 >= $3;}
63: | e EQ e
64: ={$$ = $1 == $3;}
65: | e NE e
66: ={$$ = $1 != $3;}
67: | e '&' e
68: ={$$ = $1 & $3;}
69: | e '^' e
70: ={$$ = $1 ^ $3;}
71: | e '|' e
72: ={$$ = $1 | $3;}
73: | e ANDAND e
74: ={$$ = $1 && $3;}
75: | e OROR e
76: ={$$ = $1 || $3;}
77: | e '?' e ':' e
78: ={$$ = $1 ? $3 : $5;}
79: | e ',' e
80: ={$$ = $3;}
81: | term
82: ={$$ = $1;}
83: term:
84: '-' term %prec UMINUS
85: ={$$ = -$2;}
86: | '!' term
87: ={$$ = !$2;}
88: | '~' term
89: ={$$ = ~$2;}
90: | '(' e ')'
91: ={$$ = $2;}
92: | DEFINED '(' number ')'
93: ={$$= $3;}
94: | DEFINED number
95: ={$$ = $2;}
96: | number
97: ={$$= $1;}
98: %%
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.