-
Notifications
You must be signed in to change notification settings - Fork 1
/
For.y
90 lines (75 loc) · 1.57 KB
/
For.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
%{
#include <stdio.h>
#include <stdlib.h>
extern FILE *yyin;
extern FILE *yyout;
%}
%token ID NUM FOR LE GE EQ NE OR AND CON BREAK
%right '='
%left OR AND
%left LE GE EQ NE '>' '<'
%left '+' '-'
%left '*' '/'
%left '!' '%'
%%
S : ST {printf("Accepted \n"); exit(0);}
ST : FOR '(' E ';' E2 ';' E ')' DEF
| FOR '(' ';' ';' ')' DEF
| FOR '(' E ';' ';' ')' DEF
| FOR '(' ';'E2 ';' ')' DEF
| FOR '(' ';' ';' E ')' DEF
;
DEF :'{' '}'
| '{' BODY '}'
| E ';'
| ST
| ID ID ';'
|';'
;
BODY : BODY ST
| BODY E ';'
| ST
| E ';'
| BREAK ';'
| CON ';'
| ID ID ';'
|';'
| BODY BREAK ';'
| BODY CON ';'
;
E : ID '=' E
|ID ID '=' E
| E '+' E
| E '-' E
| E '*' E
| E '/' E
| E '+' '+'
| E '-' '-'
| '+' '+' E
| '-' '-' E
| E '%' E
| ID
| E2
;
E2 : E'<'E
| E'>'E
| E LE E
| E GE E
| E EQ E
| E NE E
| E OR E
| E AND E
|NUM
;
%%
int yyerror(char const *s)
{
printf("\nyyerror %s\n",s);
exit(1) ;
}
int main(int argc,char **argv) {
yyin = fopen(argv[argc-1],"r");
yyparse();
yyout = fopen("commi.txt", "w");
return 1;
}