00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #ifndef __ISCANNER_SPEC_HH__
00047 #define __ISCANNER_SPEC_HH__
00048
00049
00050 #include <string>
00051 #include <vector>
00052 using namespace std;
00053
00054 #include "parse_util.hh"
00055
00056 class IReNodeBuilder;
00057 class ReNode;
00058
00070 class IScannerSpec
00071 {
00072 public:
00073
00074 virtual ~IScannerSpec () {};
00075
00081 virtual IReNodeBuilder& getReNodeBuilder () = 0;
00082
00096 virtual void addRegToken (const vector<string> &states,
00097 const string &name, ReNode *regexp,
00098 const string &tokenAction,
00099 const Position &pos)
00100 throw (ParseException) = 0;
00101
00115 virtual void addSkipToken (const vector<string> &states,
00116 const string &name, ReNode *regexp,
00117 const string &tokenAction,
00118 const Position &pos)
00119 throw (ParseException) = 0;
00120
00121
00135 virtual void addMoreToken (const vector<string> &states,
00136 const string &name, ReNode *regexp,
00137 const string &tokenAction,
00138 const Position &pos)
00139 throw (ParseException) = 0;
00140
00154 virtual void addKeywordToken (const vector<string> &states,
00155 const string &name, ReNode *regexp,
00156 const string &tokenAction,
00157 const Position &pos)
00158 throw (ParseException) = 0;
00159
00160
00168 virtual void addSpecialToken (const string &name, const Position &pos)
00169 throw (ParseException) = 0;
00170
00176 virtual void setPreambleCode (const string &block, const Position &pos) = 0;
00177
00183 virtual void addCodeBlock (const string &block, const Position &pos) = 0;
00184
00190 virtual void setInheritance (const string &inheritance,
00191 const Position &pos) = 0;
00192
00196 virtual void setClassName (const string &className) = 0;
00197
00198 #ifdef DEBUG
00199
00204 virtual void dump (ostream &os) const = 0;
00205 #endif
00206 };
00207
00208 #endif