-
Notifications
You must be signed in to change notification settings - Fork 0
/
lexer.hpp
110 lines (101 loc) · 2.49 KB
/
lexer.hpp
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#pragma once
#include <vector>
#include <string>
#include <deque>
#include <stdexcept>
#include <iostream>
namespace Dima
{
enum TokenType //объявление токенов
{
WHITESPACE, //служебный токен (нет в токенизированной строке)
IDENTIFIER, //переменная
INTEGER_LITERAL, //целое число
SPECIAL_SEQUENCE, //служебный (для записи всех спецсимволов)
DISJOINT, //дизъюнкция
CONJUNCT, //конъюнкция
RESISTANCE, //отрицание
POWER, //степень
LBRAC, //скобки//
RBRAC, // //
PLUS,
MULTIPLY,
EQUAL,
GREATER,
//теперь объявляются нетерминальные символы//
BLACKSPACE, //рабочий символ
DNF, //ДНФ
DNF_TMP, //вспомогательный нетерминал для ДНФ
CONJ, //конъюнкция предикатов
CONJ_TMP,
PREDICATE, //предикат
POLYNOM,
ORDER,
SUM,
MULT,
MULT_TMP, //вспомогательный нетерминал для умножения
CONST,
DEGREE,
END,
EPSILON
};
static const char* sTokenTypeStrings[] =
{
"WHITESPACE",
"IDENTIFIER",
"INTEGER_LITERAL",
"SPECIAL_SEQUENCE",
"DISJOINT",
"CONJUNCT",
"RESISTANCE",
"POWER",
"LBRAC",
"RBRAC",
"PLUS",
"MULTIPLY",
"EQUAL",
"GREATER",
"BLACKSPACE",
"DNF",
"DNF_TMP",
"CONJ",
"CONJ_TMP",
"PREDICATE",
"POLYNOM",
"ORDER",
"SUM",
"MULT",
"MULT_TMP",
"CONST",
"DEGREE",
"END",
"EPSILON"
};
class Token
{
private:
enum TokenType _mType{WHITESPACE}; //тип токена
std::string _mText; //текст в токене
bool _mTerm{1}; //всегда терминал, т.к. во вводе
public:
Token(enum TokenType type);
Token();
void setText(std::string newText);
void setType(enum TokenType newType);
void textPush(char symbol);
void textErase();
const std::string getText() const;
const enum TokenType getType() const;
};
class Tokenizer
{
private:
Token _cToken; //текущий токен
std::vector<Token> _tokens; //токенизированный ввод
void endToken(); //добавление токена в вектор после обработки
public:
Tokenizer(const std::string& Line); //токенизация ввода
std::vector<Token> get_tokens(); //возврат токенизированного ввода
void debugPrint();
};
}