#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: obelisk::Lexer* 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(); public: Parser(); Parser(obelisk::Lexer* lexer); ~Parser(); obelisk::Lexer* getLexer(); int getCurrentToken(); int getNextToken(); void handleDefinition(); void handleExtern(); void handleTopLevelExpression(); }; } // namespace obelisk #endif