// // Not quite sure if the above makes sense, we'd be returning many expressions outside of functions, but only one inside a function? Why even bother with the current/next crap then?
// // Handling Include becomes a problem too. I guess we should actually return expressions on a line by line basis, and let the "compiler" figure out scope and stuff.
//
// // Grab the next token to figure out what behavior we should have.
// while (true) {
// auto token = _lexer->next();
// try {
// switch (token.type) {
// case blitz::token::variant::ENDOFFILE:
// // End of file means there's nothing left to parse.
// _expr.reset();
// return nullptr;
// case blitz::token::variant::COMMENT:
// case blitz::token::variant::NEWLINE:
// case blitz::token::variant::SEPARATOR:
// // Ignore some things that aren't very useful right now.
// continue;
// case blitz::token::variant::TEXT:
// return try_parse(token);
// default:
// throw nullptr;
// }
// } catch (blitz::error const& ex) {
// throw ex;
// } catch (std::exception const& ex) {
// throw new blitz::error(_file, token.location, token.location, ex.what());
// } catch (...) {
// throw new blitz::error(_file, token.location, token.location, blitz::format("Token %s unexpected at this point.", token.to_string().c_str()));