code: private function parseFragmentDefinition()
      {
          $start = $this->lexer->token;
          $this->expectKeyword('fragment');
  
          $name = $this->parseFragmentName();
  
          // Experimental support for defining variables within fragments changes
          // the grammar of FragmentDefinition:
          //   - fragment FragmentName VariableDefinitions? on TypeCondition Directives? SelectionSet
          $variableDefinitions = null;
          if (isset($this->lexer->options['experimentalFragmentVariables'])) {
              $variableDefinitions = $this->parseVariableDefinitions();
          }
          $this->expectKeyword('on');
          $typeCondition = $this->parseNamedType();
  
          return new FragmentDefinitionNode([
              'name'                => $name,
              'variableDefinitions' => $variableDefinitions,
              'typeCondition'       => $typeCondition,
              'directives'          => $this->parseDirectives(false),
              'selectionSet'        => $this->parseSelectionSet(),
              'loc'                 => $this->loc($start),
          ]);
      }
docs: @return FragmentDefinitionNode
  
  @throws SyntaxError