summaryrefslogtreecommitdiff
path: root/grammar.y
diff options
context:
space:
mode:
Diffstat (limited to 'grammar.y')
-rw-r--r--grammar.y43
1 files changed, 12 insertions, 31 deletions
diff --git a/grammar.y b/grammar.y
index 8d660a9..a37dae6 100644
--- a/grammar.y
+++ b/grammar.y
@@ -21,13 +21,13 @@ ast_node* yyast = NULL;
%token OPERATOR_PLUS
%token OPERATOR_MINUS
-%token ASSIGN
+%token <string> ASSIGN
%token FUNCTION
%token IF
%token ELSE
%token RETURN
-%token CONST
+%token <string> CONST
%token VAR
%token <string> TYPE_INTEGER
@@ -42,7 +42,7 @@ ast_node* yyast = NULL;
%token BRACKET_RIGHT
%token COMMA;
-%token COLON;
+%token <string> COLON;
%token <number> NUMBER;
%token <string> IDENTIFIER
@@ -63,31 +63,12 @@ ast_node* yyast = NULL;
%start program
%%
-program: { $$ = NULL; }
- | program statement END_OF_LINE { $$ = create_program_node($1, $2); }
-
-
-// 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
-
-arguments:
- argument
- | arguments COMMA argument
-
-argument:
- IDENTIFIER COLON variable_type { $$ = create_argument_node($1, $3); }
-
-
-return_type:
- TYPE_INTEGER { $$ = create_type_node($1); }
- | TYPE_STRING { $$ = create_type_node($1); }
- | TYPE_VOID { $$ = create_type_node($1); }
+program:
+ statement END_OF_LINE
+ | program program { $$ = create_program_node($1, $2); }
variable_type:
- TYPE_INTEGER { $$ = create_type_node($1); }
+ TYPE_INTEGER { printf("variable_type:: %s\n", $1); $$ = create_type_node($1); }
| TYPE_STRING { $$ = create_type_node($1); }
@@ -97,19 +78,19 @@ statements:
statement:
// const henshin: integer = 2
- | CONST IDENTIFIER COLON variable_type ASSIGN expression
- | RETURN expression
- | IDENTIFIER PARENTHESIS_LEFT PARENTHESIS_RIGHT
- | function
+ CONST IDENTIFIER COLON variable_type ASSIGN expression { printf("$1: %s -- $2: %s -- $3: %s -- $4: %s -- $5: %s -- $6: %s\n", $1, $2, $3, "4", $5, "6"); }
expression:
NUMBER
- | IDENTIFIER
%%
void main (int argc, char **argv)
{
+ #ifdef YYDEBUG
+ yydebug = 1;
+ #endif
+
//henshin_lex();
yyin = fopen(argv[1], "r");
yyparse();