xref: /original-bsd/old/cpp/cpy.y (revision b64b0d54)
1 /*
2  * @(#)cpy.y 1.2 01/02/83
3  */
4 %term number stop DEFINED
5 %term EQ NE LE GE LS RS
6 %term ANDAND OROR
7 %left ','
8 %right '='
9 %right '?' ':'
10 %left OROR
11 %left ANDAND
12 %left '|' '^'
13 %left '&'
14 %binary EQ NE
15 %binary '<' '>' LE GE
16 %left LS RS
17 %left '+' '-'
18 %left '*' '/' '%'
19 %right '!' '~' UMINUS
20 %left '(' '.'
21 %%
22 S:	e stop	={return($1);}
23 
24 
25 e:	  e '*' e
26 		={$$ = $1 * $3;}
27 	| e '/' e
28 		={$$ = $1 / $3;}
29 	| e '%' e
30 		={$$ = $1 % $3;}
31 	| e '+' e
32 		={$$ = $1 + $3;}
33 	| e '-' e
34 		={$$ = $1 - $3;}
35 	| e LS e
36 		={$$ = $1 << $3;}
37 	| e RS e
38 		={$$ = $1 >> $3;}
39 	| e '<' e
40 		={$$ = $1 < $3;}
41 	| e '>' e
42 		={$$ = $1 > $3;}
43 	| e LE e
44 		={$$ = $1 <= $3;}
45 	| e GE e
46 		={$$ = $1 >= $3;}
47 	| e EQ e
48 		={$$ = $1 == $3;}
49 	| e NE e
50 		={$$ = $1 != $3;}
51 	| e '&' e
52 		={$$ = $1 & $3;}
53 	| e '^' e
54 		={$$ = $1 ^ $3;}
55 	| e '|' e
56 		={$$ = $1 | $3;}
57 	| e ANDAND e
58 		={$$ = $1 && $3;}
59 	| e OROR e
60 		={$$ = $1 || $3;}
61 	| e '?' e ':' e
62 		={$$ = $1 ? $3 : $5;}
63 	| e ',' e
64 		={$$ = $3;}
65 	| term
66 		={$$ = $1;}
67 term:
68 	  '-' term %prec UMINUS
69 		={$$ = -$2;}
70 	| '!' term
71 		={$$ = !$2;}
72 	| '~' term
73 		={$$ = ~$2;}
74 	| '(' e ')'
75 		={$$ = $2;}
76 	| DEFINED '(' number ')'
77 		={$$= $3;}
78 	| DEFINED number
79 		={$$ = $2;}
80 	| number
81 		={$$= $1;}
82 %%
83 # include "yylex.c"
84