absyntax/absyntax.hh
changeset 286 a4f4990d5c66
parent 279 c0453b7f99df
child 287 9df7fcb9bde5
equal deleted inserted replaced
284:64a4504633d4 286:a4f4990d5c66
    68     /*
    68     /*
    69      * Line number for the purposes of error checking
    69      * Line number for the purposes of error checking
    70      */
    70      */
    71     int first_line;
    71     int first_line;
    72     int first_column;
    72     int first_column;
       
    73     const char *first_file;  /* filename referenced by first line/column */
    73     int last_line;
    74     int last_line;
    74     int last_column;
    75     int last_column;
       
    76     const char *last_file;  /* filename referenced by last line/column */
    75 
    77 
    76   public:
    78   public:
    77     /* default constructor */
    79     /* default constructor */
    78     symbol_c(void);
    80     symbol_c(int fl = 0, int fc = 0, const char *ffile = NULL /* filename */,
    79     symbol_c(int fl     /* first_line   */, 
    81              int ll = 0, int lc = 0, const char *lfile = NULL /* filename */
    80              int fc     /* first_column */,
       
    81              int ll = 0 /* last_line    */,
       
    82              int lc = 0 /* last_column  */
       
    83             );
    82             );
    84 
    83 
    85     /* default destructor */
    84     /* default destructor */
    86     /* must be virtual so compiler does not complain... */ 
    85     /* must be virtual so compiler does not complain... */ 
    87     virtual ~symbol_c(void) {return;};
    86     virtual ~symbol_c(void) {return;};
    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