absyntax/absyntax.cc
author mario
Sat, 09 Feb 2008 08:59:05 +0100
changeset 109 3af0b849b9c6
parent 69 41cb5b80416e
child 261 db2ad6541d92
permissions -rwxr-xr-x
Regression tests. Not yet finished...
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
     1
/*
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
     2
 * (c) 2003 Mario de Sousa
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
     3
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
     4
 * Offered to the public under the terms of the GNU General Public License
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
     5
 * as published by the Free Software Foundation; either version 2 of the
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
     6
 * License, or (at your option) any later version.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
     7
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
     8
 * This program is distributed in the hope that it will be useful, but
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
     9
 * WITHOUT ANY WARRANTY; without even the implied warranty of
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    11
 * Public License for more details.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    12
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    13
 * This code is made available on the understanding that it will not be
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    14
 * used in safety-critical situations without a full and competent review.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    15
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    16
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    17
/*
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    18
 * An IEC 61131-3 IL and ST compiler.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    19
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    20
 * Based on the
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    21
 * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    22
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    23
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    24
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    25
/*
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    26
 * Definition of the Abstract Syntax data structure components
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    27
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    28
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    29
#include <stdio.h>
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    30
#include <stdlib.h>	/* required for exit() */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    31
#include <string.h>
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    32
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    33
#include "absyntax.hh"
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    34
//#include "../stage1_2/iec.hh" /* required for BOGUS_TOKEN_ID, etc... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    35
#include "visitor.hh"
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    36
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    37
#define ABORT(str) {printf("ERROR: %s\n", str); exit(0);}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    38
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    39
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    40
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    41
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    42
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    43
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    44
/* The base class of all symbols */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    45
symbol_c::symbol_c(void) {
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    46
  this->first_line   = 0;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    47
  this->first_column = 0;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    48
  this->last_line    = 0;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    49
  this->last_column  = 0;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    50
}
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    51
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    52
symbol_c::symbol_c(int first_line, int first_column, int last_line, int last_column) {
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    53
  this->first_line   = first_line;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    54
  this->first_column = first_column;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    55
  this->last_line    = last_line;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    56
  this->last_column  = last_column;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    57
}
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    58
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    59
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    60
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    61
token_c::token_c(const char *value, int fl, int fc, int ll, int lc)
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    62
  :symbol_c(fl, fc, ll, lc) {
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    63
  this->value = value;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    64
//  printf("New token: %s\n", value);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    65
}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    66
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    67
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    68
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    69
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    70
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    71
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    72
list_c::list_c(int fl, int fc, int ll, int lc)
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    73
  :symbol_c(fl, fc, ll, lc) {
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    74
  n = 0;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    75
  elements = NULL;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    76
}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    77
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    78
list_c::list_c(symbol_c *elem, int fl, int fc, int ll, int lc)
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    79
  :symbol_c(fl, fc, ll, lc) {
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    80
  n = 0;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    81
  elements = NULL;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    82
  add_element(elem);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    83
}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    84
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    85
/* insert a new element */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    86
void list_c::add_element(symbol_c *elem) {
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    87
//printf("list_c::add_element()\n");
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    88
  n++;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    89
  elements = (symbol_c **)realloc(elements, n * sizeof(symbol_c *));
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    90
  if (elements == NULL)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    91
    ABORT("Out of memory");
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    92
  elements[n - 1] = elem;
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    93
 
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    94
  if (elem == NULL)
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    95
    return;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    96
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    97
  /* adjust the location parameters, taking into account the new element. */
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    98
  if ((first_line == elem->first_line) &&
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
    99
      (first_column > elem->first_column)) {
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   100
    first_column = elem->first_column;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   101
  }
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   102
  if (first_line > elem->first_line) {
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   103
    first_line = elem->first_line;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   104
    first_column = elem->first_column;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   105
  }
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   106
  if ((last_line == elem->last_line) &&
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   107
      (last_column < elem->last_column)) {
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   108
    last_column = elem->last_column;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   109
  }
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   110
  if (last_line < elem->last_line) {
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   111
    last_line = elem->last_line;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   112
    last_column = elem->last_column;
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   113
  }
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   114
}
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   115
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   116
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   117
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   118
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   119
#define SYM_LIST(class_name_c)							\
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   120
class_name_c::class_name_c(int fl, int fc, int ll, int lc)			\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   121
			:list_c(fl, fc, ll, lc) {}				\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   122
class_name_c::class_name_c(symbol_c *elem, int fl, int fc, int ll, int lc)	\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   123
			:list_c(elem, fl, fc, ll, lc) {}			\
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   124
void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   125
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   126
#define SYM_TOKEN(class_name_c)							\
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   127
class_name_c::class_name_c(const char *value, int fl, int fc, int ll, int lc)	\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   128
			:token_c(value, fl, fc, ll, lc) {}			\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   129
void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);}
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   130
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   131
#define SYM_REF0(class_name_c)					\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   132
class_name_c::class_name_c(int fl, int fc,			\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   133
			   int ll, int lc			\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   134
			  ): symbol_c(fl, fc, ll, lc) {}	\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   135
void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);}
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   136
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   137
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   138
#define SYM_REF1(class_name_c, ref1)			\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   139
class_name_c::class_name_c(symbol_c *ref1,		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   140
			   int fl, int fc,		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   141
			   int ll, int lc		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   142
			  ): symbol_c(fl, fc, ll, lc) {	\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   143
  this->ref1 = ref1;					\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   144
}							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   145
void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);}
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   146
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   147
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   148
#define SYM_REF2(class_name_c, ref1, ref2)		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   149
class_name_c::class_name_c(symbol_c *ref1,		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   150
			   symbol_c *ref2,		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   151
			   int fl, int fc,		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   152
			   int ll, int lc		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   153
			  ): symbol_c(fl, fc, ll, lc) {	\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   154
  this->ref1 = ref1;					\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   155
  this->ref2 = ref2;					\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   156
}							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   157
void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);}
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   158
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   159
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   160
#define SYM_REF3(class_name_c, ref1, ref2, ref3)	\
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   161
class_name_c::class_name_c(symbol_c *ref1,		\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   162
			   symbol_c *ref2,		\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   163
			   symbol_c *ref3,		\
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   164
			   int fl, int fc,		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   165
			   int ll, int lc		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   166
			  ): symbol_c(fl, fc, ll, lc) {	\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   167
  this->ref1 = ref1;					\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   168
  this->ref2 = ref2;					\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   169
  this->ref3 = ref3;					\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   170
}							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   171
void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);}
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   172
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   173
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   174
#define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4)	\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   175
class_name_c::class_name_c(symbol_c *ref1,		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   176
			   symbol_c *ref2,		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   177
			   symbol_c *ref3,		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   178
			   symbol_c *ref4,		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   179
			   int fl, int fc,		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   180
			   int ll, int lc		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   181
			  ): symbol_c(fl, fc, ll, lc) {	\
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   182
  this->ref1 = ref1;					\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   183
  this->ref2 = ref2;					\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   184
  this->ref3 = ref3;					\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   185
  this->ref4 = ref4;					\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   186
}							\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   187
void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   188
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   189
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   190
#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5)		\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   191
class_name_c::class_name_c(symbol_c *ref1,				\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   192
			   symbol_c *ref2,				\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   193
			   symbol_c *ref3,				\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   194
			   symbol_c *ref4,				\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   195
			   symbol_c *ref5,				\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   196
			   int fl, int fc,				\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   197
			   int ll, int lc				\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   198
			  ): symbol_c(fl, fc, ll, lc) {			\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   199
  this->ref1 = ref1;							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   200
  this->ref2 = ref2;							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   201
  this->ref3 = ref3;							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   202
  this->ref4 = ref4;							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   203
  this->ref5 = ref5;							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   204
}									\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   205
void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);}
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   206
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   207
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   208
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   209
#define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6)	\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   210
class_name_c::class_name_c(symbol_c *ref1,				\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   211
			   symbol_c *ref2,				\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   212
			   symbol_c *ref3,				\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   213
			   symbol_c *ref4,				\
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   214
			   symbol_c *ref5,				\
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   215
			   symbol_c *ref6,				\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   216
			   int fl, int fc,				\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   217
			   int ll, int lc				\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   218
			  ): symbol_c(fl, fc, ll, lc) {			\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   219
  this->ref1 = ref1;							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   220
  this->ref2 = ref2;							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   221
  this->ref3 = ref3;							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   222
  this->ref4 = ref4;							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   223
  this->ref5 = ref5;							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   224
  this->ref6 = ref6;							\
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   225
}									\
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   226
void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   227
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   228
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   229
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   230
#include "absyntax.def"
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   231
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   232
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   233
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   234
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   235
#undef SYM_LIST
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   236
#undef SYM_TOKEN
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   237
#undef SYM_TOKEN
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   238
#undef SYM_REF0
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   239
#undef SYM_REF1
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   240
#undef SYM_REF2
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   241
#undef SYM_REF3
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   242
#undef SYM_REF4
69
41cb5b80416e Adding basic error checking.
mario
parents: 15
diff changeset
   243
#undef SYM_REF5
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   244
#undef SYM_REF6
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   245
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   246
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   247
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   248
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   249