-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlexer.cpp
34 lines (33 loc) · 811 Bytes
/
lexer.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "lexer.h"
Token Lexer::lex(It &first, It last) const {
while (std::isspace(*first) && first != last) {
first++;
}
if (first == last) {
return Token::END_OF_PROGRAM;
}
if (*first >= 'A' && *first <= 'z') {
return Token::CHAR;
}
if (*first >= '0' && *first <= '9') {
return Token::DIGIT;
}
switch (*first) {
case '+':
return Token::OR;
case '*':
return Token::GREEDY;
case '.':
return Token::ANY;
case '(':
return Token::L_PAREN;
case ')':
return Token::R_PAREN;
case '{':
return Token::L_BRACE;
case '}':
return Token::R_BRACE;
default:
return Token::UNKNOWN_LEXEME;
}
}