stage1_2/iec_bison.yy
changeset 747 d1c1a0254e4f
parent 746 c7219a37cc39
child 748 ad4265253528
equal deleted inserted replaced
746:c7219a37cc39 747:d1c1a0254e4f
    98 /* file with declaration of token constants. Generated by bison! */
    98 /* file with declaration of token constants. Generated by bison! */
    99 #include "iec_bison.h"
    99 #include "iec_bison.h"
   100 
   100 
   101 /* The interface through which bison and flex interact. */
   101 /* The interface through which bison and flex interact. */
   102 #include "stage1_2_priv.hh"
   102 #include "stage1_2_priv.hh"
   103 
   103 #include "derived_conversion_functions.hh"
   104 
   104 
   105 #include "../absyntax_utils/add_en_eno_param_decl.hh"	/* required for  add_en_eno_param_decl_c */
   105 #include "../absyntax_utils/add_en_eno_param_decl.hh"	/* required for  add_en_eno_param_decl_c */
   106 
   106 
   107 /* an ugly hack!!
   107 /* an ugly hack!!
   108  * We will probably not need it when we decide
   108  * We will probably not need it when we decide
   238                    const char *last_filename,
   238                    const char *last_filename,
   239                    long int last_order,
   239                    long int last_order,
   240                    const char *additional_error_msg);
   240                    const char *additional_error_msg);
   241                    
   241                    
   242 /* Create entry in symbol table for function conversion data type*/
   242 /* Create entry in symbol table for function conversion data type*/
   243 void make_derived_conversion_functions(const char * dname);
   243 void add_enumtype_conversion_functions(const char * dname);
   244 %}
   244 %}
   245 
   245 
   246 
   246 
   247 
   247 
   248 
   248 
  2714   identifier ':' enumerated_specification {library_element_symtable.insert($1, prev_declared_enumerated_type_name_token);}
  2714   identifier ':' enumerated_specification {library_element_symtable.insert($1, prev_declared_enumerated_type_name_token);}
  2715 	{
  2715 	{
  2716       $$ = new enumerated_type_declaration_c($1, new enumerated_spec_init_c($3, NULL, locloc(@3)), locloc(@$));
  2716       $$ = new enumerated_type_declaration_c($1, new enumerated_spec_init_c($3, NULL, locloc(@3)), locloc(@$));
  2717       if (conversion_functions_) {
  2717       if (conversion_functions_) {
  2718         const char *name = ((identifier_c *)$1)->value;
  2718         const char *name = ((identifier_c *)$1)->value;
  2719 	    make_derived_conversion_functions(name);
  2719 	    add_enumtype_conversion_functions(name);
  2720 	  }
  2720 	  }
  2721     }
  2721     }
  2722 | identifier ':' enumerated_specification {library_element_symtable.insert($1, prev_declared_enumerated_type_name_token);} ASSIGN enumerated_value
  2722 | identifier ':' enumerated_specification {library_element_symtable.insert($1, prev_declared_enumerated_type_name_token);} ASSIGN enumerated_value
  2723 	{$$ = new enumerated_type_declaration_c($1, new enumerated_spec_init_c($3, $6, locf(@3), locl(@6)), locloc(@$));}
  2723 	{$$ = new enumerated_type_declaration_c($1, new enumerated_spec_init_c($3, $6, locf(@3), locl(@6)), locloc(@$));}
  2724 /* ERROR_CHECK_BEGIN */
  2724 /* ERROR_CHECK_BEGIN */
  8404   fclose(in_file);
  8404   fclose(in_file);
  8405   return 0;
  8405   return 0;
  8406 }
  8406 }
  8407 
  8407 
  8408 
  8408 
  8409 
       
  8410 /* Create entry in symbol table for function conversion data type*/
  8409 /* Create entry in symbol table for function conversion data type*/
  8411 void make_derived_conversion_functions(const char * dname) {
  8410 void add_enumtype_conversion_functions(const char * dname) {
  8412   std::string strname;
  8411   std::string strname;
  8413   std::string tmp;
  8412   std::string tmp;
  8414   
  8413   
  8415   strname = dname;
  8414   strname = dname; 
  8416   tmp = strname + "_TO_STRING";
  8415   for (int i = 0; derived_conversion_functions_c::functionDataType[i] != NULL; i++) {
  8417   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
  8416     tmp = strname + std::string("_TO_") + derived_conversion_functions_c::functionDataType[i];
  8418   tmp = strname + "_TO_SINT";
  8417     library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
  8419   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
  8418     tmp = derived_conversion_functions_c::functionDataType[i] + std::string("_TO_") + strname;
  8420   tmp = strname + "_TO_INT";
  8419     library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
  8421   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
  8420   }  
  8422   tmp = strname + "_TO_DINT";
       
  8423   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8424   tmp = strname + "_TO_LINT";
       
  8425   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8426   tmp = strname + "_TO_USINT";
       
  8427   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8428   tmp = strname + "_TO_UINT";
       
  8429   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8430   tmp = strname + "_TO_UDINT";
       
  8431   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8432   tmp = strname + "_TO_ULINT";
       
  8433   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8434   /* ... */      
       
  8435   tmp = "STRING_TO_" + strname;
       
  8436   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8437   tmp = "SINT_TO_" + strname;
       
  8438   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8439   tmp = "INT_TO_" + strname;
       
  8440   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8441   tmp = "DINT_TO_" + strname;
       
  8442   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8443   tmp = "LINT_TO_" + strname;
       
  8444   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8445   tmp = "USINT_TO_" + strname;
       
  8446   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8447   tmp = "UINT_TO_" + strname;
       
  8448   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8449   tmp = "UDINT_TO_" + strname;
       
  8450   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8451   tmp = "ULINT_TO_" + strname;
       
  8452   library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token);
       
  8453   /* ... */
       
  8454 }
  8421 }
  8455 
  8422 
  8456 
  8423 
  8457 
  8424 
  8458 
  8425