🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
Parser.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstScript/Expr.hpp"
25#include "Lexer.hpp"
26
27AST_NAMESPACE_BEGIN
28
31class AST_SCRIPT_API Parser
32{
33public:
34 Parser(Lexer& lexer);
35
37 int currentTokenType() const;
38
40 StringView currentLexeme() const;
41
43 size_t getLine() const;
44
46 void advance();
47
49 bool match(int type);
50
52 bool check(int type) const;
53
55 Expr* parseExpression();
56
59
61 Expr* parseAssignExpr();
62
64 Expr* parseConditionalExpr();
65
67 Expr* parseLogicalOrExpr();
68
70 Expr* parseLogicalAndExpr();
71
73 Expr* parseBitwiseOrExpr();
74
76 Expr* parseBitwiseXorExpr();
77
79 Expr* parseBitwiseAndExpr();
80
82 Expr* parseEqualityExpr();
83
85 Expr* parseRelationalExpr();
86
88 Expr* parseRangeExpr();
89
92
94 Expr* parseShiftExpr();
95
97 Expr* parseAdditiveExpr();
98
100 Expr* parseMultiplicativeExpr();
101
103 Expr* parseExponentiationExpr();
104
106 Expr* parseUnaryExpr();
107
109 Expr* parseBeginEndBlock();
110
112 Expr* parseStatementSequence();
113
115 Expr* parseBlockExpr();
116
118 Expr* parsePrimaryExpr();
119
121 Expr* parseIfStatement();
122
124 Expr* parseWhileLoop();
125
127 Expr* parseForRangeLoop();
128
131 bool canStartExpression() const;
132
136 static Expr* parseExpr(StringView script);
137private:
138 Lexer& lexer_;
139 Lexer::ETokenType currentTokenType_;
140};
141
142AST_NAMESPACE_END
词法分析器
表达式基类
定义 Expr.hpp:39
词法分析器
定义 Lexer.hpp:34
ETokenType
令牌类型枚举
定义 Lexer.hpp:38
脚本语法解析器
定义 Parser.hpp:32
size_t getLine() const
获取当前行号
Expr * parseStatements()
解析语句序列(多个表达式,用分号或换行分隔)
Expr * parseRangeExprFrom(Expr *startExpr)
从给定的起始表达式解析范围表达式