code: func parseField(parser *Parser) (*ast.Field, error) {
  	var (
  		name       *ast.Name
  		alias      *ast.Name
  		arguments  []*ast.Argument
  		directives []*ast.Directive
  		err        error
  	)
  	start := parser.Token.Start
  	if name, err = parseName(parser); err != nil {
  		return nil, err
  	}
  	if skp, err := skip(parser, lexer.COLON); err != nil {
  		return nil, err
  	} else if skp {
  		alias = name
  		if name, err = parseName(parser); err != nil {
  			return nil, err
  		}
  	}
  	if arguments, err = parseArguments(parser); err != nil {
  		return nil, err
  	}
  	if directives, err = parseDirectives(parser); err != nil {
  		return nil, err
  	}
  	var selectionSet *ast.SelectionSet
  	if peek(parser, lexer.BRACE_L) {
  		if selectionSet, err = parseSelectionSet(parser); err != nil {
  			return nil, err
  		}
  	}
  	return ast.NewField(&ast.Field{
  		Alias:        alias,
  		Name:         name,
  		Arguments:    arguments,
  		Directives:   directives,
  		SelectionSet: selectionSet,
  		Loc:          loc(parser, start),
  	}), nil
  }
docs: /**
   * Field : Alias? Name Arguments? Directives? SelectionSet?
   *
   * Alias : Name :
   */