stage4/generate_cc/generate_cc_sfcdecl.cc
author lbessard
Tue, 27 Feb 2007 17:24:10 +0100
changeset 18 e6af5eb5f546
parent 17 38754701ac41
child 22 08bcc40be1fa
permissions -rw-r--r--
SFC generator improved
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
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   160
    void *visit(transition_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   161
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   162
    void *visit(action_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   163
      transition_number++;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   164
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   165
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   166
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
      
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   224
      /* generate actions table */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   225
      generate_cc_sfc_transitiontable->reset_transition_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   226
      s4o.print(s4o.indent_spaces + "char transition_list[");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   227
      generate_cc_sfc_transitiontable->print_transition_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   228
      s4o.print("];\n");
17
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
      return NULL;
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
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
/* B 2.1 Instructions and Operands */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   235
/***********************************/
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   236
/*| instruction_list il_instruction */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   237
    void *visit(instruction_list_c *symbol) {return NULL;}
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   238
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
/* B.3 - Language ST (Structured Text) */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   241
/***************************************/
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
/* B 3.2 Statements */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   244
/********************/
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   245
    void *visit(statement_list_c *symbol) {return NULL;}
17
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   246
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   247
/* Remainder implemented in generate_cc_sfcdecl_c... */
38754701ac41 SFC state machine first approach generator implemented
lbessard
parents:
diff changeset
   248
};
18
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   249
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
class generate_cc_sfc_stepdecl_c: public generate_cc_base_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   259
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   260
  private:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   261
    char step_number;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   262
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   263
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   264
    generate_cc_sfc_stepdecl_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   265
    ~generate_cc_sfc_stepdecl_c(void) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   266
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   267
    void reset_step_number(void) {step_number = 0;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   268
    void print_step_number(void) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   269
      char str[10];
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   270
      sprintf(str, "%d", step_number);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   271
      s4o.print(str);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   272
    }
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
/* B.1.6  Sequential function chart elements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   276
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   277
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   278
    void *visit(initial_step_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   279
      s4o.print("#define ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   280
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   281
      symbol->step_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   282
      s4o.print(" ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   283
      print_step_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   284
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   285
      step_number++;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   286
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   287
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   288
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   289
    void *visit(step_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   290
      s4o.print("#define ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   291
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   292
      symbol->step_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   293
      s4o.print(" ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   294
      print_step_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   295
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   296
      step_number++;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   297
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   298
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   299
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   300
    void *visit(transition_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   301
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   302
    void *visit(action_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   303
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   304
}; /* generate_cc_sfc_stepdecl_c */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   305
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
class generate_cc_sfc_actiondecl_c: public generate_cc_base_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   315
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   316
  private:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   317
    char action_number;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   318
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   319
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   320
    generate_cc_sfc_actiondecl_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   321
    ~generate_cc_sfc_actiondecl_c(void) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   322
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   323
    void reset_action_number(void) {action_number = 0;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   324
    void print_action_number(void) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   325
      char str[10];
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   326
      sprintf(str, "%d", action_number);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   327
      s4o.print(str);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   328
    }
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
/* B.1.6  Sequential function chart elements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   332
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   333
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   334
    void *visit(initial_step_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   335
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   336
    void *visit(step_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   337
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   338
    void *visit(transition_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   339
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   340
    void *visit(action_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   341
      s4o.print("#define ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   342
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   343
      symbol->action_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   344
      s4o.print(" ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   345
      print_action_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   346
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   347
      action_number++;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   348
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   349
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   350
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   351
}; /* generate_cc_sfc_actiondecl_c */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   352
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
class generate_cc_sfcdecl_c: public iterator_visitor_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   362
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   363
  protected:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   364
    stage4out_c &s4o;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   365
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   366
  private:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   367
    generate_cc_sfc_stepdecl_c *generate_cc_sfc_stepdecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   368
    generate_cc_sfc_actiondecl_c *generate_cc_sfc_actiondecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   369
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   370
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   371
    generate_cc_sfcdecl_c(stage4out_c *s4o_ptr) : s4o(*s4o_ptr) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   372
      generate_cc_sfc_stepdecl = new generate_cc_sfc_stepdecl_c(s4o_ptr);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   373
      generate_cc_sfc_actiondecl = new generate_cc_sfc_actiondecl_c(s4o_ptr);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   374
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   375
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   376
    virtual ~generate_cc_sfcdecl_c(void) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   377
      delete generate_cc_sfc_stepdecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   378
      delete generate_cc_sfc_actiondecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   379
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   380
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   381
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   382
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   383
    /* generate steps and actions tables */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   384
    void *visit(sequential_function_chart_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   385
      /* generate steps definitions */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   386
      generate_cc_sfc_stepdecl->reset_step_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   387
      s4o.print("// Steps definitions\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   388
      symbol->accept(*generate_cc_sfc_stepdecl);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   389
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   390
      
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   391
      /* generate actions definitions */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   392
      generate_cc_sfc_actiondecl->reset_action_number();
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   393
      s4o.print("// Actions definitions\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   394
      symbol->accept(*generate_cc_sfc_actiondecl);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   395
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   396
      
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   397
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   398
    }
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
/* B 2.1 Instructions and Operands */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   402
/***********************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   403
/*| instruction_list il_instruction */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   404
    void *visit(instruction_list_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   405
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   406
/***************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   407
/* B.3 - Language ST (Structured Text) */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   408
/***************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   409
/********************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   410
/* B 3.2 Statements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   411
/********************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   412
    void *visit(statement_list_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   413
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   414
/* Remainder implemented in generate_cc_sfcdecl_c... */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   415
};
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
class generate_cc_sfc_stepundecl_c: public generate_cc_base_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   426
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   427
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   428
    generate_cc_sfc_stepundecl_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   429
    ~generate_cc_sfc_stepundecl_c(void) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   430
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   431
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   432
/* B.1.6  Sequential function chart elements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   433
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   434
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   435
    void *visit(initial_step_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   436
      s4o.print("#undef ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   437
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   438
      symbol->step_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   439
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   440
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   441
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   442
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   443
    void *visit(step_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   444
      s4o.print("#undef ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   445
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   446
      symbol->step_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   447
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   448
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   449
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   450
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   451
    void *visit(transition_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   452
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   453
    void *visit(action_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   454
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   455
}; /* generate_cc_sfc_stepdecl_c */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   456
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
class generate_cc_sfc_actionundecl_c: public generate_cc_base_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   466
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   467
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   468
    generate_cc_sfc_actionundecl_c(stage4out_c *s4o_ptr): generate_cc_base_c(s4o_ptr) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   469
    ~generate_cc_sfc_actionundecl_c(void) {}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   470
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   471
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   472
/* B.1.6  Sequential function chart elements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   473
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   474
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   475
    void *visit(initial_step_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   476
    
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   477
    void *visit(step_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   478
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   479
    void *visit(transition_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   480
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   481
    void *visit(action_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   482
      s4o.print("#undef ");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   483
      s4o.print(SFC_STEP_ACTION_PREFIX);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   484
      symbol->action_name->accept(*this);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   485
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   486
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   487
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   488
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   489
}; /* generate_cc_sfc_stepdecl_c */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   490
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
class generate_cc_sfcundecl_c: public iterator_visitor_c {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   500
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   501
  protected:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   502
    stage4out_c &s4o;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   503
  
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   504
  private:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   505
    generate_cc_sfc_stepundecl_c *generate_cc_sfc_stepundecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   506
    generate_cc_sfc_actionundecl_c *generate_cc_sfc_actionundecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   507
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   508
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   509
    generate_cc_sfcundecl_c(stage4out_c *s4o_ptr) : s4o(*s4o_ptr) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   510
      generate_cc_sfc_stepundecl = new generate_cc_sfc_stepundecl_c(s4o_ptr);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   511
      generate_cc_sfc_actionundecl = new generate_cc_sfc_actionundecl_c(s4o_ptr);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   512
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   513
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   514
    virtual ~generate_cc_sfcundecl_c(void) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   515
      delete generate_cc_sfc_stepundecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   516
      delete generate_cc_sfc_actionundecl;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   517
    }
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   518
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   519
  public:
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   520
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   521
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   522
/* B.1.6  Sequential function chart elements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   523
/*********************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   524
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   525
    /* generate steps and actions tables */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   526
    void *visit(sequential_function_chart_c *symbol) {
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   527
      /* generate steps undefinitions */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   528
      s4o.print("// Steps undefinitions\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   529
      symbol->accept(*generate_cc_sfc_stepundecl);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   530
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   531
      
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   532
      /* generate actions table */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   533
      s4o.print("// Actions undefinitions\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   534
      symbol->accept(*generate_cc_sfc_actionundecl);
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   535
      s4o.print("\n");
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   536
      
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   537
      return NULL;
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   538
    }
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
/* B 2.1 Instructions and Operands */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   542
/***********************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   543
/*| instruction_list il_instruction */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   544
    void *visit(instruction_list_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   545
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   546
/***************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   547
/* B.3 - Language ST (Structured Text) */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   548
/***************************************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   549
/********************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   550
/* B 3.2 Statements */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   551
/********************/
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   552
    void *visit(statement_list_c *symbol) {return NULL;}
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   553
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   554
/* Remainder implemented in generate_cc_sfcdecl_c... */
e6af5eb5f546 SFC generator improved
lbessard
parents: 17
diff changeset
   555
};