92 |
92 |
93 void reset_transition_number(void) {transition_number = 0;} |
93 void reset_transition_number(void) {transition_number = 0;} |
94 |
94 |
95 void generate(symbol_c *symbol, sfcgeneration_t generation_type) { |
95 void generate(symbol_c *symbol, sfcgeneration_t generation_type) { |
96 wanted_sfcgeneration = generation_type; |
96 wanted_sfcgeneration = generation_type; |
97 transition_number = 0; |
|
98 switch (wanted_sfcgeneration) { |
97 switch (wanted_sfcgeneration) { |
99 case transitiontest_sg: |
98 case transitiontest_sg: |
100 { |
99 { |
101 std::list<TRANSITION>::iterator pt; |
100 std::list<TRANSITION>::iterator pt; |
102 for(pt = transition_list.begin(); pt != transition_list.end(); pt++) { |
101 for(pt = transition_list.begin(); pt != transition_list.end(); pt++) { |
571 } |
570 } |
572 |
571 |
573 /*********************************************/ |
572 /*********************************************/ |
574 /* B.1.6 Sequential function chart elements */ |
573 /* B.1.6 Sequential function chart elements */ |
575 /*********************************************/ |
574 /*********************************************/ |
576 |
575 |
577 void *visit(sfc_network_c *symbol) { |
576 void *visit(sequential_function_chart_c *symbol) { |
578 generate_c_sfc_elements->generate((symbol_c *) symbol, generate_c_sfc_elements_c::transitionlist_sg); |
577 int i; |
579 s4o.print(s4o.indent_spaces +"INT i;\n\n"); |
578 |
|
579 generate_c_sfc_elements->reset_transition_number(); |
|
580 for(i = 0; i < symbol->n; i++) { |
|
581 generate_c_sfc_elements->generate(symbol->elements[i], generate_c_sfc_elements_c::transitionlist_sg); |
|
582 } |
|
583 |
|
584 s4o.print(s4o.indent_spaces +"INT i;\n"); |
580 s4o.print(s4o.indent_spaces +"BOOL transition;\n\n"); |
585 s4o.print(s4o.indent_spaces +"BOOL transition;\n\n"); |
581 |
586 |
582 /* generate step initilizations */ |
587 /* generate step initialisations */ |
583 s4o.print(s4o.indent_spaces + "// Steps initialisation\n"); |
588 s4o.print(s4o.indent_spaces + "// Steps initialisation\n"); |
584 s4o.print(s4o.indent_spaces + "for (i = 0; i < "); |
589 s4o.print(s4o.indent_spaces + "for (i = 0; i < "); |
585 print_variable_prefix(); |
590 print_variable_prefix(); |
586 s4o.print("nb_steps; i++) {\n"); |
591 s4o.print("nb_steps; i++) {\n"); |
587 s4o.indent_right(); |
592 s4o.indent_right(); |
678 s4o.indent_left(); |
683 s4o.indent_left(); |
679 s4o.print(s4o.indent_spaces + "}\n\n"); |
684 s4o.print(s4o.indent_spaces + "}\n\n"); |
680 |
685 |
681 /* generate transition tests */ |
686 /* generate transition tests */ |
682 s4o.print(s4o.indent_spaces + "// Transitions fire test\n"); |
687 s4o.print(s4o.indent_spaces + "// Transitions fire test\n"); |
683 generate_c_sfc_elements->generate((symbol_c *) symbol, generate_c_sfc_elements_c::transitiontest_sg); |
688 generate_c_sfc_elements->generate((symbol_c *)symbol, generate_c_sfc_elements_c::transitiontest_sg); |
684 s4o.print("\n"); |
689 s4o.print("\n"); |
685 |
690 |
686 /* generate transition reset steps */ |
691 /* generate transition reset steps */ |
687 s4o.print(s4o.indent_spaces + "// Transitions reset steps\n"); |
692 s4o.print(s4o.indent_spaces + "// Transitions reset steps\n"); |
688 generate_c_sfc_elements->reset_transition_number(); |
693 generate_c_sfc_elements->reset_transition_number(); |
689 generate_c_sfc_elements->generate((symbol_c *) symbol, generate_c_sfc_elements_c::stepreset_sg); |
694 for(i = 0; i < symbol->n; i++) { |
|
695 generate_c_sfc_elements->generate(symbol->elements[i], generate_c_sfc_elements_c::stepreset_sg); |
|
696 } |
690 s4o.print("\n"); |
697 s4o.print("\n"); |
691 |
698 |
692 /* generate transition set steps */ |
699 /* generate transition set steps */ |
693 s4o.print(s4o.indent_spaces + "// Transitions set steps\n"); |
700 s4o.print(s4o.indent_spaces + "// Transitions set steps\n"); |
694 generate_c_sfc_elements->reset_transition_number(); |
701 generate_c_sfc_elements->reset_transition_number(); |
695 generate_c_sfc_elements->generate((symbol_c *) symbol, generate_c_sfc_elements_c::stepset_sg); |
702 for(i = 0; i < symbol->n; i++) { |
|
703 generate_c_sfc_elements->generate(symbol->elements[i], generate_c_sfc_elements_c::stepset_sg); |
|
704 } |
696 s4o.print("\n"); |
705 s4o.print("\n"); |
697 |
706 |
698 /* generate step association */ |
707 /* generate step association */ |
699 s4o.print(s4o.indent_spaces + "// Steps association\n"); |
708 s4o.print(s4o.indent_spaces + "// Steps association\n"); |
700 generate_c_sfc_elements->generate((symbol_c *) symbol, generate_c_sfc_elements_c::actionassociation_sg); |
709 for(i = 0; i < symbol->n; i++) { |
|
710 generate_c_sfc_elements->generate(symbol->elements[i], generate_c_sfc_elements_c::actionassociation_sg); |
|
711 } |
701 s4o.print("\n"); |
712 s4o.print("\n"); |
702 |
713 |
703 /* generate action state evaluation */ |
714 /* generate action state evaluation */ |
704 s4o.print(s4o.indent_spaces + "// Actions state evaluation\n"); |
715 s4o.print(s4o.indent_spaces + "// Actions state evaluation\n"); |
705 s4o.print(s4o.indent_spaces + "for (i = 0; i < "); |
716 s4o.print(s4o.indent_spaces + "for (i = 0; i < "); |
734 s4o.indent_left(); |
745 s4o.indent_left(); |
735 s4o.print(s4o.indent_spaces + "}\n\n"); |
746 s4o.print(s4o.indent_spaces + "}\n\n"); |
736 |
747 |
737 /* generate action execution */ |
748 /* generate action execution */ |
738 s4o.print(s4o.indent_spaces + "// Actions execution\n"); |
749 s4o.print(s4o.indent_spaces + "// Actions execution\n"); |
739 generate_c_sfc_elements->generate((symbol_c *) symbol, generate_c_sfc_elements_c::actionbody_sg); |
750 for(i = 0; i < symbol->n; i++) { |
|
751 generate_c_sfc_elements->generate(symbol->elements[i], generate_c_sfc_elements_c::actionbody_sg); |
|
752 } |
740 s4o.print("\n"); |
753 s4o.print("\n"); |
741 |
754 |
742 return NULL; |
755 return NULL; |
743 } |
756 } |
744 |
757 |
745 void generate(sequential_function_chart_c *sfc) { |
758 void generate(sequential_function_chart_c *sfc) { |
746 sfc->accept(*this); |
759 sfc->accept(*this); |
747 } |
760 } |
748 |
761 |
749 }; /* generate_c_sfc_c */ |
762 }; /* generate_c_sfc_c */ |