stage1_2/iec_bison.yy
changeset 862 2b6b1202f8a8
parent 823 c95f42f28b69
child 870 9c6c588fd708
child 873 dea39ef02847
equal deleted inserted replaced
861:443e8243f289 862:2b6b1202f8a8
  1044 %type  <leaf>	configuration_declaration
  1044 %type  <leaf>	configuration_declaration
  1045 // helper symbol for
  1045 // helper symbol for
  1046 //  - configuration_declaration
  1046 //  - configuration_declaration
  1047 //  - resource_declaration
  1047 //  - resource_declaration
  1048 //
  1048 //
  1049 %type  <leaf>	optional_global_var_declarations
  1049 %type  <list>	global_var_declarations_list
  1050 // helper symbol for configuration_declaration
  1050 // helper symbol for configuration_declaration
  1051 %type  <leaf>	optional_access_declarations
  1051 %type  <leaf>	optional_access_declarations
  1052 // helper symbol for configuration_declaration
  1052 // helper symbol for configuration_declaration
  1053 %type  <leaf>	optional_instance_specific_initializations
  1053 %type  <leaf>	optional_instance_specific_initializations
  1054 // helper symbol for configuration_declaration
  1054 // helper symbol for configuration_declaration
  5561  */
  5561  */
  5562 resource_type_name: any_identifier;
  5562 resource_type_name: any_identifier;
  5563 
  5563 
  5564 configuration_declaration:
  5564 configuration_declaration:
  5565   CONFIGURATION configuration_name
  5565   CONFIGURATION configuration_name
  5566    optional_global_var_declarations
  5566    global_var_declarations_list
  5567    single_resource_declaration
  5567    single_resource_declaration
  5568    {variable_name_symtable.pop();
  5568    {variable_name_symtable.pop();
  5569     direct_variable_symtable.pop();}
  5569     direct_variable_symtable.pop();}
  5570    optional_access_declarations
  5570    optional_access_declarations
  5571    optional_instance_specific_initializations
  5571    optional_instance_specific_initializations
  5574 	 library_element_symtable.insert($2, prev_declared_configuration_name_token);
  5574 	 library_element_symtable.insert($2, prev_declared_configuration_name_token);
  5575 	 variable_name_symtable.pop();
  5575 	 variable_name_symtable.pop();
  5576 	 direct_variable_symtable.pop();
  5576 	 direct_variable_symtable.pop();
  5577 	}
  5577 	}
  5578 | CONFIGURATION configuration_name
  5578 | CONFIGURATION configuration_name
  5579    optional_global_var_declarations
  5579    global_var_declarations_list
  5580    resource_declaration_list
  5580    resource_declaration_list
  5581    optional_access_declarations
  5581    optional_access_declarations
  5582    optional_instance_specific_initializations
  5582    optional_instance_specific_initializations
  5583  END_CONFIGURATION
  5583  END_CONFIGURATION
  5584 	{$$ = new configuration_declaration_c($2, $3, $4, $5, $6, locloc(@$));
  5584 	{$$ = new configuration_declaration_c($2, $3, $4, $5, $6, locloc(@$));
  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;}