diff options
-rw-r--r-- | pc.l | 16 | ||||
-rw-r--r-- | pc.y | 9 |
2 files changed, 23 insertions, 2 deletions
@@ -34,6 +34,22 @@ id [A-Za-z][A-Za-z0-9_]* return PROG; } +input { + node *tmp; + tmp = scope_insert(cur_scope, "write"); + tmp->func_info = malloc(sizeof(struct fi)); + + return IO; +} + +output { + node *tmp; + tmp = scope_insert(cur_scope, "read"); + tmp->func_info = malloc(sizeof(struct fi)); + + return IO; +} + "var" { debug_print(VAR, NULL); return VAR; @@ -26,6 +26,7 @@ extern scope *cur_scope; } %token PROG +%token IO %token VAR %token PROC FUNC %token BEG END @@ -94,7 +95,7 @@ extern scope *cur_scope; %% program - :PROG ID '(' id_list ')' ';' + :PROG ID '(' io_list ')' ';' var_declarations sub_prog_declarations compound_statement @@ -105,7 +106,6 @@ program print_tree($9); #endif free_tree($9); - free_tree($4); #ifdef DEBUG print_scope(cur_scope); #endif @@ -113,6 +113,11 @@ program } ; +io_list + :IO + |io_list ',' IO +; + id_list :ID { |