435 lines
7.1 KiB
Plaintext
435 lines
7.1 KiB
Plaintext
@top SourceFile {
|
|
Document
|
|
}
|
|
|
|
@precedence {
|
|
fieldDef @right,
|
|
typeDef @right
|
|
}
|
|
|
|
Document {
|
|
Definition+
|
|
}
|
|
|
|
Definition {
|
|
ExecutableDefinition |
|
|
TypeSystemDefinition |
|
|
TypeSystemExtension
|
|
}
|
|
|
|
ExecutableDefinition {
|
|
OperationDefinition |
|
|
FragmentDefinition
|
|
}
|
|
|
|
TypeSystemDefinition {
|
|
SchemaDefinition |
|
|
TypeDefinition |
|
|
DirectiveDefinition
|
|
}
|
|
|
|
TypeSystemExtension {
|
|
SchemaExtension |
|
|
TypeExtension
|
|
}
|
|
|
|
SchemaKeyword {
|
|
@specialize<Name, "schema">
|
|
}
|
|
|
|
SchemaDefinition {
|
|
Description? SchemaKeyword Directives? RootTypeDef
|
|
}
|
|
|
|
RootTypeDef {
|
|
"{" RootOperationTypeDefinition+ "}"
|
|
}
|
|
|
|
ExtendKeyword {
|
|
@specialize<Name, "extend">
|
|
}
|
|
|
|
SchemaExtension {
|
|
ExtendKeyword SchemaKeyword Directives? RootTypeDef
|
|
}
|
|
|
|
TypeExtension {
|
|
ScalarTypeExtension |
|
|
ObjectTypeExtension |
|
|
InterfaceTypeExtension |
|
|
UnionTypeExtension |
|
|
EnumTypeExtension |
|
|
InputObjectTypeExtension
|
|
}
|
|
|
|
ScalarKeyword {
|
|
@specialize<Name, "scalar">
|
|
}
|
|
|
|
ScalarTypeExtension {
|
|
ExtendKeyword ScalarKeyword Name Directives
|
|
}
|
|
|
|
ObjectTypeExtension /* precedence: right 0 */ {
|
|
ExtendKeyword TypeKeyword Name ImplementsInterfaces? Directives? !typeDef FieldsDefinition |
|
|
ExtendKeyword TypeKeyword Name ImplementsInterfaces? Directives?
|
|
}
|
|
|
|
InterfaceKeyword {
|
|
@specialize<Name, "interface">
|
|
}
|
|
|
|
InterfaceTypeExtension /* precedence: right 0 */ {
|
|
ExtendKeyword InterfaceKeyword Name ImplementsInterfaces? Directives? FieldsDefinition |
|
|
ExtendKeyword InterfaceKeyword Name ImplementsInterfaces? Directives?
|
|
}
|
|
|
|
UnionKeyword {
|
|
@specialize<Name, "union">
|
|
}
|
|
|
|
UnionTypeExtension /* precedence: right 0 */ {
|
|
ExtendKeyword UnionKeyword Name Directives? UnionMemberTypes |
|
|
ExtendKeyword UnionKeyword Name Directives?
|
|
}
|
|
|
|
EnumKeyword {
|
|
@specialize<Name, "enum">
|
|
}
|
|
|
|
EnumTypeExtension /* precedence: right 0 */ {
|
|
ExtendKeyword EnumKeyword Name Directives? !typeDef EnumValuesDefinition |
|
|
ExtendKeyword EnumKeyword Name Directives?
|
|
}
|
|
|
|
InputKeyword {
|
|
@specialize<Name, "input">
|
|
}
|
|
|
|
InputObjectTypeExtension /* precedence: right 0 */ {
|
|
ExtendKeyword InputKeyword Name Directives? InputFieldsDefinition+ |
|
|
ExtendKeyword InputKeyword Name Directives?
|
|
}
|
|
|
|
InputFieldsDefinition {
|
|
!fieldDef "{" InputValueDefinition+ "}"
|
|
}
|
|
|
|
EnumValuesDefinition {
|
|
!fieldDef "{" EnumValueDefinition+ "}"
|
|
}
|
|
|
|
EnumValueDefinition {
|
|
Description? EnumValue Directives?
|
|
}
|
|
|
|
ImplementsKeyword {
|
|
@specialize<Name, "implements">
|
|
}
|
|
|
|
ImplementsInterfaces {
|
|
ImplementsInterfaces "&" NamedType |
|
|
ImplementsKeyword "&"? 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? ScalarKeyword Name Directives?
|
|
}
|
|
|
|
TypeKeyword {
|
|
@specialize<Name, "type">
|
|
}
|
|
|
|
ObjectTypeDefinition /* precedence: right 0 */ {
|
|
Description? TypeKeyword Name ImplementsInterfaces? Directives? FieldsDefinition?
|
|
}
|
|
|
|
InterfaceTypeDefinition /* precedence: right 0 */ {
|
|
Description? InterfaceKeyword Name ImplementsInterfaces? Directives? FieldsDefinition?
|
|
}
|
|
|
|
UnionTypeDefinition /* precedence: right 0 */ {
|
|
Description? UnionKeyword Name Directives? UnionMemberTypes?
|
|
}
|
|
|
|
EnumTypeDefinition /* precedence: right 0 */ {
|
|
Description? EnumKeyword Name Directives? !typeDef EnumValuesDefinition?
|
|
}
|
|
|
|
InputObjectTypeDefinition /* precedence: right 0 */ {
|
|
Description? InputKeyword 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?
|
|
}
|
|
|
|
FragmentKeyword {
|
|
@specialize<Name, "fragment">
|
|
}
|
|
|
|
FragmentDefinition {
|
|
FragmentKeyword FragmentName TypeCondition Directives? SelectionSet
|
|
}
|
|
|
|
FragmentName {
|
|
Name
|
|
}
|
|
|
|
InlineFragment {
|
|
"..." TypeCondition? Directives? SelectionSet
|
|
}
|
|
|
|
OnKeyword {
|
|
@specialize<Name, "on">
|
|
}
|
|
|
|
TypeCondition {
|
|
OnKeyword NamedType
|
|
}
|
|
|
|
Directives {
|
|
Directive+
|
|
}
|
|
|
|
DirectiveName {
|
|
"@" Name
|
|
}
|
|
|
|
Directive {
|
|
DirectiveName Arguments?
|
|
}
|
|
|
|
DirectiveKeyword {
|
|
@specialize<Name, "directive">
|
|
}
|
|
|
|
RepeatableKeyword {
|
|
@specialize<Name, "repeatable">
|
|
}
|
|
|
|
DirectiveDefinition /* precedence: right 1 */ {
|
|
Description? DirectiveKeyword "@" Name ArgumentsDefinition? RepeatableKeyword ? OnKeyword DirectiveLocations
|
|
}
|
|
|
|
DirectiveLocations {
|
|
DirectiveLocations "|" DirectiveLocation |
|
|
"|"? DirectiveLocation
|
|
}
|
|
|
|
DirectiveLocation {
|
|
ExecutableDirectiveLocation |
|
|
TypeSystemDirectiveLocation
|
|
}
|
|
|
|
Type {
|
|
NamedType |
|
|
ListType |
|
|
NonNullType
|
|
}
|
|
|
|
NamedType {
|
|
Name
|
|
}
|
|
|
|
ListType {
|
|
"[" Type "]"
|
|
}
|
|
|
|
NonNullType {
|
|
NamedType "!" |
|
|
ListType "!"
|
|
}
|
|
|
|
Description {
|
|
StringValue
|
|
}
|
|
|
|
OperationType {
|
|
@specialize<Name, "query">
|
|
| @specialize<Name, "mutation">
|
|
| @specialize<Name, "subscription">
|
|
}
|
|
|
|
BooleanValue {
|
|
@specialize<Name, "true">
|
|
| @specialize<Name, "false">
|
|
}
|
|
|
|
NullValue {
|
|
@specialize<Name, "null">
|
|
}
|
|
|
|
ExecutableDirectiveLocation {
|
|
@specialize<Name, "QUERY">
|
|
| @specialize<Name, "MUTATION">
|
|
| @specialize<Name, "SUBSCRIPTION">
|
|
| @specialize<Name, "FIELD">
|
|
| @specialize<Name, "FRAGMENT_DEFINITION">
|
|
| @specialize<Name, "FRAGMENT_SPREAD">
|
|
| @specialize<Name, "INLINE_FRAGMENT">
|
|
| @specialize<Name, "VARIABLE_DEFINITION">
|
|
}
|
|
|
|
TypeSystemDirectiveLocation {
|
|
@specialize<Name, "SCHEMA">
|
|
| @specialize<Name, "SCALAR">
|
|
| @specialize<Name, "OBJECT">
|
|
| @specialize<Name, "FIELD_DEFINITION">
|
|
| @specialize<Name, "ARGUMENT_DEFINITION">
|
|
| @specialize<Name, "INTERFACE">
|
|
| @specialize<Name, "UNION">
|
|
| @specialize<Name, "ENUM">
|
|
| @specialize<Name, "ENUM_VALUE">
|
|
| @specialize<Name, "INPUT_OBJECT">
|
|
| @specialize<Name, "INPUT_FIELD_DEFINITION">
|
|
}
|
|
|
|
|
|
@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]*
|
|
}
|
|
|
|
Comma {
|
|
","
|
|
}
|
|
|
|
Comment {
|
|
"#" ![\n]*
|
|
}
|
|
|
|
|
|
"{" "}"
|
|
}
|
|
|
|
@skip { whitespace | Comment }
|
|
|
|
@detectDelim
|