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