aboutsummaryrefslogtreecommitdiff
path: root/sem1/osc/mm11/regn2/regn.y
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(); 
}