aboutsummaryrefslogtreecommitdiffstats
path: root/c_parser/src/c_parser.y
diff options
context:
space:
mode:
Diffstat (limited to 'c_parser/src/c_parser.y')
-rw-r--r--c_parser/src/c_parser.y41
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
%%