00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef HxToken_h
00012 #define HxToken_h
00013
00014 #pragma warning (disable : 4786)
00015
00016 #include "HxStd.h"
00017 #include "HxIoFwd.h"
00018 #include "HxString.h"
00019
00020 #include "HxTokenDef.h"
00021
00022
00023 typedef enum {
00024 HXTEOF = HX_EOFILE,
00025 HXTNONE = HX_NONE,
00026 HXTINT = HX_INT,
00027 HXTREAL = HX_REAL,
00028 HXTIDENT = HX_IDENT,
00029 HXTSTRING = HX_STRING,
00030 HXTMINUS = HX_MINUS,
00031 HXTREGKEY = HX_REGKEY
00032 } HxTokNum;
00033
00034 class HxToken
00035 {
00036 public:
00037 HxToken();
00038 HxToken(int num);
00039 HxToken(int num, uLong l);
00040 HxToken(int num, double d);
00041 HxToken(int num, HxString lex);
00042
00043 int getNum() const;
00044 void setNum(int);
00045
00046 uLong getLong() const;
00047 void setLong(uLong);
00048
00049 double getDouble() const;
00050 void setDouble(double);
00051
00052 STD_OSTREAM& put(STD_OSTREAM&) const;
00053
00054 HxString lexeme() const;
00055 void setLexeme(HxString);
00056
00057 static HxString name(int num);
00058
00059 private:
00060 int _num;
00061 union {
00062 uLong l;
00063 double d;
00064 } _attr;
00065 HxString _lex;
00066 };
00067
00068 inline STD_OSTREAM&
00069 operator<<(STD_OSTREAM& os, const HxToken& t)
00070 {
00071 return t.put(os);
00072 }
00073
00074 inline
00075 HxToken::HxToken() : _num(HXTNONE), _lex("") { _attr.l = 0; }
00076
00077 inline
00078 HxToken::HxToken(int n) : _num(n), _lex("") { _attr.l = 0; }
00079
00080 inline
00081 HxToken::HxToken(int n, uLong l) : _num(n), _lex("") { _attr.l = l; }
00082
00083 inline
00084 HxToken::HxToken(int n, double d) : _num(n), _lex("") { _attr.d = d; }
00085
00086 inline
00087 HxToken::HxToken(int n, HxString l) : _num(n), _lex(l) {}
00088
00089 inline int
00090 HxToken::getNum() const { return _num; }
00091
00092 inline void
00093 HxToken::setNum(int num) { _num = num; }
00094
00095 inline uLong
00096 HxToken::getLong() const { return _attr.l; }
00097
00098 inline void
00099 HxToken::setLong(uLong l) { _attr.l = l; }
00100
00101 inline double
00102 HxToken::getDouble() const { return _attr.d; }
00103
00104 inline void
00105 HxToken::setDouble(double d) { _attr.d = d; }
00106
00107 inline HxString
00108 HxToken::lexeme() const { return _lex; }
00109
00110 inline void
00111 HxToken::setLexeme(HxString s) { _lex = s; }
00112
00113 #endif