🛰️航天仿真算法库 SpaceAST
0.0.1
载入中...
搜索中...
未找到
Lexer.hpp
浏览该文件的文档.
1
20
21
#pragma once
22
23
#include "AstGlobal.h"
24
#include "AstScript/Scanner.hpp"
25
#include "AstUtil/StringView.hpp"
26
27
28
AST_NAMESPACE_BEGIN
29
30
33
class
Lexer
34
{
35
public
:
37
enum
ETokenType
38
{
39
// 特殊令牌
40
eEndOfFile
,
41
eError
,
42
43
// 字面量
44
eNumber
,
45
eString
,
46
eIdentifier
,
47
eTrue
,
48
eFalse
,
49
eNullLiteral
,
50
51
// 运算符
52
ePlus
,
53
eMinus
,
54
eStar
,
55
eSlash
,
56
ePercent
,
57
eCaret
,
58
eTilde
,
59
60
// 比较运算符
61
eEqual
,
62
eColonEqual
,
63
eEqualAmpersand
,
64
eEqualEqual
,
65
eBang
,
66
eBangEqual
,
67
eLess
,
68
eLessEqual
,
69
eLessLess
,
70
eGreater
,
71
eGreaterEqual
,
72
eGreaterGreater
,
73
eGreaterGreaterGreater
,
74
75
// 逻辑运算符
76
eAmpersand
,
77
ePipe
,
78
eXor
,
79
eAndAnd
,
80
eOrOr
,
81
82
// 括号
83
eLeftParen
,
84
eRightParen
,
85
eLeftBrace
,
86
eRightBrace
,
87
88
eLeftBracket
,
89
eRightBracket
,
90
91
// 其他
92
eComma
,
93
eDot
,
94
eSemicolon
,
95
eColon
,
96
eQuestion
,
97
98
eNewline
,
99
eAt
,
100
101
// 代码块关键字(参照Julia语言)
102
eBegin
,
103
eEnd
,
104
105
// 条件语句关键字
106
eIf
,
107
eElseif
,
108
eElse
,
109
110
// 循环语句关键字
111
eWhile
,
112
eFor
,
113
eIn
,
114
};
115
116
public
:
117
Lexer
(
Scanner
* scanner)
118
: scanner_(scanner)
119
// , line_(1)
120
, current_lexeme_()
121
{}
122
124
ETokenType getNextToken();
125
127
StringView
getCurrentLexeme
()
const
{
return
current_lexeme_; }
128
130
const
char
*
getTokenStart
()
const
{
return
nullptr
; }
131
133
const
char
*
getTokenEnd
()
const
{
return
nullptr
; }
134
136
// size_t getLine() const { return line_; }
137
139
void
skipWhitespace();
140
141
private
:
143
bool
isAlpha(
char
c)
const
;
144
146
bool
isAlphaNumeric(
char
c)
const
;
147
149
bool
isDigit(
char
c)
const
;
150
152
bool
isWhitespace(
char
c)
const
;
153
155
int
parseIdentifier();
156
158
Lexer::ETokenType
scanNumber();
159
161
Lexer::ETokenType
scanString();
162
164
bool
match(
char
expected);
165
167
bool
match(
const
char
* str);
168
170
char
advance();
171
173
char
peek()
const
;
174
176
char
peekNext()
const
;
177
179
bool
atEnd()
const
;
180
181
private
:
182
Scanner
* scanner_;
183
// size_t line_; ///< 当前行号
184
std::string current_lexeme_;
185
};
186
187
AST_NAMESPACE_END
ast::Lexer
词法分析器
定义
Lexer.hpp:34
ast::Lexer::getCurrentLexeme
StringView getCurrentLexeme() const
获取当前令牌的字符串视图
定义
Lexer.hpp:127
ast::Lexer::getTokenEnd
const char * getTokenEnd() const
获取当前令牌的结束位置(始终返回空指针,因为不再存储实际位置)
定义
Lexer.hpp:133
ast::Lexer::getTokenStart
const char * getTokenStart() const
获取当前令牌的起始位置(始终返回空指针,因为不再存储实际位置)
定义
Lexer.hpp:130
ast::Lexer::ETokenType
ETokenType
令牌类型枚举
定义
Lexer.hpp:38
ast::Lexer::eLeftBrace
@ eLeftBrace
{
定义
Lexer.hpp:85
ast::Lexer::eTrue
@ eTrue
布尔值true
定义
Lexer.hpp:47
ast::Lexer::eEqualAmpersand
@ eEqualAmpersand
=& (绑定赋值运算符)
定义
Lexer.hpp:63
ast::Lexer::eEnd
@ eEnd
end
定义
Lexer.hpp:103
ast::Lexer::eLeftParen
@ eLeftParen
(
定义
Lexer.hpp:83
ast::Lexer::eTilde
@ eTilde
~ (按位取反)
定义
Lexer.hpp:58
ast::Lexer::eAt
@ eAt
@ (宏调用前缀)
定义
Lexer.hpp:99
ast::Lexer::eSlash
@ eSlash
/
定义
Lexer.hpp:55
ast::Lexer::eRightBrace
@ eRightBrace
}
定义
Lexer.hpp:86
ast::Lexer::eElseif
@ eElseif
elseif
定义
Lexer.hpp:107
ast::Lexer::eXor
@ eXor
⊻ (按位异或)
定义
Lexer.hpp:78
ast::Lexer::eQuestion
@ eQuestion
?
定义
Lexer.hpp:96
ast::Lexer::ePercent
@ ePercent
%
定义
Lexer.hpp:56
ast::Lexer::eElse
@ eElse
else
定义
Lexer.hpp:108
ast::Lexer::eColonEqual
@ eColonEqual
:= (延迟赋值运算符)
定义
Lexer.hpp:62
ast::Lexer::eAndAnd
@ eAndAnd
&& (逻辑与)
定义
Lexer.hpp:79
ast::Lexer::eNullLiteral
@ eNullLiteral
空值null
定义
Lexer.hpp:49
ast::Lexer::eOrOr
@ eOrOr
|| (逻辑或)
定义
Lexer.hpp:80
ast::Lexer::eLeftBracket
@ eLeftBracket
[
定义
Lexer.hpp:88
ast::Lexer::eNumber
@ eNumber
数字字面量
定义
Lexer.hpp:44
ast::Lexer::eIf
@ eIf
if
定义
Lexer.hpp:106
ast::Lexer::eBang
@ eBang
!
定义
Lexer.hpp:65
ast::Lexer::eWhile
@ eWhile
while
定义
Lexer.hpp:111
ast::Lexer::eBegin
@ eBegin
begin
定义
Lexer.hpp:102
ast::Lexer::eString
@ eString
字符串字面量
定义
Lexer.hpp:45
ast::Lexer::eIdentifier
@ eIdentifier
标识符
定义
Lexer.hpp:46
ast::Lexer::eIn
@ eIn
in (for循环中使用)
定义
Lexer.hpp:113
ast::Lexer::eLessLess
@ eLessLess
<< (逻辑/算术左移)
定义
Lexer.hpp:69
ast::Lexer::ePipe
@ ePipe
| (按位或/逻辑或)
定义
Lexer.hpp:77
ast::Lexer::eRightBracket
@ eRightBracket
]
定义
Lexer.hpp:89
ast::Lexer::eError
@ eError
错误令牌
定义
Lexer.hpp:41
ast::Lexer::eDot
@ eDot
定义
Lexer.hpp:93
ast::Lexer::eStar
@ eStar
定义
Lexer.hpp:54
ast::Lexer::eMinus
@ eMinus
定义
Lexer.hpp:53
ast::Lexer::eLessEqual
@ eLessEqual
<=
定义
Lexer.hpp:68
ast::Lexer::eGreaterGreaterGreater
@ eGreaterGreaterGreater
定义
Lexer.hpp:73
ast::Lexer::eFalse
@ eFalse
布尔值false
定义
Lexer.hpp:48
ast::Lexer::ePlus
@ ePlus
定义
Lexer.hpp:52
ast::Lexer::eEqual
@ eEqual
=
定义
Lexer.hpp:61
ast::Lexer::eSemicolon
@ eSemicolon
;
定义
Lexer.hpp:94
ast::Lexer::eGreater
@ eGreater
定义
Lexer.hpp:70
ast::Lexer::eEqualEqual
@ eEqualEqual
==
定义
Lexer.hpp:64
ast::Lexer::eRightParen
@ eRightParen
)
定义
Lexer.hpp:84
ast::Lexer::eComma
@ eComma
,
定义
Lexer.hpp:92
ast::Lexer::eGreaterGreater
@ eGreaterGreater
定义
Lexer.hpp:72
ast::Lexer::eEndOfFile
@ eEndOfFile
文件结束
定义
Lexer.hpp:40
ast::Lexer::eBangEqual
@ eBangEqual
!=
定义
Lexer.hpp:66
ast::Lexer::eColon
@ eColon
:
定义
Lexer.hpp:95
ast::Lexer::eCaret
@ eCaret
^
定义
Lexer.hpp:57
ast::Lexer::eFor
@ eFor
for
定义
Lexer.hpp:112
ast::Lexer::eNewline
@ eNewline
(换行符)
定义
Lexer.hpp:98
ast::Lexer::eAmpersand
@ eAmpersand
& (按位与/逻辑与)
定义
Lexer.hpp:76
ast::Lexer::eLess
@ eLess
<
定义
Lexer.hpp:67
ast::Lexer::eGreaterEqual
@ eGreaterEqual
>=
定义
Lexer.hpp:71
ast::Scanner
扫描器抽象基类
定义
Scanner.hpp:35
ast::StringViewBasic< char >
src
AstScript
Parser
Lexer.hpp
制作者
1.12.0