diff options
Diffstat (limited to 'c_parser/src/c_parser.y')
-rw-r--r-- | c_parser/src/c_parser.y | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/c_parser/src/c_parser.y b/c_parser/src/c_parser.y index d8396a8..9c65dfd 100644 --- a/c_parser/src/c_parser.y +++ b/c_parser/src/c_parser.y @@ -20,13 +20,15 @@ void yyerror(const char *); } %token T_TYPE_SPEC T_TYPE_QUAL T_STRG_SPEC T_IDENTIFIER -%token T_SC T_CMA T_EQ T_LRB T_RRB T_LCB T_RCB +%token T_SC T_CMA T_EQ T_LRB T_RRB T_LCB T_RCB T_EQUALITY %token T_INT_CONST +%token T_IF T_ELSE %type <stmnt> EXT_DEF EXT_DECLARATION %type <stmnt> FUNC_DEF PARAMETER_LIST PARAMETER PARAM_DECLARATOR %type <stmnt> DECLARATION_LIST DECLARATION DECLARATION_SPEC DECLARATION_SPEC_T INIT_DECLARATOR INIT_DECLARATOR_LIST DECLARATOR INITIALIZER -%type <stmnt> STATEMENT_LIST STATEMENT COMPOUND_STATEMENT COMPOUND_STATEMENT_2 +%type <stmnt> STATEMENT_LIST STATEMENT COMPOUND_STATEMENT COMPOUND_STATEMENT_2 SELECTION_STATEMENT +%type <stmnt> EXPRESSION EQUALITY_EXPRESSION // %type <number> // T_CONSTANT %type <string> T_IDENTIFIER //T_OPERATOR @@ -101,6 +103,7 @@ STATEMENT_LIST : STATEMENT { $$ = new ast_StatementList($1); } ; STATEMENT : COMPOUND_STATEMENT { $$ = $1; } + | SELECTION_STATEMENT { ; } ; COMPOUND_STATEMENT : T_LCB COMPOUND_STATEMENT_2 { $$ = $2; } @@ -108,12 +111,23 @@ COMPOUND_STATEMENT : T_LCB COMPOUND_STATEMENT_2 { $$ = $2; } COMPOUND_STATEMENT_2 : T_RCB { $$ = new ast_CompoundStatement; } | DECLARATION_LIST T_RCB { $$ = new ast_CompoundStatement($1); } -| DECLARATION_LIST STATEMENT_LIST T_RCB { $$ = new ast_CompoundStatement($1, $2); } + | DECLARATION_LIST STATEMENT_LIST T_RCB { $$ = new ast_CompoundStatement($1, $2); } | STATEMENT_LIST T_RCB { $$ = new ast_CompoundStatement($1); } ; +SELECTION_STATEMENT : T_IF T_LRB EXPRESSION T_RRB STATEMENT SELECTION_STATEMENT_2 { ; } + +SELECTION_STATEMENT_2 : %empty { ; } + | T_ELSE STATEMENT { ; } + // Expressions +EXPRESSION : EQUALITY_EXPRESSION { ; } +; + +EQUALITY_EXPRESSION : T_IDENTIFIER T_EQUALITY T_IDENTIFIER { ; } +; + %% ast_Top *g_root; // Definition of variable (to match declaration earlier) |