equal
deleted
inserted
replaced
19 %left MINUS PLUS MUL DIV |
19 %left MINUS PLUS MUL DIV |
20 %left UMINUS |
20 %left UMINUS |
21 %% |
21 %% |
22 |
22 |
23 list: |
23 list: |
24 /* empty */ |
24 /* empty */ |
25 | list stat '\n' |
25 | list stat '\n' |
26 | list error '\n' { yyerrok; }; |
26 | list error '\n' { yyerrok; }; |
27 |
27 |
28 stat: |
28 stat: |
29 expr { (void) printf( "RESULT: %d\n", $1 ); } |
29 expr { (void) printf( "RESULT: %d\n", $1 ); } |
30 | LETTER '=' expr { regs[$1] = $3; } |
30 | LETTER '=' expr { regs[$1] = $3; } |
31 ; |
31 ; |
32 |
32 |
33 expr: |
33 expr: |
34 '(' expr ')' |
34 '(' expr ')' |
35 { |
35 { |
36 $$ = $2; |
36 $$ = $2; |
37 } |
37 } |
38 | expr PLUS expr |
38 | expr PLUS expr |
39 { |
39 { |
40 $$ = $1 + $3; |
40 $$ = $1 + $3; |
41 } |
41 } |
42 | expr MINUS expr |
42 | expr MINUS expr |
43 { |
43 { |
44 $$ = $1 - $3; |
44 $$ = $1 - $3; |
45 } |
45 } |
46 | expr MUL expr |
46 | expr MUL expr |
47 { |
47 { |
48 $$ = $1 * $3; |
48 $$ = $1 * $3; |
49 } |
49 } |
50 | expr DIV expr |
50 | expr DIV expr |
51 { |
51 { |
52 $$ = $1 / $3; |
52 $$ = $1 / $3; |
53 } |
53 } |
54 | MINUS expr %prec UMINUS |
54 | MINUS expr %prec UMINUS |
55 { |
55 { |
56 $$ = -$2; |
56 $$ = -$2; |
57 } |
57 } |
58 | LETTER |
58 | LETTER |
59 { |
59 { |
60 $$ = regs[$1]; |
60 $$ = regs[$1]; |
61 } |
61 } |
62 | number |
62 | number |
63 ; |
63 ; |
64 |
64 |
65 number: |
65 number: |
66 DIGIT |
66 DIGIT |
67 { |
67 { |
68 $$ = $1; base = ($1==0) ? 8 : 10; |
68 $$ = $1; base = ($1==0) ? 8 : 10; |
69 } |
69 } |
70 | number DIGIT |
70 | number DIGIT |
71 { |
71 { |
72 $$ = base * $1 + $2; |
72 $$ = base * $1 + $2; |
73 } |
73 } |
74 ; |
74 ; |
75 %% |
75 %% |
76 |
76 |
77 int yyerror() |
77 int yyerror() |
78 { |
78 { |
79 printf("ERROR\n"); |
79 printf("ERROR\n"); |
80 return 0; |
80 return 0; |
81 } |
81 } |
82 |
82 |
83 int yywrap() |
83 int yywrap() |
84 { |
84 { |
85 return 1; |
85 return 1; |
86 } |
86 } |