blob: a181cb31d50a03014cf492b5f84efd5901728d4f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
%{
#include <stdio.h>
#include <math.h>
#include <string.h>
%}
%union {
double dval;
}
%token <dval> TAL
%token LOG EXP SQRT
%left '-' '+'
%left LOG EXP SQRT
%left '*' '/'
%right UMINUS
%type <dval> expression
%%
statement_list: statement '\n'
| statement_list statement '\n' ;
statement: expression {;};
expression: expression '+' expression {printf("sum \n");}
| expression '-' expression {printf("sub \n");}
| expression '*' expression {printf("mul \n");}
| expression '/' expression {if ($3 == 0.0)
yyerror("divide dy zero");
else printf("div \n");}
| '-' expression %prec UMINUS {printf("neg \n");}
| '(' expression ')' {;}
| LOG expression {printf("log \n");}
| EXP expression {printf("exp \n");}
| SQRT expression {printf("sqrt \n");}
| TAL {printf("load %f \n", $$);};
%%
int main()
{
yyparse();
}
|