code: func parseSchemaDefinition(parser *Parser) (ast.Node, error) {
  	start := parser.Token.Start
  	_, err := expectKeyWord(parser, "schema")
  	if err != nil {
  		return nil, err
  	}
  	directives, err := parseDirectives(parser)
  	if err != nil {
  		return nil, err
  	}
  	operationTypesI, err := reverse(
  		parser,
  		lexer.BRACE_L, parseOperationTypeDefinition, lexer.BRACE_R,
  		true,
  	)
  	if err != nil {
  		return nil, err
  	}
  	operationTypes := []*ast.OperationTypeDefinition{}
  	for _, op := range operationTypesI {
  		if op, ok := op.(*ast.OperationTypeDefinition); ok {
  			operationTypes = append(operationTypes, op)
  		}
  	}
  	return ast.NewSchemaDefinition(&ast.SchemaDefinition{
  		OperationTypes: operationTypes,
  		Directives:     directives,
  		Loc:            loc(parser, start),
  	}), nil
  }
docs: /**
   * SchemaDefinition : schema Directives? { OperationTypeDefinition+ }
   *
   * OperationTypeDefinition : OperationType : NamedType
   */