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.y30
1 files changed, 21 insertions, 9 deletions
diff --git a/c_parser/src/c_parser.y b/c_parser/src/c_parser.y
index ae80446..038f7dd 100644
--- a/c_parser/src/c_parser.y
+++ b/c_parser/src/c_parser.y
@@ -19,11 +19,11 @@ void yyerror(const char *);
std::string *string;
}
-%token T_KEYWORD T_IDENTIFIER T_SC //T_CONSTANT T_OPERATOR T_LCBRACKET T_RCBRACKET
+%token T_TYPE_SPEC T_TYPE_QUAL T_STRG_SPEC T_IDENTIFIER T_SC T_CMA T_EQ T_INT_CONST
-%type <stmnt> STMNT DCLRTN STMNT_LIST // COMP_STMNT STMNT_LIST_STMNT SLCT_STMNT ITR_STMNT JMP_STMNT
+%type <stmnt> STMNT DCLRTN DCLRTN_SPEC DCLRTN_SPEC_T INIT_DCLRTR INIT_DCLRTR_LIST DCLRTR INITIALIZER STMNT_LIST // COMP_STMNT STMNT_LIST_STMNT SLCT_STMNT ITR_STMNT JMP_STMNT
// %type <number> // T_CONSTANT
-%type <string> T_KEYWORD T_IDENTIFIER //T_OPERATOR
+%type <string> T_IDENTIFIER //T_OPERATOR
%start ROOT
@@ -31,12 +31,24 @@ void yyerror(const char *);
ROOT : STMNT_LIST { ; }
-STMNT_LIST : STMNT { g_root->push_back($1); }
- | STMNT_LIST STMNT { g_root->push_back($2); }
-
-STMNT : DCLRTN { $$ = $1; }
-
-DCLRTN : T_KEYWORD T_IDENTIFIER T_SC { $$ = new ast_Declaration(*$2); }
+STMNT_LIST : STMNT { ; }
+ | STMNT_LIST STMNT { ; }
+ | DCLRTN { ; }
+
+STMNT : DCLRTN { ; }
+
+DCLRTN : DCLRTN_SPEC INIT_DCLRTR_LIST T_SC { $$ = $2; }
+DCLRTN_SPEC : DCLRTN_SPEC_T { ; }
+ | DCLRTN_SPEC_T DCLRTN_SPEC { ; }
+DCLRTN_SPEC_T : T_TYPE_SPEC { ; }
+ | T_TYPE_QUAL { ; }
+ | T_STRG_SPEC { ; }
+INIT_DCLRTR_LIST : INIT_DCLRTR { g_root->push($1); }
+ | INIT_DCLRTR_LIST T_CMA INIT_DCLRTR { g_root->push($3); }
+INIT_DCLRTR : DCLRTR { ; }
+ | DCLRTR T_EQ INITIALIZER { ; }
+DCLRTR : T_IDENTIFIER {$$ = new ast_Declaration(*$1); }
+INITIALIZER : T_INT_CONST { ; }
%%