diff options
Diffstat (limited to 'c_parser/src/c_parser.y')
-rw-r--r-- | c_parser/src/c_parser.y | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/c_parser/src/c_parser.y b/c_parser/src/c_parser.y index 97d13a7..5429f76 100644 --- a/c_parser/src/c_parser.y +++ b/c_parser/src/c_parser.y @@ -19,9 +19,13 @@ void yyerror(const char *); std::string *string; } -%token T_TYPE_SPEC T_TYPE_QUAL T_STRG_SPEC T_IDENTIFIER T_SC T_CMA T_EQ T_LRB T_RRB T_LCB T_RCB T_INT_CONST +%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_INT_CONST -%type <stmnt> EXT_DEF EXT_DECLARATION FUNC_DEF DECLARATION DECLARATION_SPEC DECLARATION_SPEC_T INIT_DECLARATOR INIT_DECLARATOR_LIST DECLARATOR INITIALIZER +%type <stmnt> EXT_DEF EXT_DECLARATION EXT_DECLARATION_2 +%type <stmnt> FUNC_DEF +%type <stmnt> DECLARATION DECLARATION_SPEC DECLARATION_SPEC_T INIT_DECLARATOR INIT_DECLARATOR_LIST DECLARATOR INITIALIZER // %type <number> // T_CONSTANT %type <string> T_IDENTIFIER //T_OPERATOR @@ -36,20 +40,20 @@ ROOT : EXT_DEF { ; } EXT_DEF : EXT_DECLARATION { ; } | EXT_DEF EXT_DECLARATION { $$ = $2; } -EXT_DECLARATION : DECLARATION_SPEC EXT_DECLARATION_2 { ; } +EXT_DECLARATION : DECLARATION_SPEC EXT_DECLARATION_2 { $$ = $2; } EXT_DECLARATION_2 : DECLARATION { ; } | FUNC_DEF { ; } // FUNCTION DEFINITION -FUNC_DEF : T_IDENTIFIER T_LRB T_RRB T_LCB T_RCB { ; } +FUNC_DEF : T_IDENTIFIER T_LRB T_RRB T_LCB T_RCB { ; } // DECLARATION DECLARATION : INIT_DECLARATOR_LIST T_SC { ; } -DECLARATION_SPEC : DECLARATION_SPEC_T { ; } +DECLARATION_SPEC : DECLARATION_SPEC_T { ; } | DECLARATION_SPEC_T DECLARATION_SPEC { ; } DECLARATION_SPEC_T : T_TYPE_SPEC { ; } @@ -59,12 +63,12 @@ DECLARATION_SPEC_T : T_TYPE_SPEC { ; } INIT_DECLARATOR_LIST : INIT_DECLARATOR { g_root->push($1); } | INIT_DECLARATOR_LIST T_CMA INIT_DECLARATOR { g_root->push($3); } -INIT_DECLARATOR : DECLARATOR { ; } +INIT_DECLARATOR : DECLARATOR { ; } | DECLARATOR T_EQ INITIALIZER { ; } -DECLARATOR : T_IDENTIFIER {$$ = new ast_Declaration(*$1); } +DECLARATOR : T_IDENTIFIER {$$ = new ast_Declaration(*$1); } -INITIALIZER : T_INT_CONST { ; } +INITIALIZER : T_INT_CONST { ; } // STATEMENTS |