187 #include "search_varfb_instance_type.cc" |
187 #include "search_varfb_instance_type.cc" |
188 #include "search_constant_type.cc" |
188 #include "search_constant_type.cc" |
189 #include "search_expression_type.cc" |
189 #include "search_expression_type.cc" |
190 |
190 |
191 #include "generate_cc_base.cc" |
191 #include "generate_cc_base.cc" |
|
192 #include "generate_cc_typedecl.cc" |
192 #include "generate_cc_sfcdecl.cc" |
193 #include "generate_cc_sfcdecl.cc" |
193 #include "generate_cc_typedecl.cc" |
|
194 #include "generate_cc_vardecl.cc" |
194 #include "generate_cc_vardecl.cc" |
195 #include "generate_cc_configbody.cc" |
195 #include "generate_cc_configbody.cc" |
196 #include "generate_location_list.cc" |
196 #include "generate_location_list.cc" |
197 |
197 |
198 /***********************************************************************/ |
198 /***********************************************************************/ |
749 public: |
749 public: |
750 /* PROGRAM program_type_name program_var_declarations_list function_block_body END_PROGRAM */ |
750 /* PROGRAM program_type_name program_var_declarations_list function_block_body END_PROGRAM */ |
751 //SYM_REF4(program_declaration_c, program_type_name, var_declarations, function_block_body, unused) |
751 //SYM_REF4(program_declaration_c, program_type_name, var_declarations, function_block_body, unused) |
752 void *visit(program_declaration_c *symbol) { |
752 void *visit(program_declaration_c *symbol) { |
753 generate_cc_vardecl_c *vardecl; |
753 generate_cc_vardecl_c *vardecl; |
|
754 generate_cc_sfcdecl_c *sfcdecl; |
754 TRACE("program_declaration_c"); |
755 TRACE("program_declaration_c"); |
755 |
756 |
756 /* start off by adding this declaration to the global |
757 /* start off by adding this declaration to the global |
757 * program declaration symbol table... |
758 * program declaration symbol table... |
758 */ |
759 */ |
785 generate_cc_vardecl_c::located_vt | |
786 generate_cc_vardecl_c::located_vt | |
786 generate_cc_vardecl_c::external_vt); |
787 generate_cc_vardecl_c::external_vt); |
787 vardecl->print(symbol->var_declarations); |
788 vardecl->print(symbol->var_declarations); |
788 delete vardecl; |
789 delete vardecl; |
789 /* (A.4) Generate private internal variables for SFC */ |
790 /* (A.4) Generate private internal variables for SFC */ |
790 generate_cc_sfctables_c generate_cc_sfctables(&s4o); |
791 sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::sfcdecl_sg); |
791 symbol->function_block_body->accept(generate_cc_sfctables); |
792 sfcdecl->print(symbol->function_block_body); |
792 s4o.print("\n"); |
793 delete sfcdecl; |
793 |
794 |
794 /* (A.5) Program data structure type name. */ |
795 /* (A.5) Program data structure type name. */ |
795 s4o.indent_left(); |
796 s4o.indent_left(); |
796 s4o.print("} "); |
797 s4o.print("} "); |
797 symbol->program_type_name->accept(*this); |
798 symbol->program_type_name->accept(*this); |
798 s4o.print(";\n\n"); |
799 s4o.print(";\n\n"); |
821 generate_cc_vardecl_c::private_vt | |
822 generate_cc_vardecl_c::private_vt | |
822 generate_cc_vardecl_c::located_vt | |
823 generate_cc_vardecl_c::located_vt | |
823 generate_cc_vardecl_c::external_vt); |
824 generate_cc_vardecl_c::external_vt); |
824 vardecl->print(symbol->var_declarations, NULL, FB_FUNCTION_PARAM"->"); |
825 vardecl->print(symbol->var_declarations, NULL, FB_FUNCTION_PARAM"->"); |
825 delete vardecl; |
826 delete vardecl; |
|
827 s4o.print("\n"); |
|
828 /* (B.3) Generate private internal variables for SFC */ |
|
829 sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::sfcinit_sg); |
|
830 sfcdecl->print(symbol->function_block_body,FB_FUNCTION_PARAM"->"); |
|
831 delete sfcdecl; |
|
832 |
826 s4o.indent_left(); |
833 s4o.indent_left(); |
827 s4o.print("\n" + s4o.indent_spaces + "}\n\n"); |
834 s4o.print(s4o.indent_spaces + "}\n\n"); |
828 |
835 |
829 /* (C) Function with PROGRAM body */ |
836 /* (C) Function with PROGRAM body */ |
830 /* (C.1) Step and Action definitions */ |
837 /* (C.1) Step definitions */ |
831 generate_cc_sfcdecl_c generate_cc_sfcdecl(&s4o); |
838 sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::stepdef_sg); |
832 symbol->function_block_body->accept(generate_cc_sfcdecl); |
839 sfcdecl->print(symbol->function_block_body); |
833 |
840 delete sfcdecl; |
834 /* (C.2) Function declaration */ |
841 |
|
842 /* (C.2) Action definitions */ |
|
843 sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::actiondef_sg); |
|
844 sfcdecl->print(symbol->function_block_body); |
|
845 delete sfcdecl; |
|
846 |
|
847 /* (C.3) Function declaration */ |
835 s4o.print("// Code part\n"); |
848 s4o.print("// Code part\n"); |
836 /* function interface */ |
849 /* function interface */ |
837 s4o.print("void "); |
850 s4o.print("void "); |
838 symbol->program_type_name->accept(*this); |
851 symbol->program_type_name->accept(*this); |
839 s4o.print(FB_FUNCTION_SUFFIX); |
852 s4o.print(FB_FUNCTION_SUFFIX); |
843 s4o.print(" *"); |
856 s4o.print(" *"); |
844 s4o.print(FB_FUNCTION_PARAM); |
857 s4o.print(FB_FUNCTION_PARAM); |
845 s4o.print(") {\n"); |
858 s4o.print(") {\n"); |
846 s4o.indent_right(); |
859 s4o.indent_right(); |
847 |
860 |
848 /* (C.3) Initialize TEMP variables */ |
861 /* (C.4) Initialize TEMP variables */ |
849 /* function body */ |
862 /* function body */ |
850 s4o.print(s4o.indent_spaces + "// Initialise TEMP variables\n"); |
863 s4o.print(s4o.indent_spaces + "// Initialise TEMP variables\n"); |
851 vardecl = new generate_cc_vardecl_c(&s4o, |
864 vardecl = new generate_cc_vardecl_c(&s4o, |
852 generate_cc_vardecl_c::init_vf, |
865 generate_cc_vardecl_c::init_vf, |
853 generate_cc_vardecl_c::temp_vt); |
866 generate_cc_vardecl_c::temp_vt); |
854 vardecl->print(symbol->var_declarations, NULL, FB_FUNCTION_PARAM"->"); |
867 vardecl->print(symbol->var_declarations, NULL, FB_FUNCTION_PARAM"->"); |
855 delete vardecl; |
868 delete vardecl; |
856 s4o.print("\n"); |
869 s4o.print("\n"); |
857 |
870 |
858 /* (C.4) Function code */ |
871 /* (C.5) Function code */ |
859 generate_cc_SFC_IL_ST_c generate_cc_code(&s4o, symbol, FB_FUNCTION_PARAM"->"); |
872 generate_cc_SFC_IL_ST_c generate_cc_code(&s4o, symbol, FB_FUNCTION_PARAM"->"); |
860 symbol->function_block_body->accept(generate_cc_code); |
873 symbol->function_block_body->accept(generate_cc_code); |
861 s4o.indent_left(); |
874 s4o.indent_left(); |
862 s4o.print(s4o.indent_spaces + "} // "); |
875 s4o.print(s4o.indent_spaces + "} // "); |
863 symbol->program_type_name->accept(*this); |
876 symbol->program_type_name->accept(*this); |
864 s4o.print(FB_FUNCTION_SUFFIX); |
877 s4o.print(FB_FUNCTION_SUFFIX); |
865 s4o.print(s4o.indent_spaces + "() \n\n"); |
878 s4o.print(s4o.indent_spaces + "() \n\n"); |
866 |
879 |
867 /* (C.5) Step and Action undefinitions */ |
880 /* (C.6) Step undefinitions */ |
868 generate_cc_sfcundecl_c generate_cc_sfcundecl(&s4o); |
881 sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::stepundef_sg); |
869 symbol->function_block_body->accept(generate_cc_sfcundecl); |
882 sfcdecl->print(symbol->function_block_body); |
870 |
883 delete sfcdecl; |
|
884 |
|
885 /* (C.7) Action undefinitions */ |
|
886 sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::actionundef_sg); |
|
887 sfcdecl->print(symbol->function_block_body); |
|
888 delete sfcdecl; |
|
889 |
871 s4o.indent_left(); |
890 s4o.indent_left(); |
872 s4o.print("\n\n\n\n"); |
891 s4o.print("\n\n\n\n"); |
873 |
892 |
874 return NULL; |
893 return NULL; |
875 } |
894 } |