absyntax/absyntax.hh
changeset 69 41cb5b80416e
parent 0 fb772792efd1
child 261 db2ad6541d92
--- a/absyntax/absyntax.hh	Tue Oct 23 10:33:09 2007 +0200
+++ b/absyntax/absyntax.hh	Tue Oct 23 10:35:58 2007 +0200
@@ -51,7 +51,6 @@
 
 
 class symbol_c; // forward declaration
-//extern symbol_c *tree_root;
 
 
 
@@ -62,12 +61,19 @@
     /*
      * Line number for the purposes of error checking
      */
-    long lineno;
+    int first_line;
+    int first_column;
+    int last_line;
+    int last_column;
 
   public:
     /* default constructor */
     symbol_c(void);
-    symbol_c(long lineno);
+    symbol_c(int fl     /* first_line   */, 
+             int fc     /* first_column */,
+             int ll = 0 /* last_line    */,
+             int lc = 0 /* last_column  */
+            );
 
     /* default destructor */
     /* must be virtual so compiler does not complain... */ 
@@ -83,7 +89,7 @@
     const char *value;
 
   public:
-    token_c(const char *value);
+    token_c(const char *value, int fl = 0, int fc = 0, int ll = 0, int lc = 0);
 };
 
 
@@ -94,8 +100,8 @@
     symbol_c **elements;
 
   public:
-    list_c(void);
-    list_c(symbol_c *elem);
+    list_c(int fl = 0, int fc = 0, int ll = 0, int lc = 0);
+    list_c(symbol_c *elem, int fl = 0, int fc = 0, int ll = 0, int lc = 0);
      /* insert a new element */
     virtual void add_element(symbol_c *elem);
 };
@@ -103,37 +109,71 @@
 
 
 
-#define SYM_LIST(class_name_c)			\
-class class_name_c:	public list_c {		\
-  public:					\
-    virtual void *accept(visitor_c &visitor);	\
-};
-
-
-#define SYM_TOKEN(class_name_c)			\
-class class_name_c: 	public token_c {	\
-  public:					\
-    class_name_c(const char *value);			\
-    virtual void *accept(visitor_c &visitor);	\
+#define SYM_LIST(class_name_c)								\
+class class_name_c:	public list_c {							\
+  public:										\
+    class_name_c(int fl = 0, int fc = 0, int ll = 0, int lc = 0);			\
+    class_name_c(symbol_c *elem, int fl = 0, int fc = 0, int ll = 0, int lc = 0);	\
+    virtual void *accept(visitor_c &visitor);						\
+};
+
+
+#define SYM_TOKEN(class_name_c)								\
+class class_name_c: 	public token_c {						\
+  public:										\
+    class_name_c(const char *value, int fl = 0, int fc = 0, int ll = 0, int lc = 0);	\
+    virtual void *accept(visitor_c &visitor);						\
 };
 
 
 #define SYM_REF0(class_name_c)			\
 class class_name_c: public symbol_c {		\
   public:					\
+    class_name_c(int fl = 0, int fc = 0, 	\
+		 int ll = 0, int lc = 0);	\
     virtual void *accept(visitor_c &visitor);	\
 };
 
 
-#define SYM_REF2(class_name_c, ref1, ref2)	\
-class class_name_c: public symbol_c {		\
-  public:					\
-    symbol_c *ref1;				\
-    symbol_c *ref2;				\
-  public:					\
-    class_name_c(symbol_c *ref1,		\
-		 symbol_c *ref2 = NULL);	\
-    virtual void *accept(visitor_c &visitor);	\
+#define SYM_REF1(class_name_c, ref1)			\
+class class_name_c: public symbol_c {			\
+  public:						\
+    symbol_c *ref1;					\
+  public:						\
+    class_name_c(symbol_c *ref1,			\
+		 int fl = 0, int fc = 0, 		\
+		 int ll = 0, int lc = 0);		\
+    virtual void *accept(visitor_c &visitor);		\
+};
+
+
+#define SYM_REF2(class_name_c, ref1, ref2)		\
+class class_name_c: public symbol_c {			\
+  public:						\
+    symbol_c *ref1;					\
+    symbol_c *ref2;					\
+  public:						\
+    class_name_c(symbol_c *ref1,			\
+		 symbol_c *ref2 = NULL,			\
+		 int fl = 0, int fc = 0, 		\
+		 int ll = 0, int lc = 0);		\
+    virtual void *accept(visitor_c &visitor);		\
+};
+
+
+#define SYM_REF3(class_name_c, ref1, ref2, ref3)	\
+class class_name_c: public symbol_c {			\
+  public:						\
+    symbol_c *ref1;					\
+    symbol_c *ref2;					\
+    symbol_c *ref3;					\
+  public:						\
+    class_name_c(symbol_c *ref1,			\
+		 symbol_c *ref2,			\
+		 symbol_c *ref3,			\
+		 int fl = 0, int fc = 0, 		\
+		 int ll = 0, int lc = 0);		\
+    virtual void *accept(visitor_c &visitor);		\
 };
 
 
@@ -148,8 +188,30 @@
     class_name_c(symbol_c *ref1,			\
 		 symbol_c *ref2,			\
 		 symbol_c *ref3,			\
-		 symbol_c *ref4 = NULL);		\
-    virtual void *accept(visitor_c &visitor);		\
+		 symbol_c *ref4 = NULL,			\
+		 int fl = 0, int fc = 0, 		\
+		 int ll = 0, int lc = 0);		\
+    virtual void *accept(visitor_c &visitor);		\
+};
+
+
+#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5)		\
+class class_name_c: public symbol_c {					\
+  public:								\
+    symbol_c *ref1;							\
+    symbol_c *ref2;							\
+    symbol_c *ref3;							\
+    symbol_c *ref4;							\
+    symbol_c *ref5;							\
+  public:								\
+    class_name_c(symbol_c *ref1,					\
+		 symbol_c *ref2,					\
+		 symbol_c *ref3,					\
+		 symbol_c *ref4,					\
+		 symbol_c *ref5,					\
+		 int fl = 0, int fc = 0, 				\
+		 int ll = 0, int lc = 0);				\
+    virtual void *accept(visitor_c &visitor);				\
 };
 
 
@@ -168,7 +230,9 @@
 		 symbol_c *ref3,					\
 		 symbol_c *ref4,					\
 		 symbol_c *ref5,					\
-		 symbol_c *ref6 = NULL);		\
+		 symbol_c *ref6 = NULL,					\
+		 int fl = 0, int fc = 0, 				\
+		 int ll = 0, int lc = 0);				\
     virtual void *accept(visitor_c &visitor);				\
 };
 
@@ -180,8 +244,11 @@
 #undef SYM_LIST
 #undef SYM_TOKEN
 #undef SYM_REF0
+#undef SYM_REF1
 #undef SYM_REF2
+#undef SYM_REF3
 #undef SYM_REF4
+#undef SYM_REF5
 #undef SYM_REF6