diff options
Diffstat (limited to 'grammar.y')
-rw-r--r-- | grammar.y | 43 |
1 files changed, 12 insertions, 31 deletions
@@ -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(); |