stage4/generate_cc/generate_cc_sfcdecl.cc
author lbessard
Fri, 23 Feb 2007 19:19:23 +0100
changeset 17 38754701ac41
child 18 e6af5eb5f546
permissions -rw-r--r--
SFC state machine first approach generator implemented
17
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
     1
/*
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
     2
 * (c) 2007 Mario de Sousa, Laurent Bessard
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
     3
 *
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
     4
 * Offered to the public under the terms of the GNU General Public License
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
     5
 * as published by the Free Software Foundation; either version 2 of the
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
     6
 * License, or (at your option) any later version.
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
     7
 *
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
     8
 * This program is distributed in the hope that it will be useful, but
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
     9
 * WITHOUT ANY WARRANTY; without even the implied warranty of
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    11
 * Public License for more details.
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    12
 *
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    13
 * This code is made available on the understanding that it will not be
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    14
 * used in safety-critical situations without a full and competent review.
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    15
 */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    16
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    17
/*
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    18
 * An IEC 61131-3 IL and ST compiler.
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    19
 *
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    20
 * Based on the
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    21
 * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10)
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    22
 *
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    23
 */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    24
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    25
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    26
/*
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    27
 * Conversion of sfc networks (i.e. SFC code).
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    28
 *
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    29
 * This is part of the 4th stage that generates
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    30
 * a c++ source program equivalent to the SFC, IL and ST
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    31
 * code.
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    32
 */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    33
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    34
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    35
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    36
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    37
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    38
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    39
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    40
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    41
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    42
class generate_cc_sfc_stepdecl_c: public generate_cc_base_c {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    43
  
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    44
  private:
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    45
    char step_number;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    46
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    47
  public:
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    48
    generate_cc_sfc_stepdecl_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    49
    ~generate_cc_sfc_stepdecl_c(void) {}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    50
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    51
    void reset_step_number(void) {step_number = 0;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    52
    char get_step_number(void) {return step_number;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    53
    void increment_step_number(void) {step_number++;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    54
    void print_step_number(void) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    55
      char str[10];
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    56
      sprintf(str, "%d", step_number);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    57
      s4o.print(str);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    58
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    59
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    60
/*********************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    61
/* B.1.6  Sequential function chart elements */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    62
/*********************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    63
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    64
    void *visit(initial_step_c *symbol) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    65
      s4o.print("#define ");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    66
      symbol->step_name->accept(*this);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    67
      s4o.print(" ");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    68
      print_step_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    69
      s4o.print("\n");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    70
      increment_step_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    71
      return NULL;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    72
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    73
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    74
    void *visit(step_c *symbol) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    75
      s4o.print("#define ");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    76
      symbol->step_name->accept(*this);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    77
      s4o.print(" ");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    78
      print_step_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    79
      s4o.print("\n");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    80
      increment_step_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    81
      return NULL;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    82
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    83
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    84
    void *visit(transition_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    85
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    86
    void *visit(action_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    87
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    88
}; /* generate_cc_sfc_stepdecl_c */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    89
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    90
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    91
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    92
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    93
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    94
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    95
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    96
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    97
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    98
class generate_cc_sfc_actiondecl_c: public generate_cc_base_c {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    99
  
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   100
  private:
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   101
    char action_number;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   102
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   103
  public:
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   104
    generate_cc_sfc_actiondecl_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   105
    ~generate_cc_sfc_actiondecl_c(void) {}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   106
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   107
    void reset_action_number(void) {action_number = 0;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   108
    char get_action_number(void) {return action_number;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   109
    void increment_action_number(void) {action_number++;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   110
    void print_action_number(void) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   111
      char str[10];
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   112
      sprintf(str, "%d", action_number);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   113
      s4o.print(str);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   114
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   115
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   116
/*********************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   117
/* B.1.6  Sequential function chart elements */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   118
/*********************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   119
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   120
    void *visit(initial_step_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   121
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   122
    void *visit(step_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   123
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   124
    void *visit(transition_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   125
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   126
    void *visit(action_c *symbol) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   127
      s4o.print("#define ");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   128
      symbol->action_name->accept(*this);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   129
      s4o.print(" ");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   130
      print_action_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   131
      s4o.print("\n");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   132
      increment_action_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   133
      return NULL;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   134
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   135
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   136
}; /* generate_cc_sfc_actiondecl_c */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   137
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   138
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   139
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   140
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   141
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   142
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   143
/***********************************************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   144
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   145
class generate_cc_sfcdecl_c: public iterator_visitor_c {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   146
  
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   147
  protected:
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   148
    stage4out_c &s4o;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   149
  
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   150
  private:
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   151
    generate_cc_sfc_stepdecl_c *generate_cc_sfc_stepdecl;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   152
    generate_cc_sfc_actiondecl_c *generate_cc_sfc_actiondecl;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   153
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   154
  public:
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   155
    generate_cc_sfcdecl_c(stage4out_c *s4o_ptr) : s4o(*s4o_ptr) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   156
      generate_cc_sfc_stepdecl = new generate_cc_sfc_stepdecl_c(s4o_ptr);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   157
      generate_cc_sfc_actiondecl = new generate_cc_sfc_actiondecl_c(s4o_ptr);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   158
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   159
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   160
    virtual ~generate_cc_sfcdecl_c(void) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   161
      delete generate_cc_sfc_stepdecl;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   162
      delete generate_cc_sfc_actiondecl;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   163
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   164
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   165
  public:
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   166
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   167
/*********************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   168
/* B.1.6  Sequential function chart elements */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   169
/*********************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   170
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   171
    /*| sequential_function_chart sfc_network*/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   172
    void *visit(sfc_network_c *symbol) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   173
      char i;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   174
      
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   175
      /* generate step number definitions */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   176
      s4o.print(s4o.indent_spaces + "// Steps declaration\n");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   177
      generate_cc_sfc_stepdecl->reset_step_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   178
      symbol->accept(*generate_cc_sfc_stepdecl);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   179
      s4o.print("\n" + s4o.indent_spaces + "nb_steps = ");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   180
      generate_cc_sfc_stepdecl->print_step_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   181
      s4o.print(";\n" + s4o.indent_spaces + "STEP step_list[");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   182
      generate_cc_sfc_stepdecl->print_step_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   183
      s4o.print("] = {\n");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   184
      s4o.indent_right();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   185
      for (i = 0; i < generate_cc_sfc_stepdecl->get_step_number(); i++) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   186
        if (i == 0) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   187
          s4o.print(s4o.indent_spaces + "{1, 0, 0}");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   188
        }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   189
        else {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   190
          s4o.print(",\n" + s4o.indent_spaces + "{0, 0, 0}");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   191
        }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   192
      }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   193
      s4o.indent_left();  
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   194
      s4o.print("\n" + s4o.indent_spaces + "};\n\n");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   195
      
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   196
      /* generate action number definitions */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   197
      s4o.print(s4o.indent_spaces + "// Actions declaration\n");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   198
      generate_cc_sfc_actiondecl->reset_action_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   199
      symbol->accept(*generate_cc_sfc_actiondecl);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   200
      s4o.print("\n" + s4o.indent_spaces + "nb_actions = ");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   201
      generate_cc_sfc_actiondecl->print_action_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   202
      s4o.print(";\n" + s4o.indent_spaces + "STEP step_list[");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   203
      generate_cc_sfc_actiondecl->print_action_number();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   204
      s4o.print("] = {\n");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   205
      s4o.indent_right();
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   206
      for (i = 0; i < generate_cc_sfc_actiondecl->get_action_number(); i++) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   207
        if (i == 0) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   208
          s4o.print(s4o.indent_spaces + "{0, 0, 0, 0, 0, 0}");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   209
        }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   210
        else {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   211
          s4o.print(",\n" + s4o.indent_spaces + "{0, 0, 0, 0, 0, 0}");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   212
        }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   213
      }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   214
      s4o.indent_left();  
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   215
      s4o.print("\n" + s4o.indent_spaces + "};\n\n");
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   216
      
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   217
      return NULL;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   218
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   219
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   220
/***********************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   221
/* B 2.1 Instructions and Operands */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   222
/***********************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   223
/*| instruction_list il_instruction */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   224
    void *visit(instruction_list_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   225
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   226
/***************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   227
/* B.3 - Language ST (Structured Text) */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   228
/***************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   229
/********************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   230
/* B 3.2 Statements */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   231
/********************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   232
void *visit(statement_list_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   233
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   234
/* Remainder implemented in generate_cc_sfcdecl_c... */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   235
};