-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTokenTypes.java
More file actions
57 lines (54 loc) · 2.23 KB
/
Copy pathTokenTypes.java
File metadata and controls
57 lines (54 loc) · 2.23 KB
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
* Типы токенов (лексем) для языка.
* Каждый тип соответствует определенной конструкции в исходном коде.
*/
enum TokType {
VOID, // ключевое слово 'void'
INT, // ключевое слово 'int'
RETURN, // ключевое слово 'return'
IDENT, // идентификатор (имя переменной или функции)
NUMBER, // целочисленная константа
LPAR, // левая круглая скобка '('
RPAR, // правая круглая скобка ')'
LBRACE, // левая фигурная скобка '{'
RBRACE, // правая фигурная скобка '}'
SEMI, // точка с запятой ';'
COMMA, // запятая ','
PLUS, // оператор сложения '+'
MINUS, // оператор вычитания '-'
END // маркер конца входного потока
}
/**
* Класс, представляющий токен (лексему).
* Хранит тип токена, его значение (если есть) и позицию в исходном коде.
*/
class Tok {
TokType kind; // тип токена
Object val; // значение токена (для чисел и идентификаторов)
int ln; // номер строки в исходном коде
int pos; // позиция в строке
/**
* Конструктор токена.
* @param kind тип токена
* @param val значение токена (может быть null)
* @param ln номер строки
* @param pos позиция в строке
*/
public Tok(TokType kind, Object val, int ln, int pos) {
this.kind = kind;
this.val = val;
this.ln = ln;
this.pos = pos;
}
/**
* Строковое представление токена для отладки.
* @return строка вида "<ТИП 'значение' @строка:позиция>"
*/
@Override
public String toString() {
return String.format("<%s %s @%d:%d>",
kind.name(),
val != null ? "'" + val + "'" : "null",
ln, pos);
}
}