diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-02-12 18:44:18 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-02-12 18:44:18 +0000 |
commit | 94de096a3f8d90c683f9456e7dd698edd6ee39dd (patch) | |
tree | d7f7910a666d5bfd347e55ca428f7ad942189a09 /c_parser/src/c_parser.y | |
parent | 1111f138d9cd0bb481e0a6f5d68843a463974d5a (diff) | |
download | Compiler-94de096a3f8d90c683f9456e7dd698edd6ee39dd.tar.gz Compiler-94de096a3f8d90c683f9456e7dd698edd6ee39dd.zip |
Continuing parser and introducing expressions and statements
Diffstat (limited to 'c_parser/src/c_parser.y')
-rw-r--r-- | c_parser/src/c_parser.y | 41 |
1 files changed, 14 insertions, 27 deletions
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> EXPR TERM FACTOR +%type <expr> STMNT_LIST STMNT COMP_STMNT EXPR_STMNT SLCT_STMNT ITR_STMNT JMP_STMNT %type <number> T_CONSTANT %type <string> 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 %% |