summaryrefslogtreecommitdiff
path: root/grammar.y
diff options
context:
space:
mode:
Diffstat (limited to 'grammar.y')
-rw-r--r--grammar.y37
1 files changed, 17 insertions, 20 deletions
diff --git a/grammar.y b/grammar.y
index c85da97..8d660a9 100644
--- a/grammar.y
+++ b/grammar.y
@@ -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
%%