5586 variable_name_symtable.pop(); |
5586 variable_name_symtable.pop(); |
5587 direct_variable_symtable.pop(); |
5587 direct_variable_symtable.pop(); |
5588 } |
5588 } |
5589 /* ERROR_CHECK_BEGIN */ |
5589 /* ERROR_CHECK_BEGIN */ |
5590 | CONFIGURATION |
5590 | CONFIGURATION |
5591 optional_global_var_declarations |
5591 global_var_declarations_list |
5592 single_resource_declaration |
5592 single_resource_declaration |
5593 {variable_name_symtable.pop(); |
5593 {variable_name_symtable.pop(); |
5594 direct_variable_symtable.pop();} |
5594 direct_variable_symtable.pop();} |
5595 optional_access_declarations |
5595 optional_access_declarations |
5596 optional_instance_specific_initializations |
5596 optional_instance_specific_initializations |
5597 END_CONFIGURATION |
5597 END_CONFIGURATION |
5598 {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no configuration name defined in configuration declaration."); yynerrs++;} |
5598 {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no configuration name defined in configuration declaration."); yynerrs++;} |
5599 | CONFIGURATION |
5599 | CONFIGURATION |
5600 optional_global_var_declarations |
5600 global_var_declarations_list |
5601 resource_declaration_list |
5601 resource_declaration_list |
5602 optional_access_declarations |
5602 optional_access_declarations |
5603 optional_instance_specific_initializations |
5603 optional_instance_specific_initializations |
5604 END_CONFIGURATION |
5604 END_CONFIGURATION |
5605 {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no configuration name defined in configuration declaration."); yynerrs++;} |
5605 {$$ = NULL; print_err_msg(locl(@1), locf(@2), "no configuration name defined in configuration declaration."); yynerrs++;} |
5606 | CONFIGURATION error |
5606 | CONFIGURATION error |
5607 optional_global_var_declarations |
5607 global_var_declarations_list |
5608 single_resource_declaration |
5608 single_resource_declaration |
5609 {variable_name_symtable.pop(); |
5609 {variable_name_symtable.pop(); |
5610 direct_variable_symtable.pop();} |
5610 direct_variable_symtable.pop();} |
5611 optional_access_declarations |
5611 optional_access_declarations |
5612 optional_instance_specific_initializations |
5612 optional_instance_specific_initializations |
5613 END_CONFIGURATION |
5613 END_CONFIGURATION |
5614 {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid configuration name defined in configuration declaration."); yyerrok;} |
5614 {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid configuration name defined in configuration declaration."); yyerrok;} |
5615 | CONFIGURATION error |
5615 | CONFIGURATION error |
5616 optional_global_var_declarations |
5616 global_var_declarations_list |
5617 resource_declaration_list |
5617 resource_declaration_list |
5618 optional_access_declarations |
5618 optional_access_declarations |
5619 optional_instance_specific_initializations |
5619 optional_instance_specific_initializations |
5620 END_CONFIGURATION |
5620 END_CONFIGURATION |
5621 {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid configuration name defined in configuration declaration."); yyerrok;} |
5621 {$$ = NULL; print_err_msg(locf(@2), locl(@2), "invalid configuration name defined in configuration declaration."); yyerrok;} |
5622 | CONFIGURATION configuration_name |
5622 | CONFIGURATION configuration_name |
5623 optional_global_var_declarations |
5623 global_var_declarations_list |
5624 optional_access_declarations |
5624 optional_access_declarations |
5625 optional_instance_specific_initializations |
5625 optional_instance_specific_initializations |
5626 END_CONFIGURATION |
5626 END_CONFIGURATION |
5627 {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no resource(s) defined in configuration declaration."); yynerrs++;} |
5627 {$$ = NULL; print_err_msg(locl(@3), locf(@4), "no resource(s) defined in configuration declaration."); yynerrs++;} |
5628 | CONFIGURATION configuration_name |
5628 | CONFIGURATION configuration_name |
5629 optional_global_var_declarations |
5629 global_var_declarations_list |
5630 error |
5630 error |
5631 optional_access_declarations |
5631 optional_access_declarations |
5632 optional_instance_specific_initializations |
5632 optional_instance_specific_initializations |
5633 END_CONFIGURATION |
5633 END_CONFIGURATION |
5634 {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid resource(s) defined in configuration declaration."); yyerrok;} |
5634 {$$ = NULL; print_err_msg(locf(@4), locl(@4), "invalid resource(s) defined in configuration declaration."); yyerrok;} |
5635 /*| CONFIGURATION configuration_name |
5635 /*| CONFIGURATION configuration_name |
5636 optional_global_var_declarations |
5636 global_var_declarations_list |
5637 single_resource_declaration |
5637 single_resource_declaration |
5638 {variable_name_symtable.pop(); |
5638 {variable_name_symtable.pop(); |
5639 direct_variable_symtable.pop();} |
5639 direct_variable_symtable.pop();} |
5640 optional_access_declarations |
5640 optional_access_declarations |
5641 optional_instance_specific_initializations |
5641 optional_instance_specific_initializations |
5642 END_OF_INPUT |
5642 END_OF_INPUT |
5643 {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed configuration declaration."); yyerrok;}*/ |
5643 {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed configuration declaration."); yyerrok;}*/ |
5644 | CONFIGURATION configuration_name |
5644 | CONFIGURATION configuration_name |
5645 optional_global_var_declarations |
5645 global_var_declarations_list |
5646 resource_declaration_list |
5646 resource_declaration_list |
5647 optional_access_declarations |
5647 optional_access_declarations |
5648 optional_instance_specific_initializations |
5648 optional_instance_specific_initializations |
5649 END_OF_INPUT |
5649 END_OF_INPUT |
5650 {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed configuration declaration."); yyerrok;} |
5650 {$$ = NULL; print_err_msg(locf(@1), locl(@2), "unclosed configuration declaration."); yyerrok;} |
5655 |
5655 |
5656 // helper symbol for |
5656 // helper symbol for |
5657 // - configuration_declaration |
5657 // - configuration_declaration |
5658 // - resource_declaration |
5658 // - resource_declaration |
5659 // |
5659 // |
5660 optional_global_var_declarations: |
5660 /* NOTE: The IEC 61131-3 v2 standard defines this list as being: [global_var_declarations] |
|
5661 * e.g.: |
|
5662 * 'CONFIGURATION' configuration_name [global_var_declarations] ... |
|
5663 * |
|
5664 * However, this means that a single VAR_GLOBAL ... END_VAR construct is allowed |
|
5665 * in each CONFIGURATION or RESOURCE declaration. If the user wishes to have global |
|
5666 * variables with distinct properties (e.g. some with RETAIN, others with CONSTANT, |
|
5667 * and yet other variables with none of these qualifiers), the syntax defined in the |
|
5668 * standard does not allow this. |
|
5669 * Amazingly, IEC 61131-3 v3 also does not seem to allow it either!! |
|
5670 * Since this is most likely a bug in the standard, we are changing the syntax slightly |
|
5671 * to become: |
|
5672 * 'CONFIGURATION' configuration_name {global_var_declarations} ... |
|
5673 * |
|
5674 * Remember that: |
|
5675 * {S}, closure, meaning zero or more concatenations of S. |
|
5676 * [S], option, meaning zero or one occurrence of S. |
|
5677 */ |
|
5678 global_var_declarations_list: |
5661 // empty |
5679 // empty |
5662 {$$ = NULL;} |
5680 {$$ = new global_var_declarations_list_c(locloc(@$));} |
5663 | global_var_declarations |
5681 | global_var_declarations_list global_var_declarations |
5664 ; |
5682 {$$ = $1; $$->add_element($2);} |
5665 |
5683 ; |
5666 |
5684 |
5667 // helper symbol for configuration_declaration // |
5685 // helper symbol for configuration_declaration // |
5668 optional_access_declarations: |
5686 optional_access_declarations: |
5669 // empty |
5687 // empty |
5670 {$$ = NULL;} |
5688 {$$ = NULL;} |
5691 ; |
5709 ; |
5692 |
5710 |
5693 |
5711 |
5694 resource_declaration: |
5712 resource_declaration: |
5695 RESOURCE {variable_name_symtable.push();direct_variable_symtable.push();} resource_name {variable_name_symtable.insert($3, prev_declared_resource_name_token);} ON resource_type_name |
5713 RESOURCE {variable_name_symtable.push();direct_variable_symtable.push();} resource_name {variable_name_symtable.insert($3, prev_declared_resource_name_token);} ON resource_type_name |
5696 optional_global_var_declarations |
5714 global_var_declarations_list |
5697 single_resource_declaration |
5715 single_resource_declaration |
5698 END_RESOURCE |
5716 END_RESOURCE |
5699 {$$ = new resource_declaration_c($3, $6, $7, $8, locloc(@$)); |
5717 {$$ = new resource_declaration_c($3, $6, $7, $8, locloc(@$)); |
5700 variable_name_symtable.pop(); |
5718 variable_name_symtable.pop(); |
5701 direct_variable_symtable.pop(); |
5719 direct_variable_symtable.pop(); |
5702 variable_name_symtable.insert($3, prev_declared_resource_name_token); |
5720 variable_name_symtable.insert($3, prev_declared_resource_name_token); |
5703 } |
5721 } |
5704 /* ERROR_CHECK_BEGIN */ |
5722 /* ERROR_CHECK_BEGIN */ |
5705 | RESOURCE {variable_name_symtable.push();direct_variable_symtable.push();} ON resource_type_name |
5723 | RESOURCE {variable_name_symtable.push();direct_variable_symtable.push();} ON resource_type_name |
5706 optional_global_var_declarations |
5724 global_var_declarations_list |
5707 single_resource_declaration |
5725 single_resource_declaration |
5708 END_RESOURCE |
5726 END_RESOURCE |
5709 {$$ = NULL; print_err_msg(locl(@1), locf(@3), "no resource name defined in resource declaration."); yynerrs++;} |
5727 {$$ = NULL; print_err_msg(locl(@1), locf(@3), "no resource name defined in resource declaration."); yynerrs++;} |
5710 /*| RESOURCE {variable_name_symtable.push();direct_variable_symtable.push();} resource_name ON resource_type_name |
5728 /*| RESOURCE {variable_name_symtable.push();direct_variable_symtable.push();} resource_name ON resource_type_name |
5711 optional_global_var_declarations |
5729 global_var_declarations_list |
5712 single_resource_declaration |
5730 single_resource_declaration |
5713 END_OF_INPUT |
5731 END_OF_INPUT |
5714 {$$ = NULL; print_err_msg(locf(@1), locl(@5), "unclosed resource declaration."); yyerrok;}*/ |
5732 {$$ = NULL; print_err_msg(locf(@1), locl(@5), "unclosed resource declaration."); yyerrok;}*/ |
5715 | RESOURCE error END_RESOURCE |
5733 | RESOURCE error END_RESOURCE |
5716 {$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in resource declaration."); yyerrok;} |
5734 {$$ = NULL; print_err_msg(locf(@2), locl(@2), "unknown error in resource declaration."); yyerrok;} |