681 program_type_symtable.insert(symbol->program_type_name, symbol); |
681 program_type_symtable.insert(symbol->program_type_name, symbol); |
682 |
682 |
683 /* (A) Class (Function Block) declaration... */ |
683 /* (A) Class (Function Block) declaration... */ |
684 /* (A.1) Class (Function Block) name */ |
684 /* (A.1) Class (Function Block) name */ |
685 s4o.print("// PROGRAM\n"); |
685 s4o.print("// PROGRAM\n"); |
686 s4o.print(s4o.indent_spaces + "class "); |
686 s4o.print(s4o.indent_spaces); |
687 symbol->program_type_name->accept(*this); |
687 symbol->program_type_name->accept(*this); |
688 s4o.print(" {\n"); |
688 s4o.print("\n //Data part\n"); |
|
689 s4o.print("typedef struct {\n"); |
689 s4o.indent_right(); |
690 s4o.indent_right(); |
690 |
691 |
691 /* (A.2) Public variables: i.e. the program parameters... */ |
692 /* (A.2) Public variables: i.e. the program parameters... */ |
692 s4o.print(s4o.indent_spaces + "public:\n"); |
693 s4o.print(s4o.indent_spaces + "//PROGRAM interface IN OUT IN_OUT variables\n"); |
693 s4o.indent_right(); |
694 s4o.indent_right(); |
694 vardecl = new generate_cc_vardecl_c(&s4o, |
695 vardecl = new generate_cc_vardecl_c(&s4o, |
695 generate_cc_vardecl_c::local_vf, |
696 generate_cc_vardecl_c::local_vf, |
696 generate_cc_vardecl_c::input_vt | |
697 generate_cc_vardecl_c::input_vt | |
697 generate_cc_vardecl_c::output_vt | |
698 generate_cc_vardecl_c::output_vt | |
700 delete vardecl; |
701 delete vardecl; |
701 s4o.indent_left(); |
702 s4o.indent_left(); |
702 s4o.print("\n"); |
703 s4o.print("\n"); |
703 |
704 |
704 /* (A.3) Private internal variables */ |
705 /* (A.3) Private internal variables */ |
705 s4o.print(s4o.indent_spaces + "private:\n"); |
706 s4o.print(s4o.indent_spaces + "// PROGRAM private variables - TEMP, private and located variables\n"); |
706 s4o.indent_right(); |
707 s4o.indent_right(); |
707 vardecl = new generate_cc_vardecl_c(&s4o, |
708 vardecl = new generate_cc_vardecl_c(&s4o, |
708 generate_cc_vardecl_c::local_vf, |
709 generate_cc_vardecl_c::local_vf, |
709 generate_cc_vardecl_c::private_vt | |
710 generate_cc_vardecl_c::private_vt | |
710 generate_cc_vardecl_c::located_vt | |
711 generate_cc_vardecl_c::located_vt | |
711 generate_cc_vardecl_c::external_vt); |
712 generate_cc_vardecl_c::external_vt); |
712 vardecl->print(symbol->var_declarations); |
713 vardecl->print(symbol->var_declarations); |
713 delete vardecl; |
714 delete vardecl; |
714 s4o.indent_left(); |
715 s4o.print("\n "); |
715 s4o.print("\n"); |
716 s4o.indent_left(); |
716 |
717 s4o.print("} "); |
|
718 symbol->program_type_name->accept(*this); |
|
719 s4o.print(";\n\n "); |
717 /* (B) Constructor */ |
720 /* (B) Constructor */ |
718 /* (B.1) Constructor name... */ |
721 /* (B.1) Constructor name... */ |
719 s4o.print(s4o.indent_spaces + "public:\n"); |
722 s4o.print("// Code part"); |
|
723 /*PROGRAM Interface*/ |
720 s4o.indent_right(); |
724 s4o.indent_right(); |
721 s4o.print(s4o.indent_spaces); |
725 s4o.print(s4o.indent_spaces); |
|
726 s4o.print("void "); |
722 symbol->program_type_name->accept(*this); |
727 symbol->program_type_name->accept(*this); |
723 |
728 s4o.print(FB_FUNCTION_SUFFIX); |
724 /* (B.2) Constructor parameters (i.e. the external variables)... */ |
729 /* (B.2) Constructor parameters (i.e. the external variables)... */ |
725 s4o.print("("); |
730 s4o.print("("); |
726 s4o.indent_right(); |
731 symbol->program_type_name->accept(*this); |
|
732 s4o.indent_right(); |
|
733 s4o.print(" "); |
727 vardecl = new generate_cc_vardecl_c(&s4o, |
734 vardecl = new generate_cc_vardecl_c(&s4o, |
728 generate_cc_vardecl_c::finterface_vf, |
735 generate_cc_vardecl_c::finterface_vf, |
729 generate_cc_vardecl_c::external_vt); |
736 generate_cc_vardecl_c::external_vt); |
730 vardecl->print(symbol->var_declarations); |
737 vardecl->print(symbol->var_declarations); |
731 delete vardecl; |
738 delete vardecl; |
732 s4o.print(")\n"); |
739 s4o.print(")"); |
|
740 s4o.print("{\n"); |
733 s4o.indent_left(); |
741 s4o.indent_left(); |
734 |
742 |
735 /* (B.2) Member initializations... */ |
743 /* (B.2) Member initializations... */ |
736 s4o.indent_right(); |
744 s4o.indent_right(); |
737 s4o.print(s4o.indent_spaces); |
745 s4o.print(s4o.indent_spaces + "//Initialise PROGRAM variables\n"); |
738 vardecl = new generate_cc_vardecl_c(&s4o, |
746 vardecl = new generate_cc_vardecl_c(&s4o,s4o.print("void "); |
739 generate_cc_vardecl_c::constructorinit_vf, |
747 generate_cc_vardecl_c::constructorinit_vf, |
740 generate_cc_vardecl_c::input_vt | |
748 generate_cc_vardecl_c::input_vt | |
741 generate_cc_vardecl_c::output_vt | |
749 generate_cc_vardecl_c::output_vt | |
742 generate_cc_vardecl_c::inoutput_vt | |
750 generate_cc_vardecl_c::inoutput_vt | |
743 generate_cc_vardecl_c::private_vt | |
751 generate_cc_vardecl_c::private_vt | |
744 generate_cc_vardecl_c::external_vt); |
752 generate_cc_vardecl_c::external_vt); |
745 vardecl->print(symbol->var_declarations); |
753 vardecl->print(symbol->var_declarations, NULL, FB_FUNCTION_PARAM"->"); |
746 delete vardecl; |
754 delete vardecl; |
747 s4o.print("\n" + s4o.indent_spaces + "{}\n\n"); |
755 s4o.print("\n" + s4o.indent_spaces); |
748 s4o.indent_left(); |
756 s4o.indent_left(); |
749 s4o.indent_left(); |
757 s4o.indent_left(); |
750 |
758 |
751 /* (C) Public Function*/ |
759 /* (C) Public Function*/ |
752 /* (C.1) Public Function declaration */ |
760 /* (C.1) Public Function declaration */ |
753 s4o.print(s4o.indent_spaces + "public:\n"); |
761 s4o.print(s4o.indent_spaces); |
754 s4o.indent_right(); |
762 //s4o.indent_right(); |
755 s4o.print(s4o.indent_spaces + "void f(void) {\n"); |
763 //s4o.print(s4o.indent_spaces + "void f(void) {\n"); |
756 |
764 |
757 /* (C.2) Temporary variables */ |
765 /* (C.2) Temporary variables */ |
758 s4o.indent_right(); |
766 //s4o.indent_right(); |
759 vardecl = new generate_cc_vardecl_c(&s4o, generate_cc_vardecl_c::localinit_vf, generate_cc_vardecl_c::temp_vt); |
767 //vardecl = new generate_cc_vardecl_c(&s4o, generate_cc_vardecl_c::localinit_vf, generate_cc_vardecl_c::temp_vt); |
760 vardecl->print(symbol->var_declarations); |
768 //vardecl->print(symbol->var_declarations); |
761 delete vardecl; |
769 //delete vardecl; |
762 s4o.indent_left(); |
770 //s4o.indent_left(); |
763 s4o.print("\n"); |
771 s4o.print("\n"); |
764 |
772 |
765 /* (C.3) Public Function body */ |
773 /* (C.3) Public Function body */ |
766 s4o.indent_right(); |
774 s4o.indent_right(); |
767 generate_cc_IL_and_ST_c generate_cc_code(&s4o, symbol); |
775 generate_cc_IL_and_ST_c generate_cc_code(&s4o, symbol, FB_FUNCTION_PARAM"->"); |
768 symbol->function_block_body->accept(generate_cc_code); |
776 symbol->function_block_body->accept(generate_cc_code); |
769 s4o.indent_left(); |
777 s4o.indent_left(); |
770 s4o.print(s4o.indent_spaces + "} /* f() */\n\n"); |
778 s4o.print(s4o.indent_spaces + "} //"); |
|
779 symbol->program_type_name->accept(*this); |
|
780 s4o.print(FB_FUNCTION_SUFFIX); |
|
781 s4o.print("()\n"); |
771 s4o.indent_left(); |
782 s4o.indent_left(); |
772 |
783 |
773 /* (D) Close the class declaration... */ |
784 /* (D) Close the class declaration... */ |
774 s4o.indent_left(); |
785 s4o.indent_left(); |
775 s4o.print(s4o.indent_spaces + "}; /* class "); |
786 s4o.print(s4o.indent_spaces + "}; /* void "); |
776 symbol->program_type_name->accept(*this); |
787 symbol->program_type_name->accept(*this); |
777 s4o.print(" */\n\n\n"); |
788 s4o.print(" */\n\n\n"); |
778 |
789 |
779 /* (E) Initialise the static member variables... */ |
790 /* (E) Initialise the static member variables... */ |
780 vardecl = new generate_cc_vardecl_c(&s4o, |
791 vardecl = new generate_cc_vardecl_c(&s4o, |