stage4/generate_cc/generate_cc_sfcdecl.cc
author lbessard
Wed, 18 Apr 2007 16:43:18 +0200
changeset 22 08bcc40be1fa
parent 18 e6af5eb5f546
child 49 c96d1a4c23f8
permissions -rw-r--r--
Bugs on SFC transition list generation and search expression type with structured_variables corrected
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
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    42
class generate_cc_sfc_steptable_c: public generate_cc_base_c {
17
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:
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    48
    generate_cc_sfc_steptable_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    49
    ~generate_cc_sfc_steptable_c(void) {}
17
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
    void print_step_number(void) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    53
      char str[10];
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    54
      sprintf(str, "%d", step_number);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    55
      s4o.print(str);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    56
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    57
/*********************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    58
/* B.1.6  Sequential function chart elements */
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
    void *visit(initial_step_c *symbol) {
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    62
      if (step_number > 0) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    63
        s4o.print(",\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    64
      }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    65
      s4o.print(s4o.indent_spaces + "{1, 0, 0}");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    66
      step_number++;
17
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    67
      return NULL;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    68
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    69
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    70
    void *visit(step_c *symbol) {
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    71
      if (step_number > 0) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    72
        s4o.print(",\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    73
      }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    74
      s4o.print(s4o.indent_spaces + "{0, 0, 0}");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    75
      step_number++;
17
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    76
      return NULL;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    77
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    78
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    79
    void *visit(transition_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    80
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    81
    void *visit(action_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    82
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    83
}; /* generate_cc_sfc_steptable_c */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    84
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    85
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    86
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    87
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    88
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    89
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    90
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    91
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    92
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    93
class generate_cc_sfc_actiontable_c: public generate_cc_base_c {
17
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
  private:
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
    96
    char action_number;
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
  public:
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
    99
    generate_cc_sfc_actiontable_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   100
    ~generate_cc_sfc_actiontable_c(void) {}
17
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   101
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   102
    void reset_action_number(void) {action_number = 0;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   103
    void print_action_number(void) {
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   104
      char str[10];
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   105
      sprintf(str, "%d", action_number);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   106
      s4o.print(str);
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   107
    }
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   108
/*********************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   109
/* B.1.6  Sequential function chart elements */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   110
/*********************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   111
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   112
    void *visit(initial_step_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   113
    
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   114
    void *visit(step_c *symbol) {return NULL;}
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
    void *visit(transition_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   117
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   118
    void *visit(action_c *symbol) {
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   119
      if (action_number > 0) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   120
        s4o.print(",\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   121
      }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   122
      s4o.print(s4o.indent_spaces + "{0, 0, 0, 0, 0, 0}");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   123
      action_number++;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   124
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   125
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   126
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   127
}; /* generate_cc_sfc_actiontable_c */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   128
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   129
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   130
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   131
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   132
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   133
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   134
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   135
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   136
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   137
class generate_cc_sfc_transitiontable_c: public generate_cc_base_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   138
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   139
  private:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   140
    char transition_number;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   141
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   142
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   143
    generate_cc_sfc_transitiontable_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   144
    ~generate_cc_sfc_transitiontable_c(void) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   145
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   146
    void reset_transition_number(void) {transition_number = 0;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   147
    void print_transition_number(void) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   148
      char str[10];
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   149
      sprintf(str, "%d", transition_number);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   150
      s4o.print(str);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   151
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   152
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   153
/* B.1.6  Sequential function chart elements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   154
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   155
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   156
    void *visit(initial_step_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   157
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   158
    void *visit(step_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   159
22
08bcc40be1fa Bugs on SFC transition list generation and search expression type with structured_variables corrected
lbessard
parents: 18
diff changeset
   160
    void *visit(transition_c *symbol) {
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   161
      transition_number++;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   162
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   163
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   164
22
08bcc40be1fa Bugs on SFC transition list generation and search expression type with structured_variables corrected
lbessard
parents: 18
diff changeset
   165
    void *visit(action_c *symbol) {return NULL;}
08bcc40be1fa Bugs on SFC transition list generation and search expression type with structured_variables corrected
lbessard
parents: 18
diff changeset
   166
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   167
}; /* generate_cc_sfc_steptable_c */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   168
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   169
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   170
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   171
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   172
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   173
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   174
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   175
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   176
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   177
class generate_cc_sfctables_c: public iterator_visitor_c {
17
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   178
  
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   179
  protected:
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   180
    stage4out_c &s4o;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   181
  
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   182
  private:
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   183
    generate_cc_sfc_steptable_c *generate_cc_sfc_steptable;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   184
    generate_cc_sfc_actiontable_c *generate_cc_sfc_actiontable;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   185
    generate_cc_sfc_transitiontable_c *generate_cc_sfc_transitiontable;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   186
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   187
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   188
    generate_cc_sfctables_c(stage4out_c *s4o_ptr) : s4o(*s4o_ptr) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   189
      generate_cc_sfc_steptable = new generate_cc_sfc_steptable_c(s4o_ptr);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   190
      generate_cc_sfc_actiontable = new generate_cc_sfc_actiontable_c(s4o_ptr);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   191
      generate_cc_sfc_transitiontable = new generate_cc_sfc_transitiontable_c(s4o_ptr);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   192
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   193
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   194
    virtual ~generate_cc_sfctables_c(void) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   195
      delete generate_cc_sfc_steptable;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   196
      delete generate_cc_sfc_actiontable;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   197
      delete generate_cc_sfc_transitiontable;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   198
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   199
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   200
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   201
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   202
    /* generate steps and actions tables */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   203
    void *visit(sequential_function_chart_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   204
      /* generate steps table */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   205
      generate_cc_sfc_steptable->reset_step_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   206
      s4o.print(s4o.indent_spaces + "STEP step_list[] = {\n");
17
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   207
      s4o.indent_right();
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   208
      symbol->accept(*generate_cc_sfc_steptable);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   209
      s4o.indent_left();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   210
      s4o.print("\n" + s4o.indent_spaces + "};\n" + s4o.indent_spaces + "nb_steps = ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   211
      generate_cc_sfc_steptable->print_step_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   212
      s4o.print(";\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   213
      
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   214
      /* generate actions table */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   215
      generate_cc_sfc_actiontable->reset_action_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   216
      s4o.print(s4o.indent_spaces + "ACTION action_list[] = {\n");
17
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   217
      s4o.indent_right();
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   218
      symbol->accept(*generate_cc_sfc_actiontable);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   219
      s4o.indent_left();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   220
      s4o.print("\n" + s4o.indent_spaces + "};\n" + s4o.indent_spaces + "nb_actions = ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   221
      generate_cc_sfc_actiontable->print_action_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   222
      s4o.print(";\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   223
      
22
08bcc40be1fa Bugs on SFC transition list generation and search expression type with structured_variables corrected
lbessard
parents: 18
diff changeset
   224
      /* generate transitions table */
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   225
      generate_cc_sfc_transitiontable->reset_transition_number();
22
08bcc40be1fa Bugs on SFC transition list generation and search expression type with structured_variables corrected
lbessard
parents: 18
diff changeset
   226
      symbol->accept(*generate_cc_sfc_transitiontable);
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   227
      s4o.print(s4o.indent_spaces + "char transition_list[");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   228
      generate_cc_sfc_transitiontable->print_transition_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   229
      s4o.print("];\n");
17
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   230
      
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   231
      return NULL;
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   232
    }
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
/***********************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   235
/* B 2.1 Instructions and Operands */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   236
/***********************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   237
/*| instruction_list il_instruction */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   238
    void *visit(instruction_list_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   239
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   240
/***************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   241
/* B.3 - Language ST (Structured Text) */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   242
/***************************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   243
/********************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   244
/* B 3.2 Statements */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   245
/********************/
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   246
    void *visit(statement_list_c *symbol) {return NULL;}
17
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   247
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   248
/* Remainder implemented in generate_cc_sfcdecl_c... */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   249
};
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   250
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   251
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   252
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   253
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   254
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   255
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   256
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   257
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   258
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   259
class generate_cc_sfc_stepdecl_c: public generate_cc_base_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   260
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   261
  private:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   262
    char step_number;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   263
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   264
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   265
    generate_cc_sfc_stepdecl_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   266
    ~generate_cc_sfc_stepdecl_c(void) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   267
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   268
    void reset_step_number(void) {step_number = 0;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   269
    void print_step_number(void) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   270
      char str[10];
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   271
      sprintf(str, "%d", step_number);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   272
      s4o.print(str);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   273
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   274
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   275
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   276
/* B.1.6  Sequential function chart elements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   277
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   278
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   279
    void *visit(initial_step_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   280
      s4o.print("#define ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   281
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   282
      symbol->step_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   283
      s4o.print(" ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   284
      print_step_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   285
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   286
      step_number++;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   287
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   288
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   289
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   290
    void *visit(step_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   291
      s4o.print("#define ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   292
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   293
      symbol->step_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   294
      s4o.print(" ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   295
      print_step_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   296
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   297
      step_number++;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   298
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   299
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   300
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   301
    void *visit(transition_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   302
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   303
    void *visit(action_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   304
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   305
}; /* generate_cc_sfc_stepdecl_c */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   306
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   307
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   308
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   309
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   310
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   311
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   312
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   313
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   314
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   315
class generate_cc_sfc_actiondecl_c: public generate_cc_base_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   316
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   317
  private:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   318
    char action_number;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   319
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   320
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   321
    generate_cc_sfc_actiondecl_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   322
    ~generate_cc_sfc_actiondecl_c(void) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   323
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   324
    void reset_action_number(void) {action_number = 0;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   325
    void print_action_number(void) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   326
      char str[10];
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   327
      sprintf(str, "%d", action_number);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   328
      s4o.print(str);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   329
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   330
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   331
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   332
/* B.1.6  Sequential function chart elements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   333
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   334
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   335
    void *visit(initial_step_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   336
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   337
    void *visit(step_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   338
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   339
    void *visit(transition_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   340
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   341
    void *visit(action_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   342
      s4o.print("#define ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   343
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   344
      symbol->action_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   345
      s4o.print(" ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   346
      print_action_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   347
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   348
      action_number++;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   349
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   350
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   351
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   352
}; /* generate_cc_sfc_actiondecl_c */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   353
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   354
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   355
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   356
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   357
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   358
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   359
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   360
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   361
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   362
class generate_cc_sfcdecl_c: public iterator_visitor_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   363
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   364
  protected:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   365
    stage4out_c &s4o;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   366
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   367
  private:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   368
    generate_cc_sfc_stepdecl_c *generate_cc_sfc_stepdecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   369
    generate_cc_sfc_actiondecl_c *generate_cc_sfc_actiondecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   370
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   371
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   372
    generate_cc_sfcdecl_c(stage4out_c *s4o_ptr) : s4o(*s4o_ptr) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   373
      generate_cc_sfc_stepdecl = new generate_cc_sfc_stepdecl_c(s4o_ptr);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   374
      generate_cc_sfc_actiondecl = new generate_cc_sfc_actiondecl_c(s4o_ptr);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   375
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   376
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   377
    virtual ~generate_cc_sfcdecl_c(void) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   378
      delete generate_cc_sfc_stepdecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   379
      delete generate_cc_sfc_actiondecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   380
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   381
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   382
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   383
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   384
    /* generate steps and actions tables */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   385
    void *visit(sequential_function_chart_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   386
      /* generate steps definitions */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   387
      generate_cc_sfc_stepdecl->reset_step_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   388
      s4o.print("// Steps definitions\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   389
      symbol->accept(*generate_cc_sfc_stepdecl);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   390
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   391
      
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   392
      /* generate actions definitions */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   393
      generate_cc_sfc_actiondecl->reset_action_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   394
      s4o.print("// Actions definitions\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   395
      symbol->accept(*generate_cc_sfc_actiondecl);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   396
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   397
      
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   398
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   399
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   400
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   401
/***********************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   402
/* B 2.1 Instructions and Operands */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   403
/***********************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   404
/*| instruction_list il_instruction */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   405
    void *visit(instruction_list_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   406
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   407
/***************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   408
/* B.3 - Language ST (Structured Text) */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   409
/***************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   410
/********************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   411
/* B 3.2 Statements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   412
/********************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   413
    void *visit(statement_list_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   414
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   415
/* Remainder implemented in generate_cc_sfcdecl_c... */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   416
};
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   417
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   418
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   419
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   420
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   421
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   422
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   423
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   424
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   425
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   426
class generate_cc_sfc_stepundecl_c: public generate_cc_base_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   427
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   428
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   429
    generate_cc_sfc_stepundecl_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   430
    ~generate_cc_sfc_stepundecl_c(void) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   431
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   432
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   433
/* B.1.6  Sequential function chart elements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   434
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   435
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   436
    void *visit(initial_step_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   437
      s4o.print("#undef ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   438
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   439
      symbol->step_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   440
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   441
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   442
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   443
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   444
    void *visit(step_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   445
      s4o.print("#undef ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   446
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   447
      symbol->step_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   448
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   449
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   450
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   451
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   452
    void *visit(transition_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   453
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   454
    void *visit(action_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   455
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   456
}; /* generate_cc_sfc_stepdecl_c */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   457
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   458
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   459
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   460
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   461
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   462
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   463
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   464
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   465
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   466
class generate_cc_sfc_actionundecl_c: public generate_cc_base_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   467
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   468
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   469
    generate_cc_sfc_actionundecl_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   470
    ~generate_cc_sfc_actionundecl_c(void) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   471
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   472
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   473
/* B.1.6  Sequential function chart elements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   474
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   475
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   476
    void *visit(initial_step_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   477
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   478
    void *visit(step_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   479
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   480
    void *visit(transition_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   481
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   482
    void *visit(action_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   483
      s4o.print("#undef ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   484
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   485
      symbol->action_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   486
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   487
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   488
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   489
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   490
}; /* generate_cc_sfc_stepdecl_c */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   491
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   492
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   493
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   494
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   495
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   496
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   497
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   498
/***********************************************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   499
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   500
class generate_cc_sfcundecl_c: public iterator_visitor_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   501
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   502
  protected:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   503
    stage4out_c &s4o;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   504
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   505
  private:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   506
    generate_cc_sfc_stepundecl_c *generate_cc_sfc_stepundecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   507
    generate_cc_sfc_actionundecl_c *generate_cc_sfc_actionundecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   508
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   509
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   510
    generate_cc_sfcundecl_c(stage4out_c *s4o_ptr) : s4o(*s4o_ptr) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   511
      generate_cc_sfc_stepundecl = new generate_cc_sfc_stepundecl_c(s4o_ptr);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   512
      generate_cc_sfc_actionundecl = new generate_cc_sfc_actionundecl_c(s4o_ptr);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   513
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   514
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   515
    virtual ~generate_cc_sfcundecl_c(void) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   516
      delete generate_cc_sfc_stepundecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   517
      delete generate_cc_sfc_actionundecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   518
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   519
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   520
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   521
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   522
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   523
/* B.1.6  Sequential function chart elements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   524
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   525
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   526
    /* generate steps and actions tables */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   527
    void *visit(sequential_function_chart_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   528
      /* generate steps undefinitions */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   529
      s4o.print("// Steps undefinitions\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   530
      symbol->accept(*generate_cc_sfc_stepundecl);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   531
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   532
      
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   533
      /* generate actions table */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   534
      s4o.print("// Actions undefinitions\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   535
      symbol->accept(*generate_cc_sfc_actionundecl);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   536
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   537
      
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   538
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   539
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   540
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   541
/***********************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   542
/* B 2.1 Instructions and Operands */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   543
/***********************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   544
/*| instruction_list il_instruction */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   545
    void *visit(instruction_list_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   546
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   547
/***************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   548
/* B.3 - Language ST (Structured Text) */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   549
/***************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   550
/********************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   551
/* B 3.2 Statements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   552
/********************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   553
    void *visit(statement_list_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   554
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   555
/* Remainder implemented in generate_cc_sfcdecl_c... */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   556
};