7 #include "symbol_table.h"
9 /*extern char *yytext;*/
12 static void yyerror (/*YYLTYPE *locp, */const char *msg
);
13 /*int yylex (YYSTYPE *yylval_param, YYLTYPE *yylloc_param);*/
21 /*%parse-param {ValaParser *parser}
22 %lex-param {ValaParser *parser}*/
64 %token
<lexeme
> IDENTIFIER
65 %token
<integer
> NUMBER
66 %token
<boolean
> BOOLEAN
68 /*%type <symbol> program
69 %type <symbol> var_decl_list
70 %type <symbol> var_decl
71 %type <symbol> var_type
72 %type <symbol> proc_func_list
73 %type <symbol> proc_func_decl
74 %type <symbol> proc_func_body
75 %type <symbol> proc_decl
76 %type <symbol> func_decl
77 %type <symbol> param_list
78 %type <symbol> single_param
79 %type <symbol> multi_param
80 %type <symbol> code_block
81 %type <symbol> statements
82 %type <symbol> statement*/
84 %type
<lexeme
> assignment
85 %type
<integer
> numeric_expression
86 %type
<boolean
> relational_expression
87 %type
<integer
> number_literal
89 /*%type <symbol> print_statement
90 %type <symbol> print_integer
91 %type <symbol> print_boolean
92 %type <symbol> print_line*/
98 var_decl_list proc_func_list code_block T_DOT
{ printf
("program\n"); }
102 var_decl_list var_decl
{ printf
("\n"); }
107 T_VAR IDENTIFIER T_COLON var_type T_SEMICOLON
108 { printf
("var_decl\n") }
113 { printf
("var_type\n") }
115 { printf
("var_type\n") }
120 { printf
("proc_func_list\n") }
121 | proc_func_list proc_decl
122 { printf
("proc_func_list\n") }
123 | proc_func_list func_decl
124 { printf
("proc_func_list\n") }
128 IDENTIFIER T_LPAR param_list T_RPAR
129 { printf
("proc_func_decl\n") }
133 var_decl_list code_block T_SEMICOLON
134 { printf
("proc_func_body\n") }
138 T_PROCEDURE proc_func_decl T_SEMICOLON proc_func_body
139 { printf
("proc_decl\n") }
143 T_FUNCTION proc_func_decl T_COLON var_type T_SEMICOLON proc_func_body
144 { printf
("func_decl\n") }
149 { printf
("param_list\n") }
150 | single_param multi_param
151 { printf
("param_list\n") }
155 IDENTIFIER T_COLON var_type
156 { printf
("single_param\n") }
161 { printf
("multi_param\n") }
162 | T_COMMA single_param multi_param
163 { printf
("multi_param\n") }
167 T_BEGIN statements T_END
168 { printf
("code_block\n") }
173 | statements statement T_SEMICOLON
182 IDENTIFIER T_ASSIGNMENT expression
183 | IDENTIFIER T_ASSIGNMENT NUMBER
{ $$
= $1; }
188 | relational_expression
192 numeric_expression T_ADD numeric_expression
{ $$
= $1 + $3; }
193 | numeric_expression T_SUB numeric_expression
{ $$
= $1 - $3; }
194 | number_literal
{ $$
= $1; }
201 relational_expression:
202 numeric_expression relational_operator numeric_expression
221 T_PRINT_INT T_LPAR NUMBER T_RPAR
{ printf
("%d", $3); }
224 T_PRINT_BOOL T_LPAR BOOLEAN T_RPAR
{ printf
("%s", ($3 == 0 ?
"False" : "True")); }
227 T_PRINT_LINE T_LPAR T_RPAR
{ printf
("\n"); }
231 yyerror (/*YYLTYPE *locp,*/ const char *msg
)
233 fprintf
(stderr
,"error: %s\n", msg
);
237 main
(int argc
, char **argv
)
240 yyin
= fopen
(argv
[1], "r");
244 /*yylloc.first_line = yylloc.last_line = 1;
245 yylloc.first_column = yylloc.last_column = 0;*/