#pragma once #include "cps/Lexer.h" #include "cps/AST.h" #include #include #include namespace cps { class Parser { Lexer &Lex; int CurTok; std::map BinopPrecedence; int getNextToken(); int GetTokPrecedence(); std::unique_ptr ParseExpression(); std::unique_ptr ParsePrimary(); std::unique_ptr ParseBinOpRHS(int ExprPrec, std::unique_ptr LHS); std::unique_ptr ParseNumberExpr(); std::unique_ptr ParseIdentifierExpr(); std::unique_ptr ParseParenExpr(); std::unique_ptr ParseStatement(); std::unique_ptr ParseIfStmt(); std::unique_ptr ParseWhileStmt(); std::unique_ptr ParseRepeatStmt(); std::unique_ptr ParseForStmt(); std::unique_ptr ParseDeclare(); std::unique_ptr ParseFunction(); std::unique_ptr ParseProcedure(); std::unique_ptr ParseCallStmt(); std::unique_ptr ParseReturnStmt(); std::vector> ParsePrototypeArgs(); public: Parser(Lexer &L); std::vector> Parse(); }; } // namespace cps