🛰️航天仿真算法库 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
28AST_NAMESPACE_BEGIN
29
30
33class Lexer
34{
35public:
115
116public:
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
141private:
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
181private:
182 Scanner* scanner_;
183 // size_t line_; ///< 当前行号
184 std::string current_lexeme_;
185};
186
187AST_NAMESPACE_END
词法分析器
定义 Lexer.hpp:34
StringView getCurrentLexeme() const
获取当前令牌的字符串视图
定义 Lexer.hpp:127
const char * getTokenEnd() const
获取当前令牌的结束位置(始终返回空指针,因为不再存储实际位置)
定义 Lexer.hpp:133
const char * getTokenStart() const
获取当前令牌的起始位置(始终返回空指针,因为不再存储实际位置)
定义 Lexer.hpp:130
ETokenType
令牌类型枚举
定义 Lexer.hpp:38
@ eLeftBrace
{
定义 Lexer.hpp:85
@ eTrue
布尔值true
定义 Lexer.hpp:47
@ eEqualAmpersand
=& (绑定赋值运算符)
定义 Lexer.hpp:63
@ eEnd
end
定义 Lexer.hpp:103
@ eLeftParen
(
定义 Lexer.hpp:83
@ eTilde
~ (按位取反)
定义 Lexer.hpp:58
@ eAt
@ (宏调用前缀)
定义 Lexer.hpp:99
@ eSlash
/
定义 Lexer.hpp:55
@ eRightBrace
}
定义 Lexer.hpp:86
@ eElseif
elseif
定义 Lexer.hpp:107
@ eXor
⊻ (按位异或)
定义 Lexer.hpp:78
@ eQuestion
?
定义 Lexer.hpp:96
@ ePercent
%
定义 Lexer.hpp:56
@ eElse
else
定义 Lexer.hpp:108
@ eColonEqual
:= (延迟赋值运算符)
定义 Lexer.hpp:62
@ eAndAnd
&& (逻辑与)
定义 Lexer.hpp:79
@ eNullLiteral
空值null
定义 Lexer.hpp:49
@ eOrOr
|| (逻辑或)
定义 Lexer.hpp:80
@ eLeftBracket
[
定义 Lexer.hpp:88
@ eNumber
数字字面量
定义 Lexer.hpp:44
@ eIf
if
定义 Lexer.hpp:106
@ eBang
!
定义 Lexer.hpp:65
@ eWhile
while
定义 Lexer.hpp:111
@ eBegin
begin
定义 Lexer.hpp:102
@ eString
字符串字面量
定义 Lexer.hpp:45
@ eIdentifier
标识符
定义 Lexer.hpp:46
@ eIn
in (for循环中使用)
定义 Lexer.hpp:113
@ eLessLess
<< (逻辑/算术左移)
定义 Lexer.hpp:69
@ ePipe
| (按位或/逻辑或)
定义 Lexer.hpp:77
@ eRightBracket
]
定义 Lexer.hpp:89
@ eError
错误令牌
定义 Lexer.hpp:41
@ eDot
定义 Lexer.hpp:93
@ eStar
定义 Lexer.hpp:54
@ eMinus
定义 Lexer.hpp:53
@ eLessEqual
<=
定义 Lexer.hpp:68
@ eGreaterGreaterGreater
定义 Lexer.hpp:73
@ eFalse
布尔值false
定义 Lexer.hpp:48
@ ePlus
定义 Lexer.hpp:52
@ eEqual
=
定义 Lexer.hpp:61
@ eSemicolon
;
定义 Lexer.hpp:94
@ eGreater
定义 Lexer.hpp:70
@ eEqualEqual
==
定义 Lexer.hpp:64
@ eRightParen
)
定义 Lexer.hpp:84
@ eComma
,
定义 Lexer.hpp:92
@ eGreaterGreater
定义 Lexer.hpp:72
@ eEndOfFile
文件结束
定义 Lexer.hpp:40
@ eBangEqual
!=
定义 Lexer.hpp:66
@ eColon
:
定义 Lexer.hpp:95
@ eCaret
^
定义 Lexer.hpp:57
@ eFor
for
定义 Lexer.hpp:112
@ eNewline
(换行符)
定义 Lexer.hpp:98
@ eAmpersand
& (按位与/逻辑与)
定义 Lexer.hpp:76
@ eLess
<
定义 Lexer.hpp:67
@ eGreaterEqual
>=
定义 Lexer.hpp:71
扫描器抽象基类
定义 Scanner.hpp:35