42 explicit Parser(
const std::vector<Token>& tokens);
46 std::unique_ptr<Stmt> parseDeclaration();
47 std::unique_ptr<Stmt> parseStatement();
48 std::unique_ptr<Stmt> parseIfStatement();
49 std::unique_ptr<Stmt> parseWhileStatement();
50 std::unique_ptr<Stmt> parseGotoStatement();
51 std::unique_ptr<Stmt> parseLabelStatement();
52 std::unique_ptr<Stmt> parseReturnStatement();
53 std::unique_ptr<BlockStmt> parseBlock();
54 std::unique_ptr<Stmt> parseExprStatement();
55 std::unique_ptr<FunctionDef> parseFunctionDef();
56 std::unique_ptr<GlobalDecl> parseGlobalDecl();
58 std::unique_ptr<Expr> parseTernary();
60 template <
typename NextLevel,
typename... TokenTypes>
61 std::unique_ptr<Expr> parseBinary(NextLevel next_level,
62 TokenTypes... token_types);
64 std::unique_ptr<Expr> parseLogicalOr();
65 std::unique_ptr<Expr> parseLogicalAnd();
66 std::unique_ptr<Expr> parseBitwiseOr();
67 std::unique_ptr<Expr> parseBitwiseXor();
68 std::unique_ptr<Expr> parseBitwiseAnd();
69 std::unique_ptr<Expr> parseEquality();
70 std::unique_ptr<Expr> parseComparison();
71 std::unique_ptr<Expr> parseTerm();
72 std::unique_ptr<Expr> parseFactor();
73 std::unique_ptr<Expr> parseExponent();
74 std::unique_ptr<Expr> parseUnary();
75 std::unique_ptr<Expr> parsePostfix();
76 std::unique_ptr<Expr> parsePrimary();
77 std::unique_ptr<Expr> finishCall(std::unique_ptr<Expr> callee);
79 bool match(
const std::vector<TokenType>& types);
82 [[nodiscard]]
Token peek()
const;
83 [[nodiscard]]
Token peek(
int offset)
const;
84 [[nodiscard]]
Token previous()
const;
85 [[nodiscard]]
bool isAtEnd()
const;
86 void error(
const Token& token,
const std::string& message);
88 void reportError(
const Token& token,
const std::string& message);
90 std::vector<Token> tokens;
92 std::set<std::string> defined_functions;
93 std::vector<ErrorInfo> errors;
94 bool panic_mode =
false;
Parser(const std::vector< Token > &tokens)
std::vector< ErrorInfo > errors
std::unique_ptr< Program > ast