a0fb8cdffb
- 引入了 WhileStmt 结构来表示 while 循环语句。 - 在解析器中实现了对 while 语句的解析逻辑。 - 在分析器中为 while 语句添加了语义分析。 - 重构了现有的解析器方法,以利用 StateProtector 进行状态管理。 - 更新了对各种表达式和语句的错误处理。 - 移除了未使用的终止符管理方法,并简化了表达式解析。 - 将 FigLSPServer.cpp 重命名为 LSPServer.cpp,并调整了构建配置。 - 增强了重复声明和类型错误的错误报告。 - 在多个文件中改进了代码格式和一致性。
31 lines
695 B
C++
31 lines
695 B
C++
/*!
|
|
@file src/Parser/Parser.cpp
|
|
@brief 语法分析器(Pratt + 手动递归下降) 实现
|
|
@author PuqiAR (im@puqiar.top)
|
|
@date 2026-02-14
|
|
*/
|
|
|
|
#include <Parser/Parser.hpp>
|
|
|
|
namespace Fig
|
|
{
|
|
Result<Program *, Error> Parser::Parse()
|
|
{
|
|
Program *program = new Program;
|
|
while (!isEOF)
|
|
{
|
|
auto result = parseStatement();
|
|
if (!result)
|
|
{
|
|
return std::unexpected(result.error());
|
|
}
|
|
Stmt *stmt = *result;
|
|
if (!stmt)
|
|
{
|
|
continue;
|
|
}
|
|
program->nodes.push_back(stmt);
|
|
}
|
|
return program;
|
|
}
|
|
}; // namespace Fig
|