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