stage4/generate_c/generate_c_sfc.cc
changeset 119 4cbf71106b66
parent 111 ee31ee39eaf6
child 120 74640e3c7f53
equal deleted inserted replaced
118:d4cf7ea933a4 119:4cbf71106b66
    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 */