stage1_2/iec.y
changeset 175 dadda1b5401e
parent 151 3b898fb11e73
child 177 697562a5da7c
equal deleted inserted replaced
174:f648065fb66e 175:dadda1b5401e
   233 %type <leaf>	start
   233 %type <leaf>	start
   234 
   234 
   235 %type <leaf>	any_identifier
   235 %type <leaf>	any_identifier
   236 
   236 
   237 %token <ID>	prev_declared_variable_name_token
   237 %token <ID>	prev_declared_variable_name_token
       
   238 %token <ID>	prev_declared_direct_variable_token
   238 %token <ID>	prev_declared_fb_name_token
   239 %token <ID>	prev_declared_fb_name_token
   239 %type <leaf>	prev_declared_variable_name
   240 %type <leaf>	prev_declared_variable_name
       
   241 %type <leaf>	prev_declared_direct_variable
   240 %type <leaf>	prev_declared_fb_name
   242 %type <leaf>	prev_declared_fb_name
   241 
   243 
   242 %token  <ID>	prev_declared_simple_type_name_token
   244 %token  <ID>	prev_declared_simple_type_name_token
   243 %token  <ID>	prev_declared_subrange_type_name_token
   245 %token  <ID>	prev_declared_subrange_type_name_token
   244 %token  <ID>	prev_declared_enumerated_type_name_token
   246 %token  <ID>	prev_declared_enumerated_type_name_token
   619 /* Done totally within flex...
   621 /* Done totally within flex...
   620  location_prefix
   622  location_prefix
   621  size_prefix
   623  size_prefix
   622 */
   624 */
   623 %token <ID>	direct_variable_token
   625 %token <ID>	direct_variable_token
   624 %type  <leaf>	direct_variable
   626 //%type  <leaf>	direct_variable
   625 
   627 
   626 
   628 
   627 /*************************************/
   629 /*************************************/
   628 /* B.1.4.2   Multi-element Variables */
   630 /* B.1.4.2   Multi-element Variables */
   629 /*************************************/
   631 /*************************************/
  2965 /*********************/
  2967 /*********************/
  2966 /* B 1.4 - Variables */
  2968 /* B 1.4 - Variables */
  2967 /*********************/
  2969 /*********************/
  2968 variable:
  2970 variable:
  2969   symbolic_variable
  2971   symbolic_variable
  2970 | direct_variable
  2972 | prev_declared_direct_variable
  2971 | eno_param
  2973 | eno_param
  2972 ;
  2974 ;
  2973 
  2975 
  2974 
  2976 
  2975 symbolic_variable:
  2977 symbolic_variable:
  3015 
  3017 
  3016 
  3018 
  3017 /********************************************/
  3019 /********************************************/
  3018 /* B.1.4.1   Directly Represented Variables */
  3020 /* B.1.4.1   Directly Represented Variables */
  3019 /********************************************/
  3021 /********************************************/
  3020 direct_variable: direct_variable_token	{$$ = new direct_variable_c($1, locloc(@$));};
  3022 prev_declared_direct_variable: prev_declared_direct_variable_token	{$$ = new direct_variable_c($1, locloc(@$));};
  3021 
  3023 
  3022 
  3024 
  3023 
  3025 
  3024 
  3026 
  3025 /*************************************/
  3027 /*************************************/
  3854 | double_byte_string_spec
  3856 | double_byte_string_spec
  3855 ;
  3857 ;
  3856 
  3858 
  3857 
  3859 
  3858 location:
  3860 location:
  3859   AT direct_variable
  3861   AT direct_variable_token
  3860 	{$$ = new location_c($2, locloc(@$));}
  3862 	{$$ = new location_c(new direct_variable_c($2, locloc(@$)), locloc(@$));
       
  3863 	 direct_variable_symtable.insert($2, prev_declared_direct_variable_token);
       
  3864 	}
  3861 /* ERROR_CHECK_BEGIN */
  3865 /* ERROR_CHECK_BEGIN */
  3862 | AT error
  3866 | AT error
  3863 	{$$ = NULL;
  3867 	{$$ = NULL;
  3864 	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no location defined in location declaration.");}
  3868 	 if (is_current_syntax_token()) {print_err_msg(locl(@1), locf(@2), "no location defined in location declaration.");}
  3865 	 else {print_err_msg(locf(@2), locl(@2), "invalid location in global location declaration."); yyclearin;}
  3869 	 else {print_err_msg(locf(@2), locl(@2), "invalid location in global location declaration."); yyclearin;}
  4313 function_declaration:
  4317 function_declaration:
  4314 /*  FUNCTION derived_function_name ':' elementary_type_name io_OR_function_var_declarations_list function_body END_FUNCTION */
  4318 /*  FUNCTION derived_function_name ':' elementary_type_name io_OR_function_var_declarations_list function_body END_FUNCTION */
  4315   function_name_declaration ':' elementary_type_name io_OR_function_var_declarations_list function_body END_FUNCTION
  4319   function_name_declaration ':' elementary_type_name io_OR_function_var_declarations_list function_body END_FUNCTION
  4316 	{$$ = new function_declaration_c($1, $3, $4, $5, locloc(@$));
  4320 	{$$ = new function_declaration_c($1, $3, $4, $5, locloc(@$));
  4317 	 variable_name_symtable.pop();
  4321 	 variable_name_symtable.pop();
       
  4322 	 direct_variable_symtable.pop();
  4318 	 if (allow_function_overloading) {
  4323 	 if (allow_function_overloading) {
  4319 	   switch (library_element_symtable.find_value($1)) {
  4324 	   switch (library_element_symtable.find_value($1)) {
  4320 	     case prev_declared_derived_function_name_token:
  4325 	     case prev_declared_derived_function_name_token:
  4321 	       /* do nothing, already in map. */
  4326 	       /* do nothing, already in map. */
  4322 	       break;
  4327 	       break;
  4334 	}
  4339 	}
  4335 /* | FUNCTION derived_function_name ':' derived_type_name io_OR_function_var_declarations_list function_body END_FUNCTION */
  4340 /* | FUNCTION derived_function_name ':' derived_type_name io_OR_function_var_declarations_list function_body END_FUNCTION */
  4336 | function_name_declaration ':' derived_type_name io_OR_function_var_declarations_list function_body END_FUNCTION
  4341 | function_name_declaration ':' derived_type_name io_OR_function_var_declarations_list function_body END_FUNCTION
  4337 	{$$ = new function_declaration_c($1, $3, $4, $5, locloc(@$));
  4342 	{$$ = new function_declaration_c($1, $3, $4, $5, locloc(@$));
  4338 	 variable_name_symtable.pop();
  4343 	 variable_name_symtable.pop();
       
  4344 	 direct_variable_symtable.pop();
  4339 	 if (allow_function_overloading) {
  4345 	 if (allow_function_overloading) {
  4340 	   switch (library_element_symtable.find_value($1)) {
  4346 	   switch (library_element_symtable.find_value($1)) {
  4341 	     case prev_declared_derived_function_name_token: /* do nothing, already in map. */ break;
  4347 	     case prev_declared_derived_function_name_token: /* do nothing, already in map. */ break;
  4342 	     case BOGUS_TOKEN_ID: library_element_symtable.insert($1, prev_declared_derived_function_name_token); break;
  4348 	     case BOGUS_TOKEN_ID: library_element_symtable.insert($1, prev_declared_derived_function_name_token); break;
  4343 	     default: ERROR;
  4349 	     default: ERROR;
  4549 	  * we have finished parsing the function block,
  4555 	  * we have finished parsing the function block,
  4550 	  * the variable names are now out of scope, so
  4556 	  * the variable names are now out of scope, so
  4551 	  * are no longer valid!
  4557 	  * are no longer valid!
  4552 	  */
  4558 	  */
  4553 	 variable_name_symtable.pop();
  4559 	 variable_name_symtable.pop();
       
  4560 	 direct_variable_symtable.pop();
  4554 	}
  4561 	}
  4555 /* ERROR_CHECK_BEGIN */
  4562 /* ERROR_CHECK_BEGIN */
  4556 | FUNCTION_BLOCK io_OR_other_var_declarations_list function_block_body END_FUNCTION_BLOCK
  4563 | FUNCTION_BLOCK io_OR_other_var_declarations_list function_block_body END_FUNCTION_BLOCK
  4557   {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no function block name defined in function block declaration."); yynerrs++;}
  4564   {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no function block name defined in function block declaration."); yynerrs++;}
  4558 | FUNCTION_BLOCK error io_OR_other_var_declarations_list function_block_body END_FUNCTION_BLOCK
  4565 | FUNCTION_BLOCK error io_OR_other_var_declarations_list function_block_body END_FUNCTION_BLOCK
  4700 	  * we have finished parsing the program declaration,
  4707 	  * we have finished parsing the program declaration,
  4701 	  * the variable names are now out of scope, so
  4708 	  * the variable names are now out of scope, so
  4702 	  * are no longer valid!
  4709 	  * are no longer valid!
  4703 	  */
  4710 	  */
  4704 	 variable_name_symtable.pop();
  4711 	 variable_name_symtable.pop();
       
  4712 	 direct_variable_symtable.pop();
  4705 	}
  4713 	}
  4706 /* ERROR_CHECK_BEGIN */
  4714 /* ERROR_CHECK_BEGIN */
  4707 | PROGRAM program_var_declarations_list function_block_body END_PROGRAM
  4715 | PROGRAM program_var_declarations_list function_block_body END_PROGRAM
  4708   {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no program name defined in program declaration.");}
  4716   {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no program name defined in program declaration.");}
  4709 | PROGRAM error program_var_declarations_list function_block_body END_PROGRAM
  4717 | PROGRAM error program_var_declarations_list function_block_body END_PROGRAM
  5163 
  5171 
  5164 configuration_declaration:
  5172 configuration_declaration:
  5165   CONFIGURATION configuration_name
  5173   CONFIGURATION configuration_name
  5166    optional_global_var_declarations
  5174    optional_global_var_declarations
  5167    single_resource_declaration
  5175    single_resource_declaration
  5168    {variable_name_symtable.pop();}
  5176    {variable_name_symtable.pop();
       
  5177     direct_variable_symtable.pop();}
  5169    optional_access_declarations
  5178    optional_access_declarations
  5170    optional_instance_specific_initializations
  5179    optional_instance_specific_initializations
  5171   END_CONFIGURATION
  5180   END_CONFIGURATION
  5172 	{$$ = new configuration_declaration_c($2, $3, $4, $6, $7, locloc(@$));
  5181 	{$$ = new configuration_declaration_c($2, $3, $4, $6, $7, locloc(@$));
  5173 	 library_element_symtable.insert($2, prev_declared_configuration_name_token);
  5182 	 library_element_symtable.insert($2, prev_declared_configuration_name_token);
  5174 	 variable_name_symtable.pop();
  5183 	 variable_name_symtable.pop();
       
  5184 	 direct_variable_symtable.pop();
  5175 	}
  5185 	}
  5176 | CONFIGURATION configuration_name
  5186 | CONFIGURATION configuration_name
  5177    optional_global_var_declarations
  5187    optional_global_var_declarations
  5178    resource_declaration_list
  5188    resource_declaration_list
  5179    optional_access_declarations
  5189    optional_access_declarations
  5180    optional_instance_specific_initializations
  5190    optional_instance_specific_initializations
  5181  END_CONFIGURATION
  5191  END_CONFIGURATION
  5182 	{$$ = new configuration_declaration_c($2, $3, $4, $5, $6, locloc(@$));
  5192 	{$$ = new configuration_declaration_c($2, $3, $4, $5, $6, locloc(@$));
  5183 	 library_element_symtable.insert($2, prev_declared_configuration_name_token);
  5193 	 library_element_symtable.insert($2, prev_declared_configuration_name_token);
  5184 	 variable_name_symtable.pop();
  5194 	 variable_name_symtable.pop();
       
  5195 	 direct_variable_symtable.pop();
  5185 }
  5196 }
  5186 /* ERROR_CHECK_BEGIN */
  5197 /* ERROR_CHECK_BEGIN */
  5187 | CONFIGURATION 
  5198 | CONFIGURATION 
  5188    optional_global_var_declarations
  5199    optional_global_var_declarations
  5189    single_resource_declaration
  5200    single_resource_declaration
  5190    {variable_name_symtable.pop();}
  5201    {variable_name_symtable.pop();
       
  5202     direct_variable_symtable.pop();}
  5191    optional_access_declarations
  5203    optional_access_declarations
  5192    optional_instance_specific_initializations
  5204    optional_instance_specific_initializations
  5193   END_CONFIGURATION
  5205   END_CONFIGURATION
  5194   {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no configuration name defined in configuration declaration."); yynerrs++;}
  5206   {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no configuration name defined in configuration declaration."); yynerrs++;}
  5195 | CONFIGURATION
  5207 | CONFIGURATION
  5200   END_CONFIGURATION
  5212   END_CONFIGURATION
  5201   {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no configuration name defined in configuration declaration."); yynerrs++;}
  5213   {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no configuration name defined in configuration declaration."); yynerrs++;}
  5202 | CONFIGURATION error
  5214 | CONFIGURATION error
  5203    optional_global_var_declarations
  5215    optional_global_var_declarations
  5204    single_resource_declaration
  5216    single_resource_declaration
  5205    {variable_name_symtable.pop();}
  5217    {variable_name_symtable.pop();
       
  5218     direct_variable_symtable.pop();}
  5206    optional_access_declarations
  5219    optional_access_declarations
  5207    optional_instance_specific_initializations
  5220    optional_instance_specific_initializations
  5208   END_CONFIGURATION
  5221   END_CONFIGURATION
  5209   {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid configuration name defined in configuration declaration."); yyerrok;}
  5222   {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid configuration name defined in configuration declaration."); yyerrok;}
  5210 | CONFIGURATION error
  5223 | CONFIGURATION error
  5228   END_CONFIGURATION
  5241   END_CONFIGURATION
  5229   {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid resource(s) defined in configuration declaration."); yyerrok;}
  5242   {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid resource(s) defined in configuration declaration."); yyerrok;}
  5230 /*| CONFIGURATION configuration_name
  5243 /*| CONFIGURATION configuration_name
  5231    optional_global_var_declarations
  5244    optional_global_var_declarations
  5232    single_resource_declaration
  5245    single_resource_declaration
  5233    {variable_name_symtable.pop();}
  5246    {variable_name_symtable.pop();
       
  5247     direct_variable_symtable.pop();}
  5234    optional_access_declarations
  5248    optional_access_declarations
  5235    optional_instance_specific_initializations
  5249    optional_instance_specific_initializations
  5236   END_OF_INPUT
  5250   END_OF_INPUT
  5237   {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed configuration declaration."); yyerrok;}*/
  5251   {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed configuration declaration."); yyerrok;}*/
  5238 | CONFIGURATION configuration_name
  5252 | CONFIGURATION configuration_name
  5284 /* ERROR_CHECK_END */
  5298 /* ERROR_CHECK_END */
  5285 ;
  5299 ;
  5286 
  5300 
  5287 
  5301 
  5288 resource_declaration:
  5302 resource_declaration:
  5289   RESOURCE {variable_name_symtable.push();} resource_name ON resource_type_name
  5303   RESOURCE {variable_name_symtable.push();direct_variable_symtable.push();} resource_name ON resource_type_name
  5290    optional_global_var_declarations
  5304    optional_global_var_declarations
  5291    single_resource_declaration
  5305    single_resource_declaration
  5292   END_RESOURCE
  5306   END_RESOURCE
  5293 	{$$ = new resource_declaration_c($3, $5, $6, $7, locloc(@$));
  5307 	{$$ = new resource_declaration_c($3, $5, $6, $7, locloc(@$));
  5294 	 variable_name_symtable.pop();
  5308 	 variable_name_symtable.pop();
       
  5309 	 direct_variable_symtable.pop();
  5295 	 variable_name_symtable.insert($3, prev_declared_resource_name_token);
  5310 	 variable_name_symtable.insert($3, prev_declared_resource_name_token);
  5296 	}
  5311 	}
  5297 /* ERROR_CHECK_BEGIN */
  5312 /* ERROR_CHECK_BEGIN */
  5298 | RESOURCE {variable_name_symtable.push();} ON resource_type_name
  5313 | RESOURCE {variable_name_symtable.push();direct_variable_symtable.push();} ON resource_type_name
  5299    optional_global_var_declarations
  5314    optional_global_var_declarations
  5300    single_resource_declaration
  5315    single_resource_declaration
  5301   END_RESOURCE
  5316   END_RESOURCE
  5302   {$$ = NULL; print_err_msg(locl(@1), locf(@3), "no resource name defined in resource declaration."); yynerrs++;}
  5317   {$$ = NULL; print_err_msg(locl(@1), locf(@3), "no resource name defined in resource declaration."); yynerrs++;}
  5303 /*|	RESOURCE {variable_name_symtable.push();} resource_name ON resource_type_name
  5318 /*|	RESOURCE {variable_name_symtable.push();direct_variable_symtable.push();} resource_name ON resource_type_name
  5304    optional_global_var_declarations
  5319    optional_global_var_declarations
  5305    single_resource_declaration
  5320    single_resource_declaration
  5306   END_OF_INPUT
  5321   END_OF_INPUT
  5307 	{$$ = NULL; print_err_msg(locf(@1), locl(@5), "unclosed resource declaration."); yyerrok;}*/
  5322 	{$$ = NULL; print_err_msg(locf(@1), locl(@5), "unclosed resource declaration."); yyerrok;}*/
  5308 | RESOURCE error END_RESOURCE
  5323 | RESOURCE error END_RESOURCE
  5395 | access_name ':' access_path ':' non_generic_type_name direction
  5410 | access_name ':' access_path ':' non_generic_type_name direction
  5396 ;
  5411 ;
  5397 
  5412 
  5398 
  5413 
  5399 access_path:
  5414 access_path:
  5400   direct_variable
  5415   prev_declared_direct_variable
  5401 | prev_declared_resource_name '.' direct_variable
  5416 | prev_declared_resource_name '.' prev_declared_direct_variable
  5402 | any_fb_name_list symbolic_variable
  5417 | any_fb_name_list symbolic_variable
  5403 | prev_declared_resource_name '.' any_fb_name_list symbolic_variable
  5418 | prev_declared_resource_name '.' any_fb_name_list symbolic_variable
  5404 | prev_declared_program_name '.'  any_fb_name_list symbolic_variable
  5419 | prev_declared_program_name '.'  any_fb_name_list symbolic_variable
  5405 | prev_declared_resource_name '.' prev_declared_program_name '.' any_fb_name_list symbolic_variable
  5420 | prev_declared_resource_name '.' prev_declared_program_name '.' any_fb_name_list symbolic_variable
  5406 ;
  5421 ;
  5564 
  5579 
  5565 data_source:
  5580 data_source:
  5566   constant
  5581   constant
  5567 | global_var_reference
  5582 | global_var_reference
  5568 | program_output_reference
  5583 | program_output_reference
  5569 | direct_variable
  5584 | prev_declared_direct_variable
  5570 ;
  5585 ;
  5571 
  5586 
  5572 program_configuration:
  5587 program_configuration:
  5573 //  PROGRAM [RETAIN | NON_RETAIN] program_name [WITH task_name] ':' program_type_name ['(' prog_conf_elements ')'] //
  5588 //  PROGRAM [RETAIN | NON_RETAIN] program_name [WITH task_name] ':' program_type_name ['(' prog_conf_elements ')'] //
  5574   PROGRAM program_name optional_task_name ':' prev_declared_program_type_name optional_prog_conf_elements
  5589   PROGRAM program_name optional_task_name ':' prev_declared_program_type_name optional_prog_conf_elements
  5756 
  5771 
  5757 prog_data_source:
  5772 prog_data_source:
  5758   constant
  5773   constant
  5759 | enumerated_value
  5774 | enumerated_value
  5760 | global_var_reference
  5775 | global_var_reference
  5761 | direct_variable
  5776 | prev_declared_direct_variable
  5762 ;
  5777 ;
  5763 
  5778 
  5764 data_sink:
  5779 data_sink:
  5765   global_var_reference
  5780   global_var_reference
  5766 | direct_variable
  5781 | prev_declared_direct_variable
  5767 ;
  5782 ;
  5768 
  5783 
  5769 instance_specific_initializations:
  5784 instance_specific_initializations:
  5770  VAR_CONFIG instance_specific_init_list END_VAR
  5785  VAR_CONFIG instance_specific_init_list END_VAR
  5771 	{$$ = new instance_specific_initializations_c($2, locloc(@$));}
  5786 	{$$ = new instance_specific_initializations_c($2, locloc(@$));}