@top SourceFile { Document } @precedence { fieldDef @right, typeDef @right } Document { Definition+ } Definition { ExecutableDefinition | TypeSystemDefinition | TypeSystemExtension } ExecutableDefinition { OperationDefinition | FragmentDefinition } TypeSystemDefinition { SchemaDefinition | TypeDefinition | DirectiveDefinition } TypeSystemExtension { SchemaExtension | TypeExtension } SchemaDefinition { Description? @specialize Directives? RootTypeDef } RootTypeDef { "{" RootOperationTypeDefinition+ "}" } SchemaExtension { @specialize @specialize Directives? RootTypeDef } TypeExtension { ScalarTypeExtension | ObjectTypeExtension | InterfaceTypeExtension | UnionTypeExtension | EnumTypeExtension | InputObjectTypeExtension } ScalarTypeExtension { @specialize @specialize Name Directives } ObjectTypeExtension /* precedence: right 0 */ { @specialize @specialize Name ImplementsInterfaces? Directives? !typeDef FieldsDefinition | @specialize @specialize Name ImplementsInterfaces? Directives? } InterfaceTypeExtension /* precedence: right 0 */ { @specialize @specialize Name ImplementsInterfaces? Directives? FieldsDefinition | @specialize @specialize Name ImplementsInterfaces? Directives? } UnionTypeExtension /* precedence: right 0 */ { @specialize @specialize Name Directives? UnionMemberTypes | @specialize @specialize Name Directives? } EnumTypeExtension /* precedence: right 0 */ { @specialize @specialize Name Directives? !typeDef EnumValuesDefinition | @specialize @specialize Name Directives? } InputObjectTypeExtension /* precedence: right 0 */ { @specialize @specialize Name Directives? InputFieldsDefinition+ | @specialize @specialize Name Directives? } InputFieldsDefinition { !fieldDef "{" InputValueDefinition+ "}" } EnumValuesDefinition { !fieldDef "{" EnumValueDefinition+ "}" } EnumValueDefinition { Description? EnumValue Directives? } ImplementsInterfaces { ImplementsInterfaces "&" NamedType | @specialize "&"? NamedType } FieldsDefinition { !fieldDef "{" FieldDefinition+ "}" } FieldDefinition { Description? Name ArgumentsDefinition? ":" Type Directives? } ArgumentsDefinition { "(" InputValueDefinition+ ")" } InputValueDefinition { Description? Name ":" Type DefaultValue? Directives? } DefaultValue { "=" Value } UnionMemberTypes { UnionMemberTypes "|" NamedType | "=" "|"? NamedType } RootOperationTypeDefinition { OperationType ":" NamedType } OperationDefinition { SelectionSet | OperationType Name? VariableDefinitions? Directives? SelectionSet } TypeDefinition { ScalarTypeDefinition | ObjectTypeDefinition | InterfaceTypeDefinition | UnionTypeDefinition | EnumTypeDefinition | InputObjectTypeDefinition } ScalarTypeDefinition /* precedence: right 0 */ { Description? @specialize Name Directives? } ObjectTypeDefinition /* precedence: right 0 */ { Description? @specialize Name ImplementsInterfaces? Directives? FieldsDefinition? } InterfaceTypeDefinition /* precedence: right 0 */ { Description? @specialize Name ImplementsInterfaces? Directives? FieldsDefinition? } UnionTypeDefinition /* precedence: right 0 */ { Description? @specialize Name Directives? UnionMemberTypes? } EnumTypeDefinition /* precedence: right 0 */ { Description? @specialize Name Directives? !typeDef EnumValuesDefinition? } InputObjectTypeDefinition /* precedence: right 0 */ { Description? @specialize Name Directives? !typeDef InputFieldsDefinition? } VariableDefinitions { "(" VariableDefinition+ ")" } VariableDefinition { Variable ":" Type DefaultValue? Directives? Comma? } SelectionSet { "{" Selection* "}" } Selection { Field | InlineFragment | FragmentSpread } Field { Alias? Name Arguments? Directive? SelectionSet? } Alias { Name ":" } Arguments { "(" Argument+ ")" } Argument { Name ":" Value } Value { Variable | StringValue | IntValue | FloatValue | BooleanValue | NullValue | EnumValue | ListValue | ObjectValue } Variable { "$" Name } EnumValue { Name } ListValue { "[" Value* "]" } ObjectValue { "{" ObjectField* "}" } ObjectField { Name ":" Value Comma? } FragmentSpread { "..." FragmentName Directives? } FragmentDefinition { @specialize FragmentName TypeCondition Directives? SelectionSet } FragmentName { Name } InlineFragment { "..." TypeCondition? Directives? SelectionSet } TypeCondition { @specialize NamedType } Directives { Directive+ } Directive { "@" Name Arguments? } DirectiveDefinition /* precedence: right 1 */ { Description? @specialize "@" Name ArgumentsDefinition? @specialize ? @specialize DirectiveLocations } DirectiveLocations { DirectiveLocations "|" DirectiveLocation | "|"? DirectiveLocation } DirectiveLocation { ExecutableDirectiveLocation | TypeSystemDirectiveLocation } Type { NamedType | ListType | NonNullType } NamedType { Name } ListType { "[" Type "]" } NonNullType { NamedType "!" | ListType "!" } Description { StringValue } OperationType { @specialize | @specialize | @specialize } BooleanValue { @specialize | @specialize } NullValue { @specialize } ExecutableDirectiveLocation { @specialize | @specialize | @specialize | @specialize | @specialize | @specialize | @specialize | @specialize } TypeSystemDirectiveLocation { @specialize | @specialize | @specialize | @specialize | @specialize | @specialize | @specialize | @specialize | @specialize | @specialize | @specialize } @skip { Whitespace | Comment } @tokens { Whitespace { std.whitespace+ } StringValue { "\"\"\"" (!["] | "\\n" | "\"" "\""? !["])* "\"\"\"" | "\"" !["\\\n]* "\"" } IntValue { "-"? "0" | "-"? std.digit+ } FloatValue { IntValue ("." std.digit+ | ("e" | "E") IntValue+) } @precedence { IntValue, FloatValue } Name { $[_A-Za-z] $[_0-9A-Za-z]* } Comment { "#" ![\n]* } Comma { "," } } @detectDelim