spudplate
Template scaffolding compiler for spudlang .spud files
Loading...
Searching...
No Matches
token.h
1#ifndef SPUDPLATE_TOKEN_H
2#define SPUDPLATE_TOKEN_H
3
4#include <string>
5
6namespace spudplate {
7
9enum class TokenType {
10 // Keywords
11 ASK,
12 LET,
13 MKDIR,
14 FILE,
15 FROM,
16 CONTENT,
17 WHEN,
18 REPEAT,
19 IF,
20 END,
21 VERBATIM,
22 APPEND,
23 MODE,
24 AS,
25 DEFAULT,
26 OPTIONS,
27 COPY,
28 INTO,
29 INCLUDE,
30 RUN,
31 IN,
32 TIMEOUT,
33
34 // Logical operators (keywords)
35 AND,
36 OR,
37 NOT,
38
39 // Type keywords
40 STRING_TYPE,
41 BOOL_TYPE,
42 INT_TYPE,
43
44 // Literals
45 STRING_LITERAL,
46 INTEGER_LITERAL,
47 TRUE,
48 FALSE,
49 IDENTIFIER,
50
51 // Comparison operators
52 EQUALS,
53 NOT_EQUALS,
54 GREATER,
55 LESS,
56 GREATER_EQUAL,
57 LESS_EQUAL,
58
59 // Arithmetic operators
60 PLUS,
61 MINUS,
62 STAR,
63 SLASH,
64
65 // Assignment
66 ASSIGN,
67
68 // Structure
69 NEWLINE,
70 LPAREN,
71 RPAREN,
72 LBRACE,
73 RBRACE,
74 DOT,
75 COMMA,
76 AT,
77
78 // Special
79 EOF_TOKEN,
80 ERROR,
81};
82
84struct Token {
85 TokenType type;
86 std::string value;
87 int line;
88 int column;
89
91 Token() : type(TokenType::EOF_TOKEN), line(0), column(0) {}
92
94 Token(TokenType type, std::string value, int line, int column)
95 : type(type), value(std::move(value)), line(line), column(column) {}
96};
97
99inline std::string tokenTypeToString(TokenType type) {
100 switch (type) {
101 case TokenType::ASK:
102 return "ASK";
103 case TokenType::LET:
104 return "LET";
105 case TokenType::MKDIR:
106 return "MKDIR";
107 case TokenType::FILE:
108 return "FILE";
109 case TokenType::FROM:
110 return "FROM";
111 case TokenType::CONTENT:
112 return "CONTENT";
113 case TokenType::WHEN:
114 return "WHEN";
115 case TokenType::REPEAT:
116 return "REPEAT";
117 case TokenType::IF:
118 return "IF";
119 case TokenType::END:
120 return "END";
121 case TokenType::VERBATIM:
122 return "VERBATIM";
123 case TokenType::APPEND:
124 return "APPEND";
125 case TokenType::MODE:
126 return "MODE";
127 case TokenType::AS:
128 return "AS";
129 case TokenType::DEFAULT:
130 return "DEFAULT";
131 case TokenType::OPTIONS:
132 return "OPTIONS";
133 case TokenType::COPY:
134 return "COPY";
135 case TokenType::INTO:
136 return "INTO";
137 case TokenType::INCLUDE:
138 return "INCLUDE";
139 case TokenType::RUN:
140 return "RUN";
141 case TokenType::IN:
142 return "IN";
143 case TokenType::TIMEOUT:
144 return "TIMEOUT";
145 case TokenType::AND:
146 return "AND";
147 case TokenType::OR:
148 return "OR";
149 case TokenType::NOT:
150 return "NOT";
151 case TokenType::STRING_TYPE:
152 return "STRING_TYPE";
153 case TokenType::BOOL_TYPE:
154 return "BOOL_TYPE";
155 case TokenType::INT_TYPE:
156 return "INT_TYPE";
157 case TokenType::STRING_LITERAL:
158 return "STRING_LITERAL";
159 case TokenType::INTEGER_LITERAL:
160 return "INTEGER_LITERAL";
161 case TokenType::TRUE:
162 return "TRUE";
163 case TokenType::FALSE:
164 return "FALSE";
165 case TokenType::IDENTIFIER:
166 return "IDENTIFIER";
167 case TokenType::EQUALS:
168 return "EQUALS";
169 case TokenType::NOT_EQUALS:
170 return "NOT_EQUALS";
171 case TokenType::GREATER:
172 return "GREATER";
173 case TokenType::LESS:
174 return "LESS";
175 case TokenType::GREATER_EQUAL:
176 return "GREATER_EQUAL";
177 case TokenType::LESS_EQUAL:
178 return "LESS_EQUAL";
179 case TokenType::PLUS:
180 return "PLUS";
181 case TokenType::MINUS:
182 return "MINUS";
183 case TokenType::STAR:
184 return "STAR";
185 case TokenType::SLASH:
186 return "SLASH";
187 case TokenType::ASSIGN:
188 return "ASSIGN";
189 case TokenType::NEWLINE:
190 return "NEWLINE";
191 case TokenType::LPAREN:
192 return "LPAREN";
193 case TokenType::RPAREN:
194 return "RPAREN";
195 case TokenType::LBRACE:
196 return "LBRACE";
197 case TokenType::RBRACE:
198 return "RBRACE";
199 case TokenType::DOT:
200 return "DOT";
201 case TokenType::COMMA:
202 return "COMMA";
203 case TokenType::AT:
204 return "AT";
205 case TokenType::EOF_TOKEN:
206 return "EOF_TOKEN";
207 case TokenType::ERROR:
208 return "ERROR";
209 }
210 return "UNKNOWN";
211}
212
213} // namespace spudplate
214
215#endif // SPUDPLATE_TOKEN_H
A single lexical token with source location.
Definition token.h:84
Token()
Default-construct an EOF token at position 0:0.
Definition token.h:91
int line
1-based source line number.
Definition token.h:87
int column
1-based source column number.
Definition token.h:88
std::string value
The raw text of the token (empty for punctuation).
Definition token.h:86
TokenType type
The token's classification.
Definition token.h:85
Token(TokenType type, std::string value, int line, int column)
Construct a token with explicit type, lexeme, and source position.
Definition token.h:94