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: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/antlr/Token.hpp#2 $ |
---|
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 | |
---|
44 | Token() |
---|
45 | : ref(0) |
---|
46 | , type(INVALID_TYPE) |
---|
47 | { |
---|
48 | } |
---|
49 | Token(int t) |
---|
50 | : ref(0) |
---|
51 | , type(t) |
---|
52 | { |
---|
53 | } |
---|
54 | Token(int t, const ANTLR_USE_NAMESPACE(std)string& txt) |
---|
55 | : ref(0) |
---|
56 | , type(t) |
---|
57 | { |
---|
58 | setText(txt); |
---|
59 | } |
---|
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??? |
---|
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__ |
---|