1 #ifndef INC_Token_hpp__
2 #define INC_Token_hpp__
3 
4 /* ANTLR Translator Generator
5  * Project led by Terence Parr at http://www.jGuru.com
6  * Software rights: http://www.antlr.org/license.html
7  *
8  * $Id$
9  */
10 
11 #include <antlr/config.hpp>
12 #include <antlr/TokenRefCount.hpp>
13 #include <string>
14 
15 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
16 namespace antlr {
17 #endif
18 
19 struct TokenRef;
20 
21 /** A token is minimally a token type.  Subclasses can add the text matched
22  *  for the token and line info.
23  */
24 class ANTLR_API Token
25 {
26 public:
27 	// constants
28 #ifndef NO_STATIC_CONSTS
29 	static const int MIN_USER_TYPE = 4;
30 	static const int NULL_TREE_LOOKAHEAD = 3;
31 	static const int INVALID_TYPE = 0;
32 	static const int EOF_TYPE = 1;
33 	static const int SKIP = -1;
34 #else
35 	enum {
36 		MIN_USER_TYPE = 4,
37 		NULL_TREE_LOOKAHEAD = 3,
38 		INVALID_TYPE = 0,
39 		EOF_TYPE = 1,
40 		SKIP = -1
41 	};
42 #endif
43 
Token()44 	Token()
45 	: ref(0)
46 	, type(INVALID_TYPE)
47 	{
48 	}
Token(int t)49 	Token(int t)
50 	: ref(0)
51 	, type(t)
52 	{
53 	}
Token(int t,const ANTLR_USE_NAMESPACE (std)string & txt)54 	Token(int t, const ANTLR_USE_NAMESPACE(std)string& txt)
55 	: ref(0)
56 	, type(t)
57 	{
58 		setText(txt);
59 	}
~Token()60 	virtual ~Token()
61 	{
62 	}
63 
64 	virtual int getColumn() const;
65 	virtual int getLine() const;
66 	virtual ANTLR_USE_NAMESPACE(std)string getText() const;
67 	virtual const ANTLR_USE_NAMESPACE(std)string& getFilename() const;
68 	virtual int getType() const;
69 
70 	virtual void setColumn(int c);
71 
72 	virtual void setLine(int l);
73 	virtual void setText(const ANTLR_USE_NAMESPACE(std)string& t);
74 	virtual void setType(int t);
75 
76 	virtual void setFilename( const std::string& file );
77 
78 	virtual ANTLR_USE_NAMESPACE(std)string toString() const;
79 
80 private:
81 	friend struct TokenRef;
82 	TokenRef* ref;
83 
84 	int type; 							///< the type of the token
85 
86 	Token(RefToken other);
87 	Token& operator=(const Token& other);
88 	Token& operator=(RefToken other);
89 
90 	Token(const Token&);
91 };
92 
93 extern ANTLR_API RefToken nullToken;
94 
95 #ifdef NEEDS_OPERATOR_LESS_THAN
96 // RK: Added after 2.7.2 previously it was undefined.
97 // AL: what to return if l and/or r point to nullToken???
operator <(RefToken l,RefToken r)98 inline bool operator<( RefToken l, RefToken r )
99 {
100 	return nullToken == l ? ( nullToken == r ? false : true ) : l->getType() < r->getType();
101 }
102 #endif
103 
104 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
105 }
106 #endif
107 
108 #endif //INC_Token_hpp__
109