-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalc.y
77 lines (69 loc) · 1.33 KB
/
calc.y
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*%{
#include<stdio.h>
int flag=0;
%}
% token NUMBER
% left '+' '-'
% left '*' '/' '%'
% left '(' ')'
%%
Arithmetic Expression: E{
printf("\n Result =%d\n",$$);
return 0;
}
E:E'+'E {$$ =$1+$3;}
|E '-' E {$$=$1-$3;}
|E'*'E {$$ =$1*$3;}
|E '/' E {$$=$1/$3;}
|E'%'E {$$ =$1%$3;}
|'('E')'{$$=$2;}
|NUMBER {$$=$1;}
;
%%
void main(){
printf("Enter Arithmetic Expression which can have operations ADD,SUB,MUL DIV&ROIND BRACKET\n");
yyparse();
if(flag==0){
printf("entered arithmetic expression is valid\n");
}
}
void yyerror(){
printf("\n Entered arithmetic expression is invalid \n");
flag=1;
}
*/
%{
#include <stdio.h>
int flag = 0;
int yylex();
void yyerror(const char* s);
%}
%token NUMBER
%left '+' '-'
%left '*' '/' '%'
%left '(' ')'
%%
Arithmetic_Expression: E {
printf("\n Result = %d\n", $1);
return 0;
}
E: E '+' E { $$ = $1 + $3; }
| E '-' E { $$ = $1 - $3; }
| E '*' E { $$ = $1 * $3; }
| E '/' E { $$ = $1 / $3; }
| E '%' E { $$ = $1 % $3; }
| '(' E ')' { $$ = $2; }
| NUMBER { $$ = $1; }
;
%%
int main() {
printf("Enter Arithmetic Expression which can have operations ADD, SUB, MUL, DIV & ROUND BRACKET\n");
yyparse();
if (flag == 0) {
printf("Entered arithmetic expression is valid\n");
}
}
void yyerror(const char* s) {
printf("\nEntered arithmetic expression is invalid\n");
flag = 1;
}