94 public: |
93 public: |
95 /* the value of the symbol. */ |
94 /* the value of the symbol. */ |
96 const char *value; |
95 const char *value; |
97 |
96 |
98 public: |
97 public: |
99 token_c(const char *value, int fl = 0, int fc = 0, int ll = 0, int lc = 0); |
98 token_c(const char *value, |
|
99 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, |
|
100 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */ |
|
101 ); |
100 }; |
102 }; |
101 |
103 |
102 |
104 |
103 /* a list of symbols... */ |
105 /* a list of symbols... */ |
104 class list_c: public symbol_c { |
106 class list_c: public symbol_c { |
105 public: |
107 public: |
106 int n; |
108 int n; |
107 symbol_c **elements; |
109 symbol_c **elements; |
108 |
110 |
109 public: |
111 public: |
110 list_c(int fl = 0, int fc = 0, int ll = 0, int lc = 0); |
112 list_c(int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, |
111 list_c(symbol_c *elem, int fl = 0, int fc = 0, int ll = 0, int lc = 0); |
113 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */ |
|
114 ); |
|
115 |
|
116 list_c(symbol_c *elem, |
|
117 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, |
|
118 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */ |
|
119 ); |
112 /* insert a new element */ |
120 /* insert a new element */ |
113 virtual void add_element(symbol_c *elem); |
121 virtual void add_element(symbol_c *elem); |
114 }; |
122 }; |
115 |
123 |
116 |
124 |
117 |
125 |
118 |
126 |
119 #define SYM_LIST(class_name_c) \ |
127 #define SYM_LIST(class_name_c) \ |
120 class class_name_c: public list_c { \ |
128 class class_name_c: public list_c { \ |
121 public: \ |
129 public: \ |
122 class_name_c(int fl = 0, int fc = 0, int ll = 0, int lc = 0); \ |
130 class_name_c( \ |
123 class_name_c(symbol_c *elem, int fl = 0, int fc = 0, int ll = 0, int lc = 0); \ |
131 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, \ |
124 virtual void *accept(visitor_c &visitor); \ |
132 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */); \ |
125 }; |
133 class_name_c(symbol_c *elem, \ |
126 |
134 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, \ |
127 |
135 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */); \ |
128 #define SYM_TOKEN(class_name_c) \ |
136 virtual void *accept(visitor_c &visitor); \ |
129 class class_name_c: public token_c { \ |
137 }; |
130 public: \ |
138 |
131 class_name_c(const char *value, int fl = 0, int fc = 0, int ll = 0, int lc = 0); \ |
139 |
132 virtual void *accept(visitor_c &visitor); \ |
140 #define SYM_TOKEN(class_name_c) \ |
133 }; |
141 class class_name_c: public token_c { \ |
134 |
142 public: \ |
135 |
143 class_name_c(const char *value, \ |
136 #define SYM_REF0(class_name_c) \ |
144 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, \ |
137 class class_name_c: public symbol_c { \ |
145 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */); \ |
138 public: \ |
146 virtual void *accept(visitor_c &visitor); \ |
139 class_name_c(int fl = 0, int fc = 0, \ |
147 }; |
140 int ll = 0, int lc = 0); \ |
148 |
141 virtual void *accept(visitor_c &visitor); \ |
149 |
142 }; |
150 #define SYM_REF0(class_name_c) \ |
143 |
151 class class_name_c: public symbol_c { \ |
144 |
152 public: \ |
145 #define SYM_REF1(class_name_c, ref1) \ |
153 class_name_c( \ |
146 class class_name_c: public symbol_c { \ |
154 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, \ |
147 public: \ |
155 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */); \ |
148 symbol_c *ref1; \ |
156 virtual void *accept(visitor_c &visitor); \ |
149 public: \ |
157 }; |
150 class_name_c(symbol_c *ref1, \ |
158 |
151 int fl = 0, int fc = 0, \ |
159 |
152 int ll = 0, int lc = 0); \ |
160 #define SYM_REF1(class_name_c, ref1) \ |
153 virtual void *accept(visitor_c &visitor); \ |
161 class class_name_c: public symbol_c { \ |
154 }; |
162 public: \ |
155 |
163 symbol_c *ref1; \ |
156 |
164 public: \ |
157 #define SYM_REF2(class_name_c, ref1, ref2) \ |
165 class_name_c(symbol_c *ref1, \ |
158 class class_name_c: public symbol_c { \ |
166 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, \ |
159 public: \ |
167 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */); \ |
160 symbol_c *ref1; \ |
168 virtual void *accept(visitor_c &visitor); \ |
161 symbol_c *ref2; \ |
169 }; |
162 public: \ |
170 |
163 class_name_c(symbol_c *ref1, \ |
171 |
164 symbol_c *ref2 = NULL, \ |
172 #define SYM_REF2(class_name_c, ref1, ref2) \ |
165 int fl = 0, int fc = 0, \ |
173 class class_name_c: public symbol_c { \ |
166 int ll = 0, int lc = 0); \ |
174 public: \ |
167 virtual void *accept(visitor_c &visitor); \ |
175 symbol_c *ref1; \ |
168 }; |
176 symbol_c *ref2; \ |
169 |
177 public: \ |
170 |
178 class_name_c(symbol_c *ref1, \ |
171 #define SYM_REF3(class_name_c, ref1, ref2, ref3) \ |
179 symbol_c *ref2 = NULL, \ |
172 class class_name_c: public symbol_c { \ |
180 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, \ |
173 public: \ |
181 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */); \ |
174 symbol_c *ref1; \ |
182 virtual void *accept(visitor_c &visitor); \ |
175 symbol_c *ref2; \ |
183 }; |
176 symbol_c *ref3; \ |
184 |
177 public: \ |
185 |
178 class_name_c(symbol_c *ref1, \ |
186 #define SYM_REF3(class_name_c, ref1, ref2, ref3) \ |
179 symbol_c *ref2, \ |
187 class class_name_c: public symbol_c { \ |
180 symbol_c *ref3, \ |
188 public: \ |
181 int fl = 0, int fc = 0, \ |
189 symbol_c *ref1; \ |
182 int ll = 0, int lc = 0); \ |
190 symbol_c *ref2; \ |
183 virtual void *accept(visitor_c &visitor); \ |
191 symbol_c *ref3; \ |
184 }; |
192 public: \ |
185 |
193 class_name_c(symbol_c *ref1, \ |
186 |
194 symbol_c *ref2, \ |
187 #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4) \ |
195 symbol_c *ref3, \ |
188 class class_name_c: public symbol_c { \ |
196 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, \ |
189 public: \ |
197 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */); \ |
190 symbol_c *ref1; \ |
198 virtual void *accept(visitor_c &visitor); \ |
191 symbol_c *ref2; \ |
199 }; |
192 symbol_c *ref3; \ |
200 |
193 symbol_c *ref4; \ |
201 |
194 public: \ |
202 #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4) \ |
195 class_name_c(symbol_c *ref1, \ |
203 class class_name_c: public symbol_c { \ |
196 symbol_c *ref2, \ |
204 public: \ |
197 symbol_c *ref3, \ |
205 symbol_c *ref1; \ |
198 symbol_c *ref4 = NULL, \ |
206 symbol_c *ref2; \ |
199 int fl = 0, int fc = 0, \ |
207 symbol_c *ref3; \ |
200 int ll = 0, int lc = 0); \ |
208 symbol_c *ref4; \ |
201 virtual void *accept(visitor_c &visitor); \ |
209 public: \ |
202 }; |
210 class_name_c(symbol_c *ref1, \ |
203 |
211 symbol_c *ref2, \ |
204 |
212 symbol_c *ref3, \ |
205 #define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5) \ |
213 symbol_c *ref4 = NULL, \ |
206 class class_name_c: public symbol_c { \ |
214 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, \ |
207 public: \ |
215 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */); \ |
208 symbol_c *ref1; \ |
216 virtual void *accept(visitor_c &visitor); \ |
209 symbol_c *ref2; \ |
217 }; |
210 symbol_c *ref3; \ |
218 |
211 symbol_c *ref4; \ |
219 |
212 symbol_c *ref5; \ |
220 #define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5) \ |
213 public: \ |
221 class class_name_c: public symbol_c { \ |
214 class_name_c(symbol_c *ref1, \ |
222 public: \ |
215 symbol_c *ref2, \ |
223 symbol_c *ref1; \ |
216 symbol_c *ref3, \ |
224 symbol_c *ref2; \ |
217 symbol_c *ref4, \ |
225 symbol_c *ref3; \ |
218 symbol_c *ref5, \ |
226 symbol_c *ref4; \ |
219 int fl = 0, int fc = 0, \ |
227 symbol_c *ref5; \ |
220 int ll = 0, int lc = 0); \ |
228 public: \ |
221 virtual void *accept(visitor_c &visitor); \ |
229 class_name_c(symbol_c *ref1, \ |
222 }; |
230 symbol_c *ref2, \ |
223 |
231 symbol_c *ref3, \ |
224 |
232 symbol_c *ref4, \ |
225 #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6) \ |
233 symbol_c *ref5, \ |
226 class class_name_c: public symbol_c { \ |
234 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, \ |
227 public: \ |
235 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */); \ |
228 symbol_c *ref1; \ |
236 virtual void *accept(visitor_c &visitor); \ |
229 symbol_c *ref2; \ |
237 }; |
230 symbol_c *ref3; \ |
238 |
231 symbol_c *ref4; \ |
239 |
232 symbol_c *ref5; \ |
240 #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6) \ |
233 symbol_c *ref6; \ |
241 class class_name_c: public symbol_c { \ |
234 public: \ |
242 public: \ |
235 class_name_c(symbol_c *ref1, \ |
243 symbol_c *ref1; \ |
236 symbol_c *ref2, \ |
244 symbol_c *ref2; \ |
237 symbol_c *ref3, \ |
245 symbol_c *ref3; \ |
238 symbol_c *ref4, \ |
246 symbol_c *ref4; \ |
239 symbol_c *ref5, \ |
247 symbol_c *ref5; \ |
240 symbol_c *ref6 = NULL, \ |
248 symbol_c *ref6; \ |
241 int fl = 0, int fc = 0, \ |
249 public: \ |
242 int ll = 0, int lc = 0); \ |
250 class_name_c(symbol_c *ref1, \ |
243 virtual void *accept(visitor_c &visitor); \ |
251 symbol_c *ref2, \ |
|
252 symbol_c *ref3, \ |
|
253 symbol_c *ref4, \ |
|
254 symbol_c *ref5, \ |
|
255 symbol_c *ref6 = NULL, \ |
|
256 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, \ |
|
257 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */); \ |
|
258 virtual void *accept(visitor_c &visitor); \ |
244 }; |
259 }; |
245 |
260 |
246 |
261 |
247 #include "absyntax.def" |
262 #include "absyntax.def" |
248 |
263 |