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));
}
Пример #2
0
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;
    }
  }
}