From 94de096a3f8d90c683f9456e7dd698edd6ee39dd Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Sun, 12 Feb 2017 18:44:18 +0000 Subject: Continuing parser and introducing expressions and statements --- c_parser/src/c_parser.y | 41 ++++++++++++++--------------------------- 1 file changed, 14 insertions(+), 27 deletions(-) (limited to 'c_parser/src/c_parser.y') diff --git a/c_parser/src/c_parser.y b/c_parser/src/c_parser.y index d3c7f0b..42e27de 100644 --- a/c_parser/src/c_parser.y +++ b/c_parser/src/c_parser.y @@ -20,9 +20,9 @@ void yyerror(const char *); std::string *string; } -%token T_KEYWORD T_IDENTIFIER T_CONSTANT T_OPERATOR +%token T_KEYWORD T_IDENTIFIER T_CONSTANT T_OPERATOR T_LCBRACKET T_RCBRACKET -%type EXPR TERM FACTOR +%type STMNT_LIST STMNT COMP_STMNT EXPR_STMNT SLCT_STMNT ITR_STMNT JMP_STMNT %type T_CONSTANT %type T_KEYWORD T_IDENTIFIER T_OPERATOR @@ -30,31 +30,18 @@ void yyerror(const char *); %% -ROOT : EXPR { g_root = $1; } - -EXPR : TERM { $$ = $1; } - | EXPR T_PLUS TERM { $$ = new AddOperator($1, $3); } - | EXPR T_MINUS TERM { $$ = new SubOperator($1, $3); } - -TERM : FACTOR { $$ = $1; } - | TERM T_TIMES FACTOR { $$ = new MulOperator($1, $3); } - | TERM T_DIVIDE FACTOR { $$ = new DivOperator($1, $3); } - -FACTOR : T_NUMBER { $$ = new Number( $1 ); } - | T_VARIABLE { $$ = new Variable( *$1 ); } - | T_LBRACKET EXPR T_RBRACKET { $$ = $2; } - | FUNCTION_NAME FACTOR { - if(*$1 == "log") { - $$ = new LogFunction($2); - } else if(*$1 == "exp") { - $$ = new ExpFunction($2); - } else { - $$ = new SqrtFunction($2); - }} - -FUNCTION_NAME : T_LOG { $$ = new std::string("log"); } - | T_EXP { $$ = new std::string("exp"); } - | T_SQRT { $$ = new std::string("sqrt"); } +ROOT : STMNT_LIST { g_root = $1; } + +STMNT_LIST : STMNT + | STMNT_LIST STMNT + +STMNT : COMP_STMNT + | EXPR_STMNT + | SLCT_STMNT + | ITR_STMNT + | JMP_STMNT + +COMP_STMNT : STMNT_LIST %% -- cgit