function ParseType(TokenStream $it) { $type = new ASTType(); $it->getToken(SyntaxMap::Keyword); $identifier = $it->getToken(SyntaxMap::Identifier); $type->name = $identifier->value; $type->type = ParseDataType($it); $key = strtolower($type->name); if (isset($it->types[$key])) { throw ParserException::redeclaredType($identifier); } $it->types[$key] = $type; $it->expect(SyntaxMap::Semicolon, 0); $it->getAndMove(); return $type; }