Test Failed
Push — master ( 6bac61...6350a6 )
by Kirill
03:02
created

Parser::bootGrammar()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 307

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 307
rs 8
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * This file is part of Railt package.
4
 *
5
 * For the full copyright and license information, please view the LICENSE
6
 * file that was distributed with this source code.
7
 */
8
declare(strict_types=1);
9
10
namespace Railt\SDL\Frontend;
11
12
use Railt\Lexer\Factory;
13
use Railt\Lexer\LexerInterface;
14
use Railt\Parser\Driver\Llk;
15
use Railt\Parser\Driver\Stateful;
16
use Railt\Parser\Grammar;
17
use Railt\Parser\ParserInterface;
18
use Railt\Parser\Rule\Alternation;
19
use Railt\Parser\Rule\Concatenation;
20
use Railt\Parser\Rule\Repetition;
21
use Railt\Parser\Rule\Terminal;
22
use Railt\Parser\GrammarInterface;
23
24
/**
25
 * --- DO NOT EDIT THIS FILE ---
26
 *
27
 * Class Parser has been auto-generated.
28
 * Generated at: 22-08-2018 17:26:07
29
 *
30
 * --- DO NOT EDIT THIS FILE ---
31
 */
32
class Parser extends Stateful
33
{
34
    public const T_AND = 'T_AND';
35
    public const T_OR = 'T_OR';
36
    public const T_PARENTHESIS_OPEN = 'T_PARENTHESIS_OPEN';
37
    public const T_PARENTHESIS_CLOSE = 'T_PARENTHESIS_CLOSE';
38
    public const T_BRACKET_OPEN = 'T_BRACKET_OPEN';
39
    public const T_BRACKET_CLOSE = 'T_BRACKET_CLOSE';
40
    public const T_BRACE_OPEN = 'T_BRACE_OPEN';
41
    public const T_BRACE_CLOSE = 'T_BRACE_CLOSE';
42
    public const T_NON_NULL = 'T_NON_NULL';
43
    public const T_THREE_DOTS = 'T_THREE_DOTS';
44
    public const T_COLON = 'T_COLON';
45
    public const T_EQUAL = 'T_EQUAL';
46
    public const T_DIRECTIVE_AT = 'T_DIRECTIVE_AT';
47
    public const T_HEX_NUMBER = 'T_HEX_NUMBER';
48
    public const T_BIN_NUMBER = 'T_BIN_NUMBER';
49
    public const T_NUMBER = 'T_NUMBER';
50
    public const T_TRUE = 'T_TRUE';
51
    public const T_FALSE = 'T_FALSE';
52
    public const T_NULL = 'T_NULL';
53
    public const T_BLOCK_STRING = 'T_BLOCK_STRING';
54
    public const T_STRING = 'T_STRING';
55
    public const T_EXTENDS = 'T_EXTENDS';
56
    public const T_IMPLEMENTS = 'T_IMPLEMENTS';
57
    public const T_ON = 'T_ON';
58
    public const T_TYPE = 'T_TYPE';
59
    public const T_ENUM = 'T_ENUM';
60
    public const T_UNION = 'T_UNION';
61
    public const T_INTERFACE = 'T_INTERFACE';
62
    public const T_SCHEMA = 'T_SCHEMA';
63
    public const T_SCALAR = 'T_SCALAR';
64
    public const T_DIRECTIVE = 'T_DIRECTIVE';
65
    public const T_INPUT = 'T_INPUT';
66
    public const T_EXTEND = 'T_EXTEND';
67
    public const T_FRAGMENT = 'T_FRAGMENT';
68
    public const T_VARIABLE = 'T_VARIABLE';
69
    public const T_NAME = 'T_NAME';
70
    public const T_COMMENT = 'T_COMMENT';
71
    public const T_COMMA = 'T_COMMA';
72
    public const T_HTAB = 'T_HTAB';
73
    public const T_LF = 'T_LF';
74
    public const T_CR = 'T_CR';
75
    public const T_WHITESPACE = 'T_WHITESPACE';
76
    public const T_BOM = 'T_BOM';
77
78
    /**
79
     * Lexical tokens list.
80
     *
81
     * @var string[]
82
     */
83
    protected const LEXER_TOKENS = [
84
        self::T_AND => '&',
85
        self::T_OR => '\\|',
86
        self::T_PARENTHESIS_OPEN => '\\(',
87
        self::T_PARENTHESIS_CLOSE => '\\)',
88
        self::T_BRACKET_OPEN => '\\[',
89
        self::T_BRACKET_CLOSE => '\\]',
90
        self::T_BRACE_OPEN => '{',
91
        self::T_BRACE_CLOSE => '}',
92
        self::T_NON_NULL => '!',
93
        self::T_THREE_DOTS => '\\.{3}',
94
        self::T_COLON => ':',
95
        self::T_EQUAL => '=',
96
        self::T_DIRECTIVE_AT => '@',
97
        self::T_HEX_NUMBER => '\\-?0x([0-9a-fA-F]+)',
98
        self::T_BIN_NUMBER => '\\-?0b([0-1]+)',
99
        self::T_NUMBER => '\\-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][\\+\\-]?[0-9]+)?',
100
        self::T_TRUE => '(?<=\\b)true\\b',
101
        self::T_FALSE => '(?<=\\b)false\\b',
102
        self::T_NULL => '(?<=\\b)null\\b',
103
        self::T_BLOCK_STRING => '"""((?:\\\\"""|(?!""").)*)"""',
104
        self::T_STRING => '"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"',
105
        self::T_EXTENDS => '(?<=\\b)extends\\b',
106
        self::T_IMPLEMENTS => '(?<=\\b)implements\\b',
107
        self::T_ON => '(?<=\\b)on\\b',
108
        self::T_TYPE => '(?<=\\b)type\\b',
109
        self::T_ENUM => '(?<=\\b)enum\\b',
110
        self::T_UNION => '(?<=\\b)union\\b',
111
        self::T_INTERFACE => '(?<=\\b)interface\\b',
112
        self::T_SCHEMA => '(?<=\\b)schema\\b',
113
        self::T_SCALAR => '(?<=\\b)scalar\\b',
114
        self::T_DIRECTIVE => '(?<=\\b)directive\\b',
115
        self::T_INPUT => '(?<=\\b)input\\b',
116
        self::T_EXTEND => '(?<=\\b)extend\\b',
117
        self::T_FRAGMENT => '(?<=\\b)fragment\\b',
118
        self::T_VARIABLE => '\\$[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*',
119
        self::T_NAME => '[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*',
120
        self::T_COMMENT => '#[^\\n]*',
121
        self::T_COMMA => ',',
122
        self::T_HTAB => '\\x09',
123
        self::T_LF => '\\x0a',
124
        self::T_CR => '\\x0d',
125
        self::T_WHITESPACE => '\\x20',
126
        self::T_BOM => '\\xfe\\xff',
127
    ];
128
129
    /**
130
     * List of skipped tokens.
131
     *
132
     * @var string[]
133
     */
134
    protected const LEXER_SKIPPED_TOKENS = [
135
        'T_COMMENT',
136
        'T_COMMA',
137
        'T_HTAB',
138
        'T_LF',
139
        'T_CR',
140
        'T_WHITESPACE',
141
        'T_BOM',
142
    ];
143
144
    /**
145
     * @var int
146
     */
147
    protected const LEXER_FLAGS = Factory::LOOKAHEAD;
148
149
    /**
150
     * List of rule delegates.
151
     *
152
     * @var string[]
153
     */
154
    protected const PARSER_DELEGATES = [
155
        'TypeName' => \Railt\SDL\Frontend\AST\Common\TypeNameNode::class,
156
        'BooleanValue' => \Railt\SDL\Frontend\AST\Value\BooleanValueNode::class,
157
        'NumberValue' => \Railt\SDL\Frontend\AST\Value\NumberValueNode::class,
158
        'StringValue' => \Railt\SDL\Frontend\AST\Value\StringValueNode::class,
159
        'NullValue' => \Railt\SDL\Frontend\AST\Value\NullValueNode::class,
160
        'ListValue' => \Railt\SDL\Frontend\AST\Value\ListValueNode::class,
161
        'ConstantValue' => \Railt\SDL\Frontend\AST\Value\ConstantValueNode::class,
162
        'Value' => \Railt\SDL\Frontend\AST\Value\ValueNode::class,
163
        'TypeHint' => \Railt\SDL\Frontend\AST\Common\TypeHintNode::class,
164
        'DirectiveDefinition' => \Railt\SDL\Frontend\AST\Definition\DirectiveDefinitionNode::class,
165
        'EnumDefinition' => \Railt\SDL\Frontend\AST\Definition\EnumDefinitionNode::class,
166
        'EnumValue' => \Railt\SDL\Frontend\AST\Dependent\EnumValueDefinitionNode::class,
167
        'InputDefinition' => \Railt\SDL\Frontend\AST\Definition\InputDefinitionNode::class,
168
        'InputFieldDefinition' => \Railt\SDL\Frontend\AST\Dependent\InputFieldDefinitionNode::class,
169
        'InterfaceDefinition' => \Railt\SDL\Frontend\AST\Definition\InterfaceDefinitionNode::class,
170
        'ObjectDefinition' => \Railt\SDL\Frontend\AST\Definition\ObjectDefinitionNode::class,
171
        'ScalarDefinition' => \Railt\SDL\Frontend\AST\Definition\ScalarDefinitionNode::class,
172
        'SchemaDefinition' => \Railt\SDL\Frontend\AST\Definition\SchemaDefinitionNode::class,
173
        'UnionDefinition' => \Railt\SDL\Frontend\AST\Definition\UnionDefinitionNode::class,
174
        'ArgumentDefinition' => \Railt\SDL\Frontend\AST\Dependent\ArgumentDefinitionNode::class,
175
        'FieldDefinition' => \Railt\SDL\Frontend\AST\Dependent\FieldDefinitionNode::class,
176
        'DirectiveInvocation' => \Railt\SDL\Frontend\AST\Invocation\DirectiveInvocationNode::class,
177
        'ArgumentInvocation' => \Railt\SDL\Frontend\AST\Invocation\ArgumentInvocationNode::class,
178
        'InputInvocation' => \Railt\SDL\Frontend\AST\Invocation\InputInvocationNode::class,
179
    ];
180
181
    /**
182
     * Parser root rule name.
183
     *
184
     * @var string
185
     */
186
    protected const PARSER_ROOT_RULE = 'Document';
187
188
    /**
189
     * @return ParserInterface
190
     * @throws \InvalidArgumentException
191
     * @throws \Railt\Lexer\Exception\BadLexemeException
192
     */
193
    protected function boot(): ParserInterface
194
    {
195
        return new Llk($this->bootLexer(), $this->bootGrammar());
196
    }
197
198
    /**
199
     * @return LexerInterface
200
     * @throws \InvalidArgumentException
201
     * @throws \Railt\Lexer\Exception\BadLexemeException
202
     */
203
    protected function bootLexer(): LexerInterface
204
    {
205
        return Factory::create(static::LEXER_TOKENS, static::LEXER_SKIPPED_TOKENS, static::LEXER_FLAGS);
206
    }
207
208
    /**
209
     * @return GrammarInterface
210
     */
211
    protected function bootGrammar(): GrammarInterface
212
    {
213
        return new Grammar([
214
            new Concatenation(0, ['DocumentBody'], null), 
215
            (new Concatenation('Document', ['DocumentHead', 0], 'Document'))->setDefaultId('Document'), 
216
            new Repetition('DocumentHead', 0, -1, 'DirectiveInvocation', null), 
217
            new Alternation(3, ['Extension', 'Definition'], null), 
218
            new Repetition('DocumentBody', 0, -1, 3, null), 
219
            new Terminal('NameWithoutReserved', 'T_NAME', true), 
220
            new Terminal(6, 'T_TRUE', true), 
221
            new Terminal(7, 'T_FALSE', true), 
222
            new Terminal(8, 'T_NULL', true), 
223
            new Alternation('NameWithReserved', ['NameExceptValues', 6, 7, 8], null), 
224
            new Terminal(10, 'T_NAMESPACE', true), 
225
            new Terminal(11, 'T_EXTENDS', true), 
226
            new Terminal(12, 'T_IMPLEMENTS', true), 
227
            new Terminal(13, 'T_ON', true), 
228
            new Terminal(14, 'T_TYPE', true), 
229
            new Terminal(15, 'T_ENUM', true), 
230
            new Terminal(16, 'T_UNION', true), 
231
            new Terminal(17, 'T_INPUT_UNION', true), 
232
            new Terminal(18, 'T_INTERFACE', true), 
233
            new Terminal(19, 'T_SCHEMA', true), 
234
            new Terminal(20, 'T_SCALAR', true), 
235
            new Terminal(21, 'T_DIRECTIVE', true), 
236
            new Terminal(22, 'T_INPUT', true), 
237
            new Terminal(23, 'T_EXTEND', true), 
238
            new Terminal(24, 'T_FRAGMENT', true), 
239
            new Alternation('NameExceptValues', ['NameWithoutReserved', 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], null), 
240
            new Concatenation(26, ['NameWithReserved'], null), 
241
            (new Concatenation('TypeName', [26], 'TypeName'))->setDefaultId('TypeName'), 
242
            new Concatenation(28, ['NameWithReserved'], null), 
243
            (new Concatenation('DependentName', [28], 'DependentName'))->setDefaultId('DependentName'), 
244
            new Concatenation(30, ['NameExceptValues'], null), 
245
            (new Concatenation('ValueName', [30], 'ValueName'))->setDefaultId('ValueName'), 
246
            new Terminal(32, 'T_FALSE', true), 
247
            new Concatenation(33, [32], 'BooleanValue'), 
248
            new Terminal(34, 'T_TRUE', true), 
249
            new Concatenation(35, [34], 'BooleanValue'), 
250
            (new Alternation('BooleanValue', [33, 35], null))->setDefaultId('BooleanValue'), 
251
            new Terminal(37, 'T_NUMBER', true), 
252
            new Concatenation(38, [37], 'NumberValue'), 
253
            new Terminal(39, 'T_HEX_NUMBER', true), 
254
            new Concatenation(40, [39], 'NumberValue'), 
255
            new Terminal(41, 'T_BIN_NUMBER', true), 
256
            new Concatenation(42, [41], 'NumberValue'), 
257
            (new Alternation('NumberValue', [38, 40, 42], null))->setDefaultId('NumberValue'), 
258
            new Terminal(44, 'T_BLOCK_STRING', true), 
259
            new Concatenation(45, [44], 'StringValue'), 
260
            new Terminal(46, 'T_STRING', true), 
261
            new Concatenation(47, [46], 'StringValue'), 
262
            (new Alternation('StringValue', [45, 47], null))->setDefaultId('StringValue'), 
263
            new Terminal(49, 'T_NULL', true), 
264
            (new Concatenation('NullValue', [49], 'NullValue'))->setDefaultId('NullValue'), 
265
            new Terminal(51, 'T_BRACKET_OPEN', false), 
266
            new Repetition(52, 0, -1, 'Value', null), 
267
            new Terminal(53, 'T_BRACKET_CLOSE', false), 
268
            (new Concatenation('ListValue', [51, 52, 53], 'ListValue'))->setDefaultId('ListValue'), 
269
            new Concatenation(55, ['NameExceptValues'], null), 
270
            (new Concatenation('ConstantValue', [55], 'ConstantValue'))->setDefaultId('ConstantValue'), 
271
            new Concatenation(57, ['ConstantValue'], 'Value'), 
272
            new Concatenation(58, ['BooleanValue'], 'Value'), 
273
            new Concatenation(59, ['NumberValue'], 'Value'), 
274
            new Concatenation(60, ['StringValue'], 'Value'), 
275
            new Concatenation(61, ['NullValue'], 'Value'), 
276
            new Concatenation(62, ['InputInvocation'], 'Value'), 
277
            new Concatenation(63, ['ListValue'], null), 
278
            new Concatenation(64, [63], 'Value'), 
279
            (new Alternation('Value', [57, 58, 59, 60, 61, 62, 64], null))->setDefaultId('Value'), 
280
            new Concatenation('Documentation', ['StringValue'], 'Description'), 
281
            new Terminal(67, 'T_IMPLEMENTS', false), 
282
            new Terminal(68, 'T_AND', false), 
283
            new Concatenation(69, [68, 'TypeName'], 'TypeDefinitionImplementations'), 
284
            new Repetition(70, 0, -1, 69, null), 
285
            (new Concatenation('TypeDefinitionImplementations', [67, 'TypeName', 70], null))->setDefaultId('TypeDefinitionImplementations'), 
286
            new Terminal(72, 'T_EXTENDS', false), 
287
            new Concatenation(73, ['TypeName'], null), 
288
            (new Concatenation('TypeDefinitionExtends', [72, 73], 'TypeDefinitionExtends'))->setDefaultId('TypeDefinitionExtends'), 
289
            new Concatenation(75, ['__typeHintList'], 'TypeHint'), 
290
            new Concatenation(76, ['__typeHintSingular'], null), 
291
            new Concatenation(77, [76], 'TypeHint'), 
292
            (new Alternation('TypeHint', [75, 77], null))->setDefaultId('TypeHint'), 
293
            new Concatenation(79, ['__typeHintNullableList'], null), 
294
            new Alternation('__typeHintList', ['__typeHintNonNullList', 79], null), 
295
            new Terminal(81, 'T_BRACKET_OPEN', false), 
296
            new Terminal(82, 'T_BRACKET_CLOSE', false), 
297
            new Concatenation('__typeHintNullableList', [81, '__typeHintSingular', 82], 'List'), 
298
            new Terminal(84, 'T_NON_NULL', false), 
299
            new Concatenation('__typeHintNonNullList', ['__typeHintNullableList', 84], 'NonNull'), 
300
            new Concatenation(86, ['__typeHintNullableSingular'], null), 
301
            new Alternation('__typeHintSingular', ['__typeHintNonNullSingular', 86], null), 
302
            new Concatenation('__typeHintNullableSingular', ['TypeName'], null), 
303
            new Terminal(89, 'T_NON_NULL', false), 
304
            new Concatenation('__typeHintNonNullSingular', ['TypeName', 89], 'NonNull'), 
305
            new Repetition(91, 0, 1, 'Documentation', null), 
306
            new Concatenation(92, ['DirectiveDefinitionBody'], null), 
307
            (new Concatenation('DirectiveDefinition', [91, 'DirectiveDefinitionHead', 92], 'DirectiveDefinition'))->setDefaultId('DirectiveDefinition'), 
308
            new Terminal(94, 'T_DIRECTIVE', false), 
309
            new Terminal(95, 'T_DIRECTIVE_AT', false), 
310
            new Repetition(96, 0, 1, '__directiveDefinitionArguments', null), 
311
            new Concatenation('DirectiveDefinitionHead', [94, 95, 'TypeName', 96], null), 
312
            new Terminal(98, 'T_ON', false), 
313
            new Concatenation(99, ['DirectiveLocations'], null), 
314
            new Concatenation('DirectiveDefinitionBody', [98, 99], null), 
315
            new Terminal(101, 'T_PARENTHESIS_OPEN', false), 
316
            new Repetition(102, 0, 1, 'ArgumentDefinitions', null), 
317
            new Terminal(103, 'T_PARENTHESIS_CLOSE', false), 
318
            new Concatenation('__directiveDefinitionArguments', [101, 102, 103], null), 
319
            new Terminal(105, 'T_OR', false), 
320
            new Repetition(106, 0, 1, 105, null), 
321
            new Terminal(107, 'T_OR', false), 
322
            new Concatenation(108, [107, 'DirectiveLocation'], 'DirectiveLocations'), 
323
            new Repetition(109, 0, -1, 108, null), 
324
            (new Concatenation('DirectiveLocations', [106, 'DirectiveLocation', 109], null))->setDefaultId('DirectiveLocations'), 
325
            new Concatenation(111, ['ValueName'], null), 
326
            (new Concatenation('DirectiveLocation', [111], 'DirectiveLocation'))->setDefaultId('DirectiveLocation'), 
327
            new Repetition(113, 0, 1, 'Documentation', null), 
328
            new Concatenation(114, ['EnumDefinitionBody'], null), 
329
            (new Concatenation('EnumDefinition', [113, 'EnumDefinitionHead', 114], 'EnumDefinition'))->setDefaultId('EnumDefinition'), 
330
            new Terminal(116, 'T_ENUM', false), 
331
            new Repetition(117, 0, 1, 'Directives', null), 
332
            new Concatenation('EnumDefinitionHead', [116, 'TypeName', 117], null), 
333
            new Terminal(119, 'T_BRACE_OPEN', false), 
334
            new Repetition(120, 0, 1, 'EnumValues', null), 
335
            new Terminal(121, 'T_BRACE_CLOSE', false), 
336
            new Concatenation('EnumDefinitionBody', [119, 120, 121], null), 
337
            new Repetition(123, 1, -1, 'EnumValue', null), 
338
            (new Concatenation('EnumValues', [123], 'EnumValues'))->setDefaultId('EnumValues'), 
339
            new Repetition(125, 0, 1, 'Documentation', null), 
340
            new Repetition(126, 0, 1, '__enumDefinitionValue', null), 
341
            new Repetition(127, 0, 1, 'Directives', null), 
342
            (new Concatenation('EnumValue', [125, 'ValueName', 126, 127], 'EnumValue'))->setDefaultId('EnumValue'), 
343
            new Terminal(129, 'T_COLON', false), 
344
            new Terminal(130, 'T_EQUAL', false), 
345
            new Concatenation(131, ['Value'], null), 
346
            new Concatenation('__enumDefinitionValue', [129, 'TypeHint', 130, 131], null), 
347
            new Repetition(133, 0, 1, 'Documentation', null), 
348
            new Concatenation(134, ['InputDefinitionBody'], null), 
349
            (new Concatenation('InputDefinition', [133, 'InputDefinitionHead', 134], 'InputDefinition'))->setDefaultId('InputDefinition'), 
350
            new Terminal(136, 'T_INPUT', false), 
351
            new Repetition(137, 0, 1, 'Directives', null), 
352
            new Concatenation('InputDefinitionHead', [136, 'TypeName', 137], null), 
353
            new Terminal(139, 'T_BRACE_OPEN', false), 
354
            new Repetition(140, 0, 1, 'InputFieldDefinitions', null), 
355
            new Terminal(141, 'T_BRACE_CLOSE', false), 
356
            new Concatenation('InputDefinitionBody', [139, 140, 141], null), 
357
            new Repetition(143, 1, -1, 'InputFieldDefinition', null), 
358
            (new Concatenation('InputFieldDefinitions', [143], 'InputFieldDefinitions'))->setDefaultId('InputFieldDefinitions'), 
359
            new Repetition(145, 0, 1, 'Documentation', null), 
360
            new Repetition(146, 0, 1, '__inputFieldDefinitionDefaultValue', null), 
361
            new Repetition(147, 0, 1, 'Directives', null), 
362
            (new Concatenation('InputFieldDefinition', [145, '__inputFieldDefinitionBody', 146, 147], 'InputFieldDefinition'))->setDefaultId('InputFieldDefinition'), 
363
            new Terminal(149, 'T_COLON', false), 
364
            new Concatenation(150, ['TypeHint'], null), 
365
            new Concatenation('__inputFieldDefinitionBody', ['DependentName', 149, 150], null), 
366
            new Terminal(152, 'T_EQUAL', false), 
367
            new Concatenation(153, ['Value'], null), 
368
            new Concatenation('__inputFieldDefinitionDefaultValue', [152, 153], null), 
369
            new Repetition(155, 0, 1, 'Documentation', null), 
370
            new Concatenation(156, ['InterfaceDefinitionBody'], null), 
371
            (new Concatenation('InterfaceDefinition', [155, 'InterfaceDefinitionHead', 156], 'InterfaceDefinition'))->setDefaultId('InterfaceDefinition'), 
372
            new Terminal(158, 'T_INTERFACE', false), 
373
            new Repetition(159, 0, 1, 'TypeDefinitionImplementations', null), 
374
            new Repetition(160, 0, 1, 'Directives', null), 
375
            new Concatenation('InterfaceDefinitionHead', [158, 'TypeName', 159, 160], null), 
376
            new Terminal(162, 'T_BRACE_OPEN', false), 
377
            new Repetition(163, 0, 1, 'FieldDefinitions', null), 
378
            new Terminal(164, 'T_BRACE_CLOSE', false), 
379
            new Concatenation('InterfaceDefinitionBody', [162, 163, 164], null), 
380
            new Repetition(166, 0, 1, 'Documentation', null), 
381
            new Concatenation(167, ['ObjectDefinitionBody'], null), 
382
            (new Concatenation('ObjectDefinition', [166, 'ObjectDefinitionHead', 167], 'ObjectDefinition'))->setDefaultId('ObjectDefinition'), 
383
            new Terminal(169, 'T_TYPE', false), 
384
            new Repetition(170, 0, 1, 'TypeDefinitionImplementations', null), 
385
            new Repetition(171, 0, 1, 'Directives', null), 
386
            new Concatenation('ObjectDefinitionHead', [169, 'TypeName', 170, 171], null), 
387
            new Terminal(173, 'T_BRACE_OPEN', false), 
388
            new Repetition(174, 0, 1, 'FieldDefinitions', null), 
389
            new Terminal(175, 'T_BRACE_CLOSE', false), 
390
            new Concatenation('ObjectDefinitionBody', [173, 174, 175], null), 
391
            new Repetition(177, 0, 1, 'Documentation', null), 
392
            new Concatenation(178, ['ScalarDefinitionBody'], null), 
393
            (new Concatenation('ScalarDefinition', [177, 178], 'ScalarDefinition'))->setDefaultId('ScalarDefinition'), 
394
            new Terminal(180, 'T_SCALAR', false), 
395
            new Repetition(181, 0, 1, 'TypeDefinitionExtends', null), 
396
            new Repetition(182, 0, 1, 'Directives', null), 
397
            new Concatenation('ScalarDefinitionBody', [180, 'TypeName', 181, 182], null), 
398
            new Repetition(184, 0, 1, 'Documentation', null), 
399
            new Concatenation(185, ['SchemaDefinitionBody'], null), 
400
            (new Concatenation('SchemaDefinition', [184, 'SchemaDefinitionHead', 185], 'SchemaDefinition'))->setDefaultId('SchemaDefinition'), 
401
            new Terminal(187, 'T_SCHEMA', false), 
402
            new Repetition(188, 0, 1, 'TypeName', null), 
403
            new Repetition(189, 0, 1, 'Directives', null), 
404
            new Concatenation('SchemaDefinitionHead', [187, 188, 189], null), 
405
            new Terminal(191, 'T_BRACE_OPEN', false), 
406
            new Repetition(192, 0, 1, 'SchemaFields', null), 
407
            new Terminal(193, 'T_BRACE_CLOSE', false), 
408
            new Concatenation('SchemaDefinitionBody', [191, 192, 193], null), 
409
            new Repetition(195, 1, -1, 'SchemaField', null), 
410
            (new Concatenation('SchemaFields', [195], 'SchemaFields'))->setDefaultId('SchemaFields'), 
411
            new Terminal(197, 'T_COLON', false), 
412
            new Concatenation(198, ['TypeHint'], null), 
413
            (new Concatenation('SchemaField', ['DependentName', 197, 198], 'SchemaField'))->setDefaultId('SchemaField'), 
414
            new Repetition(200, 0, 1, 'Documentation', null), 
415
            new Repetition(201, 0, 1, 'UnionDefinitionBody', null), 
416
            (new Concatenation('UnionDefinition', [200, 'UnionDefinitionHead', 201], 'UnionDefinition'))->setDefaultId('UnionDefinition'), 
417
            new Terminal(203, 'T_UNION', false), 
418
            new Repetition(204, 0, 1, 'Directives', null), 
419
            new Concatenation('UnionDefinitionHead', [203, 'TypeName', 204], null), 
420
            new Terminal(206, 'T_EQUAL', false), 
421
            new Terminal(207, 'T_OR', false), 
422
            new Repetition(208, 0, 1, 207, null), 
423
            new Repetition(209, 0, 1, '__unionDefinitionTargets', null), 
424
            new Concatenation('UnionDefinitionBody', [206, 208, 209], null), 
425
            new Terminal(211, 'T_OR', false), 
426
            new Concatenation(212, [211, 'TypeName'], null), 
427
            new Repetition(213, 0, -1, 212, null), 
428
            new Concatenation('__unionDefinitionTargets', ['TypeName', 213], 'UnionDefinitionTargets'), 
429
            new Repetition(215, 1, -1, 'ArgumentDefinition', null), 
430
            (new Concatenation('ArgumentDefinitions', [215], 'ArgumentDefinitions'))->setDefaultId('ArgumentDefinitions'), 
431
            new Repetition(217, 0, 1, 'Documentation', null), 
432
            new Repetition(218, 0, 1, '__argumentDefinitionDefaultValue', null), 
433
            new Repetition(219, 0, 1, 'Directives', null), 
434
            (new Concatenation('ArgumentDefinition', [217, '__argumentDefinitionBody', 218, 219], 'ArgumentDefinition'))->setDefaultId('ArgumentDefinition'), 
435
            new Terminal(221, 'T_COLON', false), 
436
            new Concatenation(222, ['TypeHint'], null), 
437
            new Concatenation('__argumentDefinitionBody', ['DependentName', 221, 222], null), 
438
            new Terminal(224, 'T_EQUAL', false), 
439
            new Concatenation(225, ['Value'], null), 
440
            new Concatenation('__argumentDefinitionDefaultValue', [224, 225], null), 
441
            new Repetition(227, 1, -1, 'FieldDefinition', null), 
442
            (new Concatenation('FieldDefinitions', [227], 'FieldDefinitions'))->setDefaultId('FieldDefinitions'), 
443
            new Repetition(229, 0, 1, 'Documentation', null), 
444
            new Repetition(230, 0, 1, '__fieldDefinitionArguments', null), 
445
            new Terminal(231, 'T_COLON', false), 
446
            new Repetition(232, 0, 1, 'Directives', null), 
447
            (new Concatenation('FieldDefinition', [229, 'DependentName', 230, 231, 'TypeHint', 232], 'FieldDefinition'))->setDefaultId('FieldDefinition'), 
448
            new Terminal(234, 'T_PARENTHESIS_OPEN', false), 
449
            new Repetition(235, 0, 1, 'ArgumentDefinitions', null), 
450
            new Terminal(236, 'T_PARENTHESIS_CLOSE', false), 
451
            new Concatenation('__fieldDefinitionArguments', [234, 235, 236], null), 
452
            new Concatenation(238, ['UnionDefinition'], null), 
453
            new Alternation('Definition', ['DirectiveDefinition', 'SchemaDefinition', 'EnumDefinition', 'InputDefinition', 'InterfaceDefinition', 'ObjectDefinition', 'ScalarDefinition', 238], null), 
454
            new Repetition(240, 0, 1, 'Documentation', null), 
455
            new Terminal(241, 'T_EXTEND', false), 
456
            new Concatenation(242, ['__enumExtensionVariants'], null), 
457
            (new Concatenation('EnumExtension', [240, 241, 242], 'EnumExtension'))->setDefaultId('EnumExtension'), 
458
            new Concatenation(244, ['EnumDefinitionHead', 'EnumDefinitionBody'], null), 
459
            new Alternation('__enumExtensionVariants', ['EnumDefinitionHead', 244], null), 
460
            new Repetition(246, 0, 1, 'Documentation', null), 
461
            new Terminal(247, 'T_EXTEND', false), 
462
            new Concatenation(248, ['__inputExtensionVariants'], null), 
463
            (new Concatenation('InputExtension', [246, 247, 248], 'InputExtension'))->setDefaultId('InputExtension'), 
464
            new Concatenation(250, ['InputDefinitionHead', 'InputDefinitionBody'], null), 
465
            new Alternation('__inputExtensionVariants', ['InputDefinitionHead', 250], null), 
466
            new Repetition(252, 0, 1, 'Documentation', null), 
467
            new Terminal(253, 'T_EXTEND', false), 
468
            new Concatenation(254, ['__interfaceExtensionVariants'], null), 
469
            (new Concatenation('InterfaceExtension', [252, 253, 254], 'InterfaceExtension'))->setDefaultId('InterfaceExtension'), 
470
            new Concatenation(256, ['InterfaceDefinitionHead', 'InterfaceDefinitionBody'], null), 
471
            new Alternation('__interfaceExtensionVariants', ['InterfaceDefinitionHead', 256], null), 
472
            new Repetition(258, 0, 1, 'Documentation', null), 
473
            new Terminal(259, 'T_EXTEND', false), 
474
            new Concatenation(260, ['__objectExtensionVariants'], null), 
475
            (new Concatenation('ObjectExtension', [258, 259, 260], 'ObjectExtension'))->setDefaultId('ObjectExtension'), 
476
            new Concatenation(262, ['ObjectDefinitionHead', 'ObjectDefinitionBody'], null), 
477
            new Alternation('__objectExtensionVariants', ['ObjectDefinitionHead', 262], null), 
478
            new Repetition(264, 0, 1, 'Documentation', null), 
479
            new Terminal(265, 'T_EXTEND', false), 
480
            new Concatenation(266, ['__scalarExtensionVariants'], null), 
481
            (new Concatenation('ScalarExtension', [264, 265, 266], 'ScalarExtension'))->setDefaultId('ScalarExtension'), 
482
            new Concatenation('__scalarExtensionVariants', ['ScalarDefinitionBody'], null), 
483
            new Repetition(269, 0, 1, 'Documentation', null), 
484
            new Terminal(270, 'T_EXTEND', false), 
485
            new Concatenation(271, ['__schemaExtensionVariants'], null), 
486
            (new Concatenation('SchemaExtension', [269, 270, 271], 'SchemaExtension'))->setDefaultId('SchemaExtension'), 
487
            new Concatenation(273, ['SchemaDefinitionHead', 'SchemaDefinitionBody'], null), 
488
            new Alternation('__schemaExtensionVariants', ['SchemaDefinitionHead', 273], null), 
489
            new Repetition(275, 0, 1, 'Documentation', null), 
490
            new Terminal(276, 'T_EXTEND', false), 
491
            new Concatenation(277, ['__unionExtensionVariants'], null), 
492
            (new Concatenation('UnionExtension', [275, 276, 277], 'UnionExtension'))->setDefaultId('UnionExtension'), 
493
            new Concatenation(279, ['UnionDefinitionHead', 'UnionDefinitionBody'], null), 
494
            new Alternation('__unionExtensionVariants', ['UnionDefinitionHead', 279], null), 
495
            new Concatenation(281, ['UnionExtension'], null), 
496
            new Alternation('Extension', ['EnumExtension', 'InputExtension', 'InterfaceExtension', 'ObjectExtension', 'ScalarExtension', 'SchemaExtension', 281], null), 
497
            new Repetition(283, 1, -1, 'DirectiveInvocation', null), 
498
            (new Concatenation('Directives', [283], 'Directives'))->setDefaultId('Directives'), 
499
            new Terminal(285, 'T_DIRECTIVE_AT', false), 
500
            new Repetition(286, 0, 1, '__directiveInvocationArgumentsGroup', null), 
501
            (new Concatenation('DirectiveInvocation', [285, 'TypeName', 286], 'DirectiveInvocation'))->setDefaultId('DirectiveInvocation'), 
502
            new Terminal(288, 'T_PARENTHESIS_OPEN', false), 
503
            new Repetition(289, 0, 1, '__directiveInvocationArguments', null), 
504
            new Terminal(290, 'T_PARENTHESIS_CLOSE', false), 
505
            new Concatenation('__directiveInvocationArgumentsGroup', [288, 289, 290], null), 
506
            new Repetition('__directiveInvocationArguments', 1, -1, 'ArgumentInvocation', null), 
507
            new Terminal(293, 'T_COLON', false), 
508
            new Concatenation(294, ['Value'], null), 
509
            (new Concatenation('ArgumentInvocation', ['DependentName', 293, 294], 'ArgumentInvocation'))->setDefaultId('ArgumentInvocation'), 
510
            new Terminal(296, 'T_BRACE_OPEN', false), 
511
            new Repetition(297, 0, 1, 'InputInvocationArguments', null), 
512
            new Terminal(298, 'T_BRACE_CLOSE', false), 
513
            (new Concatenation('InputInvocation', [296, 297, 298], 'InputInvocation'))->setDefaultId('InputInvocation'), 
514
            new Repetition(300, 1, -1, 'ArgumentInvocation', null), 
515
            (new Concatenation('InputInvocationArguments', [300], 'InputInvocationArguments'))->setDefaultId('InputInvocationArguments')
516
        ], static::PARSER_ROOT_RULE, static::PARSER_DELEGATES);
517
    }
518
}
519