Example #1
0
function ParseEntity(TokenStream $it)
{
    $entity = new ASTEntity();
    $it->getToken(SyntaxMap::Keyword);
    $identifier = $it->getToken(SyntaxMap::Identifier);
    $entity->table = $identifier->value;
    //Verify that entity is not redeclared
    $key = strtolower($identifier->value);
    if (isset($it->entities[$key])) {
        throw ParserException::redeclaredEntity($identifier);
    } else {
        $it->entities[$key] = [];
    }
    // Parse table name
    if ($it->typeAt(SyntaxMap::OpenParen, 0)) {
        $it->getToken(SyntaxMap::OpenParen);
        $tableName = $it->getToken(SyntaxMap::Identifier);
        $it->getToken(SyntaxMap::CloseParen);
        $entity->table = $tableName->value;
    }
    $it->getToken(SyntaxMap::OpenBrace);
    $entity->name = $identifier->value;
    while (!$it->typeAt(SyntaxMap::CloseBrace, 0)) {
        $field = ParseField($it, $entity);
        $entity->fields[] = $field;
    }
    $it->getAndMove();
    return $entity;
}