https://github.com/leozhang1/QtInterpreter 中 Parser.h文件,代码展示
时间: 2023-09-27 09:11:38 浏览: 48
以下是 Parser.h 文件的代码示例:
```c++
#ifndef PARSER_H
#define PARSER_H
#include "Lexer.h"
#include "AST.h"
class Parser
{
public:
Parser(Lexer& lexer) : lexer_(lexer) {}
// Parse the entire input program
std::unique_ptr<Stmt> parseProgram();
private:
// Utility functions for error handling and parsing
void error(const std::string& message);
Token consume(TokenType type, const std::string& message);
bool match(TokenType type);
// Recursive descent parsing functions
std::unique_ptr<Stmt> parseStatement();
std::unique_ptr<Stmt> parsePrintStatement();
std::unique_ptr<Stmt> parseAssignmentStatement();
std::unique_ptr<Stmt> parseIfStatement();
std::unique_ptr<Stmt> parseWhileStatement();
std::unique_ptr<Expr> parseExpression();
std::unique_ptr<Expr> parseOrExpression();
std::unique_ptr<Expr> parseAndExpression();
std::unique_ptr<Expr> parseComparisonExpression();
std::unique_ptr<Expr> parseAdditiveExpression();
std::unique_ptr<Expr> parseMultiplicativeExpression();
std::unique_ptr<Expr> parseUnaryExpression();
std::unique_ptr<Expr> parsePrimaryExpression();
// Member variables
Lexer& lexer_;
Token currentToken_;
};
#endif // PARSER_H
```
这是一个简单的解释器的语法分析器,它将输入程序解析成抽象语法树(AST)。它使用递归下降解析方法,其中每个函数对应语法中的一个非终结符。`Lexer` 类用于将输入程序分解成标记(tokens),而 `AST` 类用于表示抽象语法树的节点。