Add production rules that seem to work

This commit is contained in:
Danila Fedorin 2019-05-12 12:53:04 -07:00
parent 8d8f3f8c10
commit 51b20b280d
1 changed files with 66 additions and 3 deletions

View File

@ -2,6 +2,7 @@
#include <string>
#include <iostream>
#include <set>
#include "parser.hpp"
%}
@ -51,25 +52,87 @@ void yyerror(const char* s) {
std::cout << s << std::endl;
}
std::set<std::string> varset;
%}
%%
program
: program stmt
: stmts
;
stmts
: stmts stmt
| stmt
;
stmt
: expr NEWLINE;
: expr NEWLINE
| if
| while
| BREAK NEWLINE
;
expr
: assign
| INTEGER
| eq
;
while
: WHILE expr COLON NEWLINE block
;
if
: IF expr COLON NEWLINE block ifend
| IF expr COLON NEWLINE block
;
ifend
: ELIF expr COLON NEWLINE block ifend
| ELIF expr COLON NEWLINE block
| ELSE COLON NEWLINE block
block
: INDENT stmts DEDENT
;
assign
: IDENTIFIER ASSIGN expr
;
eq
: eq EQ rel
| eq NEQ rel
| rel
;
rel
: rel LT sum
| rel LTE sum
| rel GT sum
| rel GTE sum
| sum
;
sum
: sum PLUS factor
| sum MINUS factor
| factor
;
factor
: factor TIMES term
| factor DIVIDEDBY term
| term
;
term
: IDENTIFIER
| FLOAT
| INTEGER
| BOOLEAN
| LPAREN expr RPAREN
;
%%