function ParseEnum(TokenStream $it) { $enum = new ASTEnum(); $it->getToken(SyntaxMap::Keyword); $identifier = $it->getToken(SyntaxMap::Identifier); $enum->name = $identifier->value; //Verify that entity is not redeclared $key = strtolower($identifier->value); if (isset($it->types[$key])) { throw ParserException::redeclaredEnum($identifier); } else { $it->types[$key] = $enum; $it->enums[$key] = []; } $it->getToken(SyntaxMap::OpenBrace); while (!$it->typeAt(SyntaxMap::CloseBrace, 0)) { $enumValue = ParseEnumValue($it, $enum); $enum->values->add($enumValue); } $it->getAndMove(); return $enum; }