-
Notifications
You must be signed in to change notification settings - Fork 0
/
BooleanParser.y
43 lines (35 loc) · 946 Bytes
/
BooleanParser.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
%token BOOLEAN VARIABLE IMPL
%{
#include <stdio.h>
void yyerror(char*);
int yylex(void);
int varArray[100];
%}
%%
program:
program statement '\n'
|
;
statement:
| expression { printf("%d\n", $1); }
| VARIABLE '=' expression { varArray[$1] = $3; }
;
expression:
BOOLEAN
| VARIABLE { $$ = varArray[$1]; }
| '!' BOOLEAN { $$ = !$2; }
| '!' VARIABLE { $$ = !varArray[$2]; }
| expression '+' expression { $$ = $1 | $3; }
| expression '.' expression { $$ = $1 & $3; }
| expression IMPL expression { $$ = !$1 | $3; }
| '(' expression ')' { $$ = $2; }
;
%%
void yyerror(char* s) {
fprintf(stderr, "%s\n", s);
}
int main() {
for (int i = 0; i < 100; i++) varArray[i] = -1;
yyparse();
return 0;
}