std::unique_ptr<AST::Asignment> Parser_Ast::Impl::parseAsignment() { auto lhs = parseLHS(); if (lhs == nullptr) { return nullptr; } if (not parseEqualsign()) { throw std::logic_error("failed to parse ="); } auto rhs = parseRHS(); if (rhs == nullptr) { throw std::logic_error("failed to parse rhs"); } if (not parseSemicolon()) { throw std::logic_error("failed to parse ;"); } return std::make_unique<AST::Asignment>(std::move(lhs), std::move(rhs)); }
void Parser::parse(list<Token> tokens) { for (list<Token>::iterator it=tokens.begin(); it != tokens.end(); it++) { token = *it; TokenType type = token.getType(); if (comment && type != LINE_END) continue; switch(type) { case SEMICOLON: parseSemicolon(); break; case LINE_START: parseLineStart(); break; case LINE_END: parseLineEnd(); break; case COLON: parseColon(); break; case WHITESPACE: parseWhitespace(); break; case COMMA: parseComma(); break; case TEXT: parseText(); break; } } }