stage4/generate_c/generate_c_sfc.cc
changeset 87 b97f9ad7b2c6
parent 70 e1f0ebd2d9ec
child 111 ee31ee39eaf6
equal deleted inserted replaced
86:1988bf1634da 87:b97f9ad7b2c6
    94 
    94 
    95     void reset_transition_number(void) {transition_number = 0;}
    95     void reset_transition_number(void) {transition_number = 0;}
    96 
    96 
    97     void generate(symbol_c *symbol, sfcgeneration_t generation_type) {
    97     void generate(symbol_c *symbol, sfcgeneration_t generation_type) {
    98       wanted_sfcgeneration = generation_type;
    98       wanted_sfcgeneration = generation_type;
       
    99       transition_number = 0;
    99       switch (wanted_sfcgeneration) {
   100       switch (wanted_sfcgeneration) {
   100         case transitiontest_sg:
   101         case transitiontest_sg:
   101           {
   102           {
   102             std::list<TRANSITION>::iterator pt;
   103             std::list<TRANSITION>::iterator pt;
   103             for(pt = transition_list.begin(); pt != transition_list.end(); pt++) {
   104             for(pt = transition_list.begin(); pt != transition_list.end(); pt++) {
   257           symbol->from_steps->accept(*this);
   258           symbol->from_steps->accept(*this);
   258           s4o.print(") {\n");
   259           s4o.print(") {\n");
   259           s4o.indent_right();
   260           s4o.indent_right();
   260           
   261           
   261           // Calculate transition value
   262           // Calculate transition value
   262           if (symbol->transition_condition_il != NULL) {
   263           symbol->transition_condition->accept(*this);
   263             generate_c_il->declare_backup_variable();
   264           
   264             s4o.print(s4o.indent_spaces);
       
   265             symbol->transition_condition_il->accept(*generate_c_il);
       
   266             print_variable_prefix();
       
   267             s4o.print("transition_list[");
       
   268             print_transition_number();
       
   269             s4o.print("] = ");
       
   270             generate_c_il->print_backup_variable();
       
   271             s4o.print(";\n");
       
   272           }
       
   273           if (symbol->transition_condition_st != NULL) {
       
   274             s4o.print(s4o.indent_spaces);
       
   275             print_variable_prefix();
       
   276             s4o.print("transition_list[");
       
   277             print_transition_number();
       
   278             s4o.print("] = ");
       
   279             symbol->transition_condition_st->accept(*generate_c_st);
       
   280             s4o.print(";\n");
       
   281           }
       
   282           if (symbol->integer != NULL) {
   265           if (symbol->integer != NULL) {
   283             s4o.print(s4o.indent_spaces + "if (");
   266             s4o.print(s4o.indent_spaces + "if (");
   284             print_variable_prefix();
   267             print_variable_prefix();
   285             s4o.print("transition_list[");
   268             s4o.print("transition_list[");
   286             print_transition_number();
   269             print_transition_number();
   326             symbol->from_steps->accept(*this);
   309             symbol->from_steps->accept(*this);
   327             s4o.indent_left();
   310             s4o.indent_left();
   328             s4o.print(s4o.indent_spaces + "}\n");
   311             s4o.print(s4o.indent_spaces + "}\n");
   329           }
   312           }
   330           transition_number++;
   313           transition_number++;
       
   314           break;
       
   315         default:
       
   316           break;
       
   317       }
       
   318       return NULL;
       
   319     }
       
   320     
       
   321     void *visit(transition_condition_c *symbol) {
       
   322       switch (wanted_sfcgeneration) {
       
   323         case transitiontest_sg:
       
   324           // Transition condition is in IL
       
   325           if (symbol->transition_condition_il != NULL) {
       
   326             generate_c_il->declare_backup_variable();
       
   327             s4o.print(s4o.indent_spaces);
       
   328             symbol->transition_condition_il->accept(*generate_c_il);
       
   329             print_variable_prefix();
       
   330             s4o.print("transition_list[");
       
   331             print_transition_number();
       
   332             s4o.print("] = ");
       
   333             generate_c_il->print_backup_variable();
       
   334             s4o.print(";\n");
       
   335           }
       
   336           // Transition condition is in ST
       
   337           if (symbol->transition_condition_st != NULL) {
       
   338             s4o.print(s4o.indent_spaces);
       
   339             print_variable_prefix();
       
   340             s4o.print("transition_list[");
       
   341             print_transition_number();
       
   342             s4o.print("] = ");
       
   343             symbol->transition_condition_st->accept(*generate_c_st);
       
   344             s4o.print(";\n");
       
   345           }
   331           break;
   346           break;
   332         default:
   347         default:
   333           break;
   348           break;
   334       }
   349       }
   335       return NULL;
   350       return NULL;