absyntax/absyntax.hh
changeset 69 41cb5b80416e
parent 0 fb772792efd1
child 261 db2ad6541d92
equal deleted inserted replaced
68:b0a43002dcac 69:41cb5b80416e
    49  */
    49  */
    50 class visitor_c; // forward declaration
    50 class visitor_c; // forward declaration
    51 
    51 
    52 
    52 
    53 class symbol_c; // forward declaration
    53 class symbol_c; // forward declaration
    54 //extern symbol_c *tree_root;
       
    55 
    54 
    56 
    55 
    57 
    56 
    58 /* The base class of all symbols */
    57 /* The base class of all symbols */
    59 class symbol_c {
    58 class symbol_c {
    60 
    59 
    61   public:
    60   public:
    62     /*
    61     /*
    63      * Line number for the purposes of error checking
    62      * Line number for the purposes of error checking
    64      */
    63      */
    65     long lineno;
    64     int first_line;
       
    65     int first_column;
       
    66     int last_line;
       
    67     int last_column;
    66 
    68 
    67   public:
    69   public:
    68     /* default constructor */
    70     /* default constructor */
    69     symbol_c(void);
    71     symbol_c(void);
    70     symbol_c(long lineno);
    72     symbol_c(int fl     /* first_line   */, 
       
    73              int fc     /* first_column */,
       
    74              int ll = 0 /* last_line    */,
       
    75              int lc = 0 /* last_column  */
       
    76             );
    71 
    77 
    72     /* default destructor */
    78     /* default destructor */
    73     /* must be virtual so compiler does not complain... */ 
    79     /* must be virtual so compiler does not complain... */ 
    74     virtual ~symbol_c(void) {return;};
    80     virtual ~symbol_c(void) {return;};
    75 
    81 
    81   public:
    87   public:
    82     /* the value of the symbol. */
    88     /* the value of the symbol. */
    83     const char *value;
    89     const char *value;
    84 
    90 
    85   public:
    91   public:
    86     token_c(const char *value);
    92     token_c(const char *value, int fl = 0, int fc = 0, int ll = 0, int lc = 0);
    87 };
    93 };
    88 
    94 
    89 
    95 
    90  /* a list of symbols... */
    96  /* a list of symbols... */
    91 class list_c: public symbol_c {
    97 class list_c: public symbol_c {
    92   public:
    98   public:
    93     int n;
    99     int n;
    94     symbol_c **elements;
   100     symbol_c **elements;
    95 
   101 
    96   public:
   102   public:
    97     list_c(void);
   103     list_c(int fl = 0, int fc = 0, int ll = 0, int lc = 0);
    98     list_c(symbol_c *elem);
   104     list_c(symbol_c *elem, int fl = 0, int fc = 0, int ll = 0, int lc = 0);
    99      /* insert a new element */
   105      /* insert a new element */
   100     virtual void add_element(symbol_c *elem);
   106     virtual void add_element(symbol_c *elem);
   101 };
   107 };
   102 
   108 
   103 
   109 
   104 
   110 
   105 
   111 
   106 #define SYM_LIST(class_name_c)			\
   112 #define SYM_LIST(class_name_c)								\
   107 class class_name_c:	public list_c {		\
   113 class class_name_c:	public list_c {							\
   108   public:					\
   114   public:										\
   109     virtual void *accept(visitor_c &visitor);	\
   115     class_name_c(int fl = 0, int fc = 0, int ll = 0, int lc = 0);			\
   110 };
   116     class_name_c(symbol_c *elem, int fl = 0, int fc = 0, int ll = 0, int lc = 0);	\
   111 
   117     virtual void *accept(visitor_c &visitor);						\
   112 
   118 };
   113 #define SYM_TOKEN(class_name_c)			\
   119 
   114 class class_name_c: 	public token_c {	\
   120 
   115   public:					\
   121 #define SYM_TOKEN(class_name_c)								\
   116     class_name_c(const char *value);			\
   122 class class_name_c: 	public token_c {						\
   117     virtual void *accept(visitor_c &visitor);	\
   123   public:										\
       
   124     class_name_c(const char *value, int fl = 0, int fc = 0, int ll = 0, int lc = 0);	\
       
   125     virtual void *accept(visitor_c &visitor);						\
   118 };
   126 };
   119 
   127 
   120 
   128 
   121 #define SYM_REF0(class_name_c)			\
   129 #define SYM_REF0(class_name_c)			\
   122 class class_name_c: public symbol_c {		\
   130 class class_name_c: public symbol_c {		\
   123   public:					\
   131   public:					\
       
   132     class_name_c(int fl = 0, int fc = 0, 	\
       
   133 		 int ll = 0, int lc = 0);	\
   124     virtual void *accept(visitor_c &visitor);	\
   134     virtual void *accept(visitor_c &visitor);	\
   125 };
   135 };
   126 
   136 
   127 
   137 
   128 #define SYM_REF2(class_name_c, ref1, ref2)	\
   138 #define SYM_REF1(class_name_c, ref1)			\
   129 class class_name_c: public symbol_c {		\
   139 class class_name_c: public symbol_c {			\
   130   public:					\
   140   public:						\
   131     symbol_c *ref1;				\
   141     symbol_c *ref1;					\
   132     symbol_c *ref2;				\
   142   public:						\
   133   public:					\
   143     class_name_c(symbol_c *ref1,			\
   134     class_name_c(symbol_c *ref1,		\
   144 		 int fl = 0, int fc = 0, 		\
   135 		 symbol_c *ref2 = NULL);	\
   145 		 int ll = 0, int lc = 0);		\
   136     virtual void *accept(visitor_c &visitor);	\
   146     virtual void *accept(visitor_c &visitor);		\
       
   147 };
       
   148 
       
   149 
       
   150 #define SYM_REF2(class_name_c, ref1, ref2)		\
       
   151 class class_name_c: public symbol_c {			\
       
   152   public:						\
       
   153     symbol_c *ref1;					\
       
   154     symbol_c *ref2;					\
       
   155   public:						\
       
   156     class_name_c(symbol_c *ref1,			\
       
   157 		 symbol_c *ref2 = NULL,			\
       
   158 		 int fl = 0, int fc = 0, 		\
       
   159 		 int ll = 0, int lc = 0);		\
       
   160     virtual void *accept(visitor_c &visitor);		\
       
   161 };
       
   162 
       
   163 
       
   164 #define SYM_REF3(class_name_c, ref1, ref2, ref3)	\
       
   165 class class_name_c: public symbol_c {			\
       
   166   public:						\
       
   167     symbol_c *ref1;					\
       
   168     symbol_c *ref2;					\
       
   169     symbol_c *ref3;					\
       
   170   public:						\
       
   171     class_name_c(symbol_c *ref1,			\
       
   172 		 symbol_c *ref2,			\
       
   173 		 symbol_c *ref3,			\
       
   174 		 int fl = 0, int fc = 0, 		\
       
   175 		 int ll = 0, int lc = 0);		\
       
   176     virtual void *accept(visitor_c &visitor);		\
   137 };
   177 };
   138 
   178 
   139 
   179 
   140 #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4)	\
   180 #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4)	\
   141 class class_name_c: public symbol_c {			\
   181 class class_name_c: public symbol_c {			\
   146     symbol_c *ref4;					\
   186     symbol_c *ref4;					\
   147   public:						\
   187   public:						\
   148     class_name_c(symbol_c *ref1,			\
   188     class_name_c(symbol_c *ref1,			\
   149 		 symbol_c *ref2,			\
   189 		 symbol_c *ref2,			\
   150 		 symbol_c *ref3,			\
   190 		 symbol_c *ref3,			\
   151 		 symbol_c *ref4 = NULL);		\
   191 		 symbol_c *ref4 = NULL,			\
   152     virtual void *accept(visitor_c &visitor);		\
   192 		 int fl = 0, int fc = 0, 		\
       
   193 		 int ll = 0, int lc = 0);		\
       
   194     virtual void *accept(visitor_c &visitor);		\
       
   195 };
       
   196 
       
   197 
       
   198 #define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5)		\
       
   199 class class_name_c: public symbol_c {					\
       
   200   public:								\
       
   201     symbol_c *ref1;							\
       
   202     symbol_c *ref2;							\
       
   203     symbol_c *ref3;							\
       
   204     symbol_c *ref4;							\
       
   205     symbol_c *ref5;							\
       
   206   public:								\
       
   207     class_name_c(symbol_c *ref1,					\
       
   208 		 symbol_c *ref2,					\
       
   209 		 symbol_c *ref3,					\
       
   210 		 symbol_c *ref4,					\
       
   211 		 symbol_c *ref5,					\
       
   212 		 int fl = 0, int fc = 0, 				\
       
   213 		 int ll = 0, int lc = 0);				\
       
   214     virtual void *accept(visitor_c &visitor);				\
   153 };
   215 };
   154 
   216 
   155 
   217 
   156 #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6)	\
   218 #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6)	\
   157 class class_name_c: public symbol_c {					\
   219 class class_name_c: public symbol_c {					\
   166     class_name_c(symbol_c *ref1,					\
   228     class_name_c(symbol_c *ref1,					\
   167 		 symbol_c *ref2,					\
   229 		 symbol_c *ref2,					\
   168 		 symbol_c *ref3,					\
   230 		 symbol_c *ref3,					\
   169 		 symbol_c *ref4,					\
   231 		 symbol_c *ref4,					\
   170 		 symbol_c *ref5,					\
   232 		 symbol_c *ref5,					\
   171 		 symbol_c *ref6 = NULL);		\
   233 		 symbol_c *ref6 = NULL,					\
       
   234 		 int fl = 0, int fc = 0, 				\
       
   235 		 int ll = 0, int lc = 0);				\
   172     virtual void *accept(visitor_c &visitor);				\
   236     virtual void *accept(visitor_c &visitor);				\
   173 };
   237 };
   174 
   238 
   175 
   239 
   176 #include "absyntax.def"
   240 #include "absyntax.def"
   178 
   242 
   179 
   243 
   180 #undef SYM_LIST
   244 #undef SYM_LIST
   181 #undef SYM_TOKEN
   245 #undef SYM_TOKEN
   182 #undef SYM_REF0
   246 #undef SYM_REF0
       
   247 #undef SYM_REF1
   183 #undef SYM_REF2
   248 #undef SYM_REF2
       
   249 #undef SYM_REF3
   184 #undef SYM_REF4
   250 #undef SYM_REF4
       
   251 #undef SYM_REF5
   185 #undef SYM_REF6
   252 #undef SYM_REF6
   186 
   253 
   187 
   254 
   188 
   255 
   189 #endif /*  _ABSYNTAX_HH */
   256 #endif /*  _ABSYNTAX_HH */