00001 #ifndef INC_Token_hpp__
00002 #define INC_Token_hpp__
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <antlr/config.hpp>
00012 #include <antlr/TokenRefCount.hpp>
00013 #include <string>
00014
00015 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00016 namespace antlr {
00017 #endif
00018
00019 struct TokenRef;
00020
00024 class ANTLR_API Token
00025 {
00026 public:
00027
00028 #ifndef NO_STATIC_CONSTS
00029 static const int MIN_USER_TYPE = 4;
00030 static const int NULL_TREE_LOOKAHEAD = 3;
00031 static const int INVALID_TYPE = 0;
00032 static const int EOF_TYPE = 1;
00033 static const int SKIP = -1;
00034 #else
00035 enum {
00036 MIN_USER_TYPE = 4,
00037 NULL_TREE_LOOKAHEAD = 3,
00038 INVALID_TYPE = 0,
00039 EOF_TYPE = 1,
00040 SKIP = -1
00041 };
00042 #endif
00043
00044 Token()
00045 : ref(0)
00046 , type(INVALID_TYPE)
00047 {
00048 }
00049 Token(int t)
00050 : ref(0)
00051 , type(t)
00052 {
00053 }
00054 Token(int t, const ANTLR_USE_NAMESPACE(std)string& txt)
00055 : ref(0)
00056 , type(t)
00057 {
00058 setText(txt);
00059 }
00060 virtual ~Token()
00061 {
00062 }
00063
00064 virtual int getColumn() const;
00065 virtual int getLine() const;
00066 virtual ANTLR_USE_NAMESPACE(std)string getText() const;
00067 virtual const ANTLR_USE_NAMESPACE(std)string& getFilename() const;
00068 virtual int getType() const;
00069
00070 virtual void setColumn(int c);
00071
00072 virtual void setLine(int l);
00073 virtual void setText(const ANTLR_USE_NAMESPACE(std)string& t);
00074 virtual void setType(int t);
00075
00076 virtual void setFilename( const std::string& file );
00077
00078 virtual ANTLR_USE_NAMESPACE(std)string toString() const;
00079
00080 private:
00081 friend struct TokenRef;
00082 TokenRef* ref;
00083
00084 int type;
00085
00086 Token(RefToken other);
00087 Token& operator=(const Token& other);
00088 Token& operator=(RefToken other);
00089
00090 Token(const Token&);
00091 };
00092
00093 extern ANTLR_API RefToken nullToken;
00094
00095 #ifdef NEEDS_OPERATOR_LESS_THAN
00096
00097
00098 inline bool operator<( RefToken l, RefToken r )
00099 {
00100 return nullToken == l ? ( nullToken == r ? false : true ) : l->getType() < r->getType();
00101 }
00102 #endif
00103
00104 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00105 }
00106 #endif
00107
00108 #endif //INC_Token_hpp__