aboutsummaryrefslogtreecommitdiff
path: root/10/main.y
diff options
context:
space:
mode:
Diffstat (limited to '10/main.y')
-rw-r--r--10/main.y33
1 files changed, 33 insertions, 0 deletions
diff --git a/10/main.y b/10/main.y
new file mode 100644
index 0000000..f45e23f
--- /dev/null
+++ b/10/main.y
@@ -0,0 +1,33 @@
1%{
2#include <stdio.h>
3#include <stdlib.h>
4int yylex();
5int yyerror(char *);
6%}
7
8%token ADD SUB MUL DIV NUM
9%left ADD SUB MUL DIV
10
11%%
12R: E {
13 printf("result: %d", $$);
14 return 0;
15 }
16E: E ADD T { $$ = $1 + $3; }
17 | E SUB T { $$ = $1 - $3; }
18 | T
19 ;
20T: T MUL NUM { $$ = $1 * $3; }
21 | T DIV NUM { $$ = $1 / $3; }
22 | NUM { $$ = $1; }
23 ;
24%%
25
26int main() {
27 yyparse();
28}
29
30int yyerror(char *s) {
31 printf("error: %s", s);
32 exit(0);
33}