private function parseTypeSystemDefinition()
    {
        // Many definitions begin with a description and require a lookahead.
        $keywordToken = $this->peekDescription()
            ? $this->lexer->lookahead()
            : $this->lexer->token;

        if ($keywordToken->kind === Token::NAME) {
            switch ($keywordToken->value) {
                case 'schema':
                    return $this->parseSchemaDefinition();
                case 'scalar':
                    return $this->parseScalarTypeDefinition();
                case 'type':
                    return $this->parseObjectTypeDefinition();
                case 'interface':
                    return $this->parseInterfaceTypeDefinition();
                case 'union':
                    return $this->parseUnionTypeDefinition();
                case 'enum':
                    return $this->parseEnumTypeDefinition();
                case 'input':
                    return $this->parseInputObjectTypeDefinition();
                case 'extend':
                    return $this->parseTypeExtension();
                case 'directive':
                    return $this->parseDirectiveDefinition();
            }
        }

        throw $this->unexpected($keywordToken);
    }
private function parseTypeSystemDefinition()
    {
        
        $keywordToken = $this->peekDescription()
            ? $this->lexer->lookahead()
            : $this->lexer->token;

        if ($keywordToken->kind === Token::NAME) {
            switch ($keywordToken->value) {
                case 'schema':
                    return $this->parseSchemaDefinition();
                case 'scalar':
                    return $this->parseScalarTypeDefinition();
                case 'type':
                    return $this->parseObjectTypeDefinition();
                case 'interface':
                    return $this->parseInterfaceTypeDefinition();
                case 'union':
                    return $this->parseUnionTypeDefinition();
                case 'enum':
                    return $this->parseEnumTypeDefinition();
                case 'input':
                    return $this->parseInputObjectTypeDefinition();
                case 'extend':
                    return $this->parseTypeExtension();
                case 'directive':
                    return $this->parseDirectiveDefinition();
            }
        }

        throw $this->unexpected($keywordToken);
    }
private function parseTypeSystemDefinition ( ) { // Many definitions begin with a description and require a lookahead. $ keywordToken = $ this -> peekDescription ( ) ? $ this -> lexer -> lookahead ( ) : $ this -> lexer -> token ; if ( $ keywordToken -> kind === Token :: NAME ) { switch ( $ keywordToken -> value ) { case 'schema' : return $ this -> parseSchemaDefinition ( ) ; case 'scalar' : return $ this -> parseScalarTypeDefinition ( ) ; case 'type' : return $ this -> parseObjectTypeDefinition ( ) ; case 'interface' : return $ this -> parseInterfaceTypeDefinition ( ) ; case 'union' : return $ this -> parseUnionTypeDefinition ( ) ; case 'enum' : return $ this -> parseEnumTypeDefinition ( ) ; case 'input' : return $ this -> parseInputObjectTypeDefinition ( ) ; case 'extend' : return $ this -> parseTypeExtension ( ) ; case 'directive' : return $ this -> parseDirectiveDefinition ( ) ; } } throw $ this -> unexpected ( $ keywordToken ) ; }
TypeSystemDefinition :
- SchemaDefinition
- TypeDefinition
- TypeExtension
- DirectiveDefinition

TypeDefinition :
- ScalarTypeDefinition
- ObjectTypeDefinition
- InterfaceTypeDefinition
- UnionTypeDefinition
- EnumTypeDefinition
- InputObjectTypeDefinition

@return TypeSystemDefinitionNode

@throws SyntaxError
TypeSystemDefinition : - SchemaDefinition - TypeDefinition - TypeExtension - DirectiveDefinition