diff options
Diffstat (limited to '')
-rw-r--r-- | src/token.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/token.cpp b/src/token.cpp new file mode 100644 index 0000000..d7fbe88 --- /dev/null +++ b/src/token.cpp | |||
@@ -0,0 +1,70 @@ | |||
1 | #include "token.h" | ||
2 | |||
3 | #include "number.h" | ||
4 | #include <bu/formatter.h> | ||
5 | #include <bu/string.h> | ||
6 | |||
7 | Token::Token( Type eType ) : | ||
8 | eType( eType ), | ||
9 | sVal( 0 ) | ||
10 | { | ||
11 | } | ||
12 | |||
13 | Token::Token( Type eType, Bu::String *s ) : | ||
14 | eType( eType ), | ||
15 | sVal( s ) | ||
16 | { | ||
17 | } | ||
18 | |||
19 | Token::Token( Type eType, Number *n ) : | ||
20 | eType( eType ), | ||
21 | nVal( n ) | ||
22 | { | ||
23 | } | ||
24 | |||
25 | Token::Token( const Token &rSrc ) : | ||
26 | eType( rSrc.eType ), | ||
27 | sVal( rSrc.sVal ) | ||
28 | { | ||
29 | Token &rMod = const_cast<Token &>(rSrc); | ||
30 | rMod.sVal = 0; | ||
31 | } | ||
32 | |||
33 | Token::~Token() | ||
34 | { | ||
35 | switch( eType ) | ||
36 | { | ||
37 | case tNumber: | ||
38 | delete nVal; | ||
39 | break; | ||
40 | |||
41 | case tString: | ||
42 | case tCommand: | ||
43 | delete sVal; | ||
44 | break; | ||
45 | |||
46 | default: | ||
47 | break; | ||
48 | } | ||
49 | } | ||
50 | |||
51 | Bu::Formatter &operator<<( Bu::Formatter &f, Token::Type eType ) | ||
52 | { | ||
53 | switch( eType ) | ||
54 | { | ||
55 | case Token::tNumber: return f << "num"; | ||
56 | case Token::tString: return f << "str"; | ||
57 | case Token::tCommand: return f << "cmd"; | ||
58 | case Token::tPlus: return f << "+"; | ||
59 | case Token::tMinus: return f << "-"; | ||
60 | case Token::tDivide: return f << "/"; | ||
61 | case Token::tMultiply: return f << "*"; | ||
62 | case Token::tOpenParen: return f << "("; | ||
63 | case Token::tCloseParen: return f << ")"; | ||
64 | case Token::tEndOfLine: return f << "eol"; | ||
65 | case Token::tEndOfInput: return f << "eoi"; | ||
66 | |||
67 | default: return f << "???"; | ||
68 | } | ||
69 | } | ||
70 | |||