function ParseField(TokenStream $it, ASTEntity $entity) { $f = new ASTField(); $f->annotations = ParseAnnotations($it); $type = ParseDataType($it); $identifier = $it->getToken([SyntaxMap::Identifier, SyntaxMap::DataType]); //Verify if entity is already declared $entityKey = strtolower($entity->name); $key = strtolower($identifier->value); if (isset($it->entities[$entityKey][$key])) { throw ParserException::redeclaredField($entity, $identifier); } else { $it->entities[$entityKey][$key] = []; } if ($it->typeAt(SyntaxMap::AssignOp, 0)) { $it->getAndMove(); $val = $it->getToken([SyntaxMap::String, SyntaxMap::Number]); $f->default = $val; } $it->getToken(SyntaxMap::Semicolon); $f->type = $type; $f->name = $identifier->value; return $f; }