parser.hpp (689B)
1 #pragma once 2 3 #include "lexer/token.hpp" 4 #include "parser/ast_node.hpp" 5 6 #include <vector> 7 8 class Parser { 9 public: 10 explicit Parser(const std::vector<Token>& tokens); 11 std::unique_ptr<Program> parse(); 12 13 private: 14 std::vector<Token> tokens_; 15 int position_; 16 17 std::unique_ptr<ASTNode> parseStatement(); 18 std::unique_ptr<ASTNode> parseExpression(); 19 std::unique_ptr<ASTNode> parseAddSub(); 20 std::unique_ptr<ASTNode> parseMulDiv(); 21 std::unique_ptr<ASTNode> parsePrimary(); 22 std::unique_ptr<ASTNode> parseDeclaration(); 23 std::unique_ptr<ASTNode> parseAssignment(); 24 Token advance(); 25 Token peek(); 26 bool isAtEnd(); 27 void error(std::string s); 28 };