#ifndef OBELISK_PARSER_H #define OBELISK_PARSER_H #include "ast/expression_ast.h" #include "ast/function_ast.h" #include "ast/prototype_ast.h" #include "lexer.h" #include namespace obelisk { class Parser { private: std::unique_ptr lexer_; int currentToken_; void setCurrentToken(int currentToken); std::unique_ptr logError(const char* str); std::unique_ptr logErrorPrototype( const char* str); std::unique_ptr parseExpression(); std::unique_ptr parseNumberExpression(); std::unique_ptr parseParenthesisExpression(); std::unique_ptr parseIdentifierExpression(); std::unique_ptr parsePrimary(); std::unique_ptr parsePrototype(); std::unique_ptr parseDefinition(); std::unique_ptr parseTopLevelExpression(); std::unique_ptr parseExtern(); std::unique_ptr parseAction(); std::unique_ptr parseRule(); std::unique_ptr parseFact(); public: Parser(); std::unique_ptr& getLexer(); int getCurrentToken(); int getNextToken(); void handleDefinition(); void handleExtern(); void handleTopLevelExpression(); void handleAction(); void handleRule(); void handleFact(); }; } // namespace obelisk #endif