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  	{ | 
