From 51b20b280d8482d5cb403ec4b09817f09e86259a Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sun, 12 May 2019 12:53:04 -0700 Subject: [PATCH] Add production rules that seem to work --- parser.y | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/parser.y b/parser.y index 0342610..9a18155 100644 --- a/parser.y +++ b/parser.y @@ -2,6 +2,7 @@ #include #include +#include #include "parser.hpp" %} @@ -51,25 +52,87 @@ void yyerror(const char* s) { std::cout << s << std::endl; } +std::set 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 + ; + %%