diff options
author | Daniel Weipert <code@drogueronin.de> | 2022-12-06 22:28:48 +0100 |
---|---|---|
committer | Daniel Weipert <code@drogueronin.de> | 2022-12-06 22:28:48 +0100 |
commit | f7fddeaf9f0453054d4666d8a5b544d4c4cefebd (patch) | |
tree | 1f84126d93313358fd62da6d2c2497a3d0643341 /grammar.y | |
parent | f17b517e56503600355de910ce576efab56b1287 (diff) |
Fix token typing and work towards ast generation
Diffstat (limited to 'grammar.y')
-rw-r--r-- | grammar.y | 37 |
1 files changed, 17 insertions, 20 deletions
@@ -30,9 +30,9 @@ ast_node* yyast = NULL; %token CONST %token VAR -%token TYPE_INTEGER -%token TYPE_STRING -%token TYPE_VOID +%token <string> TYPE_INTEGER +%token <string> TYPE_STRING +%token <string> TYPE_VOID %token PARENTHESIS_LEFT %token PARENTHESIS_RIGHT @@ -44,8 +44,8 @@ ast_node* yyast = NULL; %token COMMA; %token COLON; -%token NUMBER; -%token IDENTIFIER +%token <number> NUMBER; +%token <string> IDENTIFIER %token COMMENT; %token END_OF_LINE; @@ -60,9 +60,6 @@ ast_node* yyast = NULL; %type <node> statement %type <node> expression -%type <node> IDENTIFIER -%type <node> RETURN - %start program %% @@ -73,41 +70,41 @@ program: { $$ = NULL; } // function henshin(): void {} // function henshin(hen: integer, shin: integer): void {} function: - | FUNCTION IDENTIFIER PARENTHESIS_LEFT PARENTHESIS_RIGHT COLON return_type BRACE_LEFT statements BRACE_RIGHT - | FUNCTION IDENTIFIER PARENTHESIS_LEFT arguments PARENTHESIS_RIGHT COLON return_type BRACE_LEFT statements BRACE_RIGHT { $$ = create_node(); $$->value = $2; } + FUNCTION IDENTIFIER PARENTHESIS_LEFT PARENTHESIS_RIGHT COLON return_type BRACE_LEFT statements BRACE_RIGHT + | FUNCTION IDENTIFIER PARENTHESIS_LEFT arguments PARENTHESIS_RIGHT COLON return_type BRACE_LEFT statements BRACE_RIGHT arguments: - | argument + argument | arguments COMMA argument argument: - | IDENTIFIER COLON variable_type + IDENTIFIER COLON variable_type { $$ = create_argument_node($1, $3); } return_type: - | TYPE_INTEGER - | TYPE_STRING - | TYPE_VOID + TYPE_INTEGER { $$ = create_type_node($1); } + | TYPE_STRING { $$ = create_type_node($1); } + | TYPE_VOID { $$ = create_type_node($1); } variable_type: - | TYPE_INTEGER - | TYPE_STRING + TYPE_INTEGER { $$ = create_type_node($1); } + | TYPE_STRING { $$ = create_type_node($1); } statements: - | statement + statement | statements END_OF_LINE statement statement: // const henshin: integer = 2 | CONST IDENTIFIER COLON variable_type ASSIGN expression - | RETURN expression { $$ = create_node(); $$->left = $1; $$->right = $2; } + | RETURN expression | IDENTIFIER PARENTHESIS_LEFT PARENTHESIS_RIGHT | function expression: - | NUMBER + NUMBER | IDENTIFIER %% |