absyntax/visitor.hh
changeset 680 df783da3ebe2
parent 350 2c3c4dc34979
equal deleted inserted replaced
679:2f5618c0039a 680:df783da3ebe2
    76 
    76 
    77 #include "absyntax.hh"
    77 #include "absyntax.hh"
    78 
    78 
    79 
    79 
    80 
    80 
    81 #define SYM_LIST(class_name_c, ...)	\
    81 #define SYM_LIST(class_name_c, ...)                                             virtual void *visit(class_name_c *symbol) = 0;
    82   virtual void *visit(class_name_c *symbol) = 0;
    82 #define SYM_TOKEN(class_name_c, ...)                                            virtual void *visit(class_name_c *symbol) = 0;
    83 
    83 #define SYM_REF0(class_name_c, ...)                                             virtual void *visit(class_name_c *symbol) = 0;
    84 #define SYM_TOKEN(class_name_c, ...)	\
    84 #define SYM_REF1(class_name_c, ref1, ...)                                       virtual void *visit(class_name_c *symbol) = 0;
    85   virtual void *visit(class_name_c *symbol) = 0;
    85 #define SYM_REF2(class_name_c, ref1, ref2, ...)                                 virtual void *visit(class_name_c *symbol) = 0;
    86 
    86 #define SYM_REF3(class_name_c, ref1, ref2, ref3, ...)                           virtual void *visit(class_name_c *symbol) = 0;
    87 #define SYM_REF0(class_name_c, ...)	\
    87 #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4, ...)                     virtual void *visit(class_name_c *symbol) = 0;
    88   virtual void *visit(class_name_c *symbol) = 0;
    88 #define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5, ...)               virtual void *visit(class_name_c *symbol) = 0;
    89 
    89 #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6, ...)         virtual void *visit(class_name_c *symbol) = 0;
    90 #define SYM_REF1(class_name_c, ref1, ...)		\
       
    91   virtual void *visit(class_name_c *symbol) = 0;
       
    92 
       
    93 #define SYM_REF2(class_name_c, ref1, ref2, ...)	\
       
    94   virtual void *visit(class_name_c *symbol) = 0;
       
    95 
       
    96 #define SYM_REF3(class_name_c, ref1, ref2, ref3, ...)	\
       
    97   virtual void *visit(class_name_c *symbol) = 0;
       
    98 
       
    99 #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4, ...)	\
       
   100   virtual void *visit(class_name_c *symbol) = 0;
       
   101 
       
   102 #define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5, ...)		\
       
   103   virtual void *visit(class_name_c *symbol) = 0;
       
   104 
       
   105 #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6, ...)	\
       
   106   virtual void *visit(class_name_c *symbol) = 0;
       
   107 
    90 
   108 class visitor_c {
    91 class visitor_c {
   109   public:
    92   public:
   110   #include "absyntax.def"
    93   #include "absyntax.def"
   111 
    94 
   125 
   108 
   126 
   109 
   127 
   110 
   128 
   111 
   129 
   112 
   130 #define SYM_LIST(class_name_c, ...)	\
   113 #define SYM_LIST(class_name_c, ...)                                             virtual void *visit(class_name_c *symbol);
   131   virtual void *visit(class_name_c *symbol);
   114 #define SYM_TOKEN(class_name_c, ...)                                            virtual void *visit(class_name_c *symbol);
   132 
   115 #define SYM_REF0(class_name_c, ...)                                             virtual void *visit(class_name_c *symbol);
   133 #define SYM_TOKEN(class_name_c, ...)	\
   116 #define SYM_REF1(class_name_c, ref1, ...)                                       virtual void *visit(class_name_c *symbol);
   134   virtual void *visit(class_name_c *symbol);
   117 #define SYM_REF2(class_name_c, ref1, ref2, ...)                                 virtual void *visit(class_name_c *symbol);
   135 
   118 #define SYM_REF3(class_name_c, ref1, ref2, ref3, ...)                           virtual void *visit(class_name_c *symbol);
   136 #define SYM_REF0(class_name_c, ...)	\
   119 #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4, ...)                     virtual void *visit(class_name_c *symbol);
   137   virtual void *visit(class_name_c *symbol);
   120 #define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5, ...)               virtual void *visit(class_name_c *symbol);
   138 
   121 #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6, ...)         virtual void *visit(class_name_c *symbol);
   139 #define SYM_REF1(class_name_c, ref1, ...)		\
       
   140   virtual void *visit(class_name_c *symbol);
       
   141 
       
   142 #define SYM_REF2(class_name_c, ref1, ref2, ...)	\
       
   143   virtual void *visit(class_name_c *symbol);
       
   144 
       
   145 #define SYM_REF3(class_name_c, ref1, ref2, ref3, ...)	\
       
   146   virtual void *visit(class_name_c *symbol);
       
   147 
       
   148 #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4, ...)	\
       
   149   virtual void *visit(class_name_c *symbol);
       
   150 
       
   151 #define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5, ...)		\
       
   152   virtual void *visit(class_name_c *symbol);
       
   153 
       
   154 #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6, ...)	\
       
   155   virtual void *visit(class_name_c *symbol);
       
   156 
   122 
   157 
   123 
   158 
   124 
   159 
   125 
   160 
   126 
   162   public:
   128   public:
   163   #include "absyntax.def"
   129   #include "absyntax.def"
   164 
   130 
   165   virtual ~null_visitor_c(void);
   131   virtual ~null_visitor_c(void);
   166 };
   132 };
       
   133 
       
   134 
       
   135 
       
   136 
       
   137 
       
   138 class fcall_visitor_c: public visitor_c {
       
   139   public:
       
   140   virtual void fcall(symbol_c *symbol) = 0;
       
   141 
       
   142   public:
       
   143   #include "absyntax.def"
       
   144 
       
   145 //   virtual ~fcall_visitor_c(void);
       
   146 };
       
   147 
   167 
   148 
   168 
   149 
   169 
   150 
   170 class iterator_visitor_c: public visitor_c {
   151 class iterator_visitor_c: public visitor_c {
   171   protected:
   152   protected:
   174   public:
   155   public:
   175   #include "absyntax.def"
   156   #include "absyntax.def"
   176 
   157 
   177   virtual ~iterator_visitor_c(void);
   158   virtual ~iterator_visitor_c(void);
   178 };
   159 };
       
   160 
       
   161 
       
   162 
       
   163 
       
   164 
       
   165 class fcall_iterator_visitor_c: public iterator_visitor_c {
       
   166   public:
       
   167   virtual void prefix_fcall(symbol_c *symbol);
       
   168   virtual void suffix_fcall(symbol_c *symbol);
       
   169 
       
   170   public:
       
   171   #include "absyntax.def"
       
   172 
       
   173   virtual ~fcall_iterator_visitor_c(void);
       
   174 };
       
   175 
       
   176 
       
   177 
   179 
   178 
   180 
   179 
   181 class search_visitor_c: public visitor_c {
   180 class search_visitor_c: public visitor_c {
   182   protected:
   181   protected:
   183   void *visit_list(list_c *list);
   182   void *visit_list(list_c *list);
   197 #undef SYM_REF3
   196 #undef SYM_REF3
   198 #undef SYM_REF4
   197 #undef SYM_REF4
   199 #undef SYM_REF5
   198 #undef SYM_REF5
   200 #undef SYM_REF6
   199 #undef SYM_REF6
   201 
   200 
       
   201 
       
   202 
       
   203 
       
   204 
       
   205 
       
   206 
       
   207 
   202 #endif /*  _VISITOR_HH */
   208 #endif /*  _VISITOR_HH */