2 #include "AST/NumberNode.h"
5 #include "sapphirepch.h"
12 template<
typename T>
struct ErrorOr
15 std::shared_ptr<T> get()
26 Error::throw_error(error_tok->loc, error_tok->line(), m_error);
30 ErrorOr(T* ptr) : m_ptr(ptr), m_is_error(
false)
34 ErrorOr(
const std::string& error,
const Token& error_tok)
35 : m_error(error), m_is_error(
true), error_tok(error_tok)
48 std::unique_ptr<Token> error_tok;
49 std::shared_ptr<T> m_ptr;
53 Parser(
const TokenStream& tokens);
56 ErrorOr<ExprNode> walk_expr();
57 ErrorOr<NumberNode> walk_number();
62 void save_current_position();
63 void restore_current_position();
69 static std::shared_ptr<Parser> new_parser(
const TokenStream& tokens);
71 std::shared_ptr<ASTNode> parse();