Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 6374
0.00% covered (danger)
0.00%
0 / 243
CRAP
0.00% covered (danger)
0.00%
0 / 1
Grammar
0.00% covered (danger)
0.00%
0 / 6374
0.00% covered (danger)
0.00%
0 / 243
3461460
0.00% covered (danger)
0.00%
0 / 1
 load
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
6
 withComments
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 setType
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
56
 a0
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a1
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 a2
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 a3
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a4
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a5
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a6
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a7
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a8
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a9
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 a10
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a11
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 a12
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 a13
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 a14
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 a15
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a16
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a17
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 a18
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 a19
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 a20
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
6
 a21
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 a22
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a23
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a24
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 a25
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a26
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a27
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a28
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a29
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 a30
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a31
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 a32
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a33
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 a34
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a35
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 a36
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 a37
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 a38
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 a39
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a40
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a41
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a42
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 a43
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 a44
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 a45
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a46
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a47
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a48
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a49
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a50
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a51
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a52
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 a53
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 a54
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 a55
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a56
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 a57
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a58
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 a59
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a60
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 a61
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 a62
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a63
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a64
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a65
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a66
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a67
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 a68
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 a69
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 a70
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a71
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a72
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a73
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a74
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a75
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a76
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a77
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a78
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a79
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a80
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
6
 a81
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a82
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a83
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a84
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 a85
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 a86
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a87
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 a88
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a89
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a90
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a91
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a92
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a93
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 a94
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 a95
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 a96
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a97
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 a98
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 a99
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 a100
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 a101
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 a102
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a103
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a104
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a105
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a106
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 a107
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
6
 parsestart
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
20
 discard_
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
42
 parseDefinitions
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
42
 discardwhitespace
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
42
 discardcomment
0.00% covered (danger)
0.00%
0 / 80
0.00% covered (danger)
0.00%
0 / 1
870
 parseleadingComments
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 parseExtendedAttributeList
0.00% covered (danger)
0.00%
0 / 60
0.00% covered (danger)
0.00%
0 / 1
182
 parseDefinition
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 1
56
 discardeol
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 1
90
 parseExtendedAttribute
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
42
 parseExtendedAttributes
0.00% covered (danger)
0.00%
0 / 35
0.00% covered (danger)
0.00%
0 / 1
72
 parseCallbackOrInterfaceOrMixin
0.00% covered (danger)
0.00%
0 / 48
0.00% covered (danger)
0.00%
0 / 1
182
 parseNamespace
0.00% covered (danger)
0.00%
0 / 73
0.00% covered (danger)
0.00%
0 / 1
342
 parsePartial
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
56
 parseDictionary
0.00% covered (danger)
0.00%
0 / 78
0.00% covered (danger)
0.00%
0 / 1
380
 parseEnum
0.00% covered (danger)
0.00%
0 / 73
0.00% covered (danger)
0.00%
0 / 1
342
 parseTypedef
0.00% covered (danger)
0.00%
0 / 47
0.00% covered (danger)
0.00%
0 / 1
156
 parseIncludesStatement
0.00% covered (danger)
0.00%
0 / 52
0.00% covered (danger)
0.00%
0 / 1
182
 parseExtendedAttributeNoArgs
0.00% covered (danger)
0.00%
0 / 28
0.00% covered (danger)
0.00%
0 / 1
56
 parseExtendedAttributeArgList
0.00% covered (danger)
0.00%
0 / 47
0.00% covered (danger)
0.00%
0 / 1
132
 parseExtendedAttributeIdent
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 1
72
 parseExtendedAttributeNamedArgList
0.00% covered (danger)
0.00%
0 / 70
0.00% covered (danger)
0.00%
0 / 1
272
 discardSpecCompliantExtendedAttribute
0.00% covered (danger)
0.00%
0 / 133
0.00% covered (danger)
0.00%
0 / 1
1056
 discardi_
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 1
30
 parseCallbackRestOrInterface
0.00% covered (danger)
0.00%
0 / 76
0.00% covered (danger)
0.00%
0 / 1
380
 parseInterfaceOrMixin
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 parseidentifier
0.00% covered (danger)
0.00%
0 / 87
0.00% covered (danger)
0.00%
0 / 1
600
 parseNamespaceMembers
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
42
 parsePartialDefinition
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 1
72
 parseInheritance
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
56
 parseDictionaryMembers
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
42
 parseEnumValueList
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
30
 parseTypeWithExtendedAttributes
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
20
 parseArgumentList
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
30
 parseExtendedAttributeRHS
0.00% covered (danger)
0.00%
0 / 407
0.00% covered (danger)
0.00%
0 / 1
6642
 discardExtendedAttributeInner
0.00% covered (danger)
0.00%
0 / 132
0.00% covered (danger)
0.00%
0 / 1
992
 discardExtendedAttributeRest
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 discardOther
0.00% covered (danger)
0.00%
0 / 43
0.00% covered (danger)
0.00%
0 / 1
156
 parse_
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
42
 parseCallbackRest
0.00% covered (danger)
0.00%
0 / 78
0.00% covered (danger)
0.00%
0 / 1
342
 parseCallbackInterfaceMembers
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
42
 parseInterfaceRest
0.00% covered (danger)
0.00%
0 / 65
0.00% covered (danger)
0.00%
0 / 1
240
 parseMixinRest
0.00% covered (danger)
0.00%
0 / 73
0.00% covered (danger)
0.00%
0 / 1
342
 discardArgumentNameKeyword
0.00% covered (danger)
0.00%
0 / 184
0.00% covered (danger)
0.00%
0 / 1
6806
 discardBufferRelatedType
0.00% covered (danger)
0.00%
0 / 83
0.00% covered (danger)
0.00%
0 / 1
1406
 discardOtherIdLike
0.00% covered (danger)
0.00%
0 / 185
0.00% covered (danger)
0.00%
0 / 1
7832
 parseNamespaceMember
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 1
72
 parsePartialInterfaceOrPartialMixin
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 parsePartialDictionary
0.00% covered (danger)
0.00%
0 / 73
0.00% covered (danger)
0.00%
0 / 1
342
 parseDictionaryMemberRest
0.00% covered (danger)
0.00%
0 / 86
0.00% covered (danger)
0.00%
0 / 1
420
 parsestring
0.00% covered (danger)
0.00%
0 / 36
0.00% covered (danger)
0.00%
0 / 1
132
 parseEnumValueListComma
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
56
 parseType
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
30
 parseArgument
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
20
 parseArguments
0.00% covered (danger)
0.00%
0 / 35
0.00% covered (danger)
0.00%
0 / 1
72
 discardstring
0.00% covered (danger)
0.00%
0 / 36
0.00% covered (danger)
0.00%
0 / 1
132
 discardinteger
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
42
 discarddecimal
0.00% covered (danger)
0.00%
0 / 161
0.00% covered (danger)
0.00%
0 / 1
2862
 discardOtherOrComma
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
30
 discardidentifier
0.00% covered (danger)
0.00%
0 / 87
0.00% covered (danger)
0.00%
0 / 1
600
 discardotherchar
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
42
 discardotherterminals
0.00% covered (danger)
0.00%
0 / 60
0.00% covered (danger)
0.00%
0 / 1
552
 parseCallbackInterfaceMember
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 parseInterfaceMembers
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
42
 parsec_
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
90
 parseMixinMembers
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
42
 parseRegularOperation
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
20
 parseAttributeRest
0.00% covered (danger)
0.00%
0 / 42
0.00% covered (danger)
0.00%
0 / 1
132
 parsePartialInterfaceRest
0.00% covered (danger)
0.00%
0 / 60
0.00% covered (danger)
0.00%
0 / 1
210
 parseDefault
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
42
 parseEnumValueListString
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 1
42
 parseSingleType
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
12
 parseUnionType
0.00% covered (danger)
0.00%
0 / 69
0.00% covered (danger)
0.00%
0 / 1
342
 parseNull
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 1
30
 parseArgumentRest
0.00% covered (danger)
0.00%
0 / 55
0.00% covered (danger)
0.00%
0 / 1
182
 parseopt_minus
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
20
 parsedecimal_integer
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
90
 parsehex_integer
0.00% covered (danger)
0.00%
0 / 36
0.00% covered (danger)
0.00%
0 / 1
182
 parseoctal_integer
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
90
 parseConst
0.00% covered (danger)
0.00%
0 / 65
0.00% covered (danger)
0.00%
0 / 1
272
 parseInterfaceMember
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 parseMixinMember
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
56
 parseOperationRest
0.00% covered (danger)
0.00%
0 / 55
0.00% covered (danger)
0.00%
0 / 1
182
 parseAttributeName
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
30
 parsePartialInterfaceMembers
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
42
 parseDefaultValue
0.00% covered (danger)
0.00%
0 / 102
0.00% covered (danger)
0.00%
0 / 1
600
 parseDistinguishableType
0.00% covered (danger)
0.00%
0 / 143
0.00% covered (danger)
0.00%
0 / 1
1560
 parseAnyType
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
42
 parsePromiseType
0.00% covered (danger)
0.00%
0 / 50
0.00% covered (danger)
0.00%
0 / 1
182
 parseUnionMemberType
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 1
56
 parseArgumentName
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
30
 parseEllipsis
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
42
 parseConstType
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 1
30
 parseConstValue
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
12
 parsePartialInterfaceMember
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 1
132
 parseConstructor
0.00% covered (danger)
0.00%
0 / 63
0.00% covered (danger)
0.00%
0 / 1
272
 parseStringifier
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
56
 parseOptionalReadOnly
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 1
42
 parseOptionalOperationName
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 parseAttributeNameKeyword
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 1
110
 parsePrimitiveType
0.00% covered (danger)
0.00%
0 / 53
0.00% covered (danger)
0.00%
0 / 1
462
 parseStringType
0.00% covered (danger)
0.00%
0 / 35
0.00% covered (danger)
0.00%
0 / 1
182
 parseBufferRelatedType
0.00% covered (danger)
0.00%
0 / 83
0.00% covered (danger)
0.00%
0 / 1
1406
 parseRecordType
0.00% covered (danger)
0.00%
0 / 68
0.00% covered (danger)
0.00%
0 / 1
306
 parseArgumentNameKeyword
0.00% covered (danger)
0.00%
0 / 184
0.00% covered (danger)
0.00%
0 / 1
6806
 parseBooleanLiteral
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 1
110
 parseFloatLiteral
0.00% covered (danger)
0.00%
0 / 76
0.00% covered (danger)
0.00%
0 / 1
380
 parseIntLiteral
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 1
20
 parseOperation
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 parseStaticMember
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
56
 parseIterable
0.00% covered (danger)
0.00%
0 / 68
0.00% covered (danger)
0.00%
0 / 1
306
 parseAsyncIterable
0.00% covered (danger)
0.00%
0 / 86
0.00% covered (danger)
0.00%
0 / 1
506
 parseReadOnlyMember
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
56
 parseMaplikeRest
0.00% covered (danger)
0.00%
0 / 81
0.00% covered (danger)
0.00%
0 / 1
420
 parseSetlikeRest
0.00% covered (danger)
0.00%
0 / 63
0.00% covered (danger)
0.00%
0 / 1
272
 parseInheritAttribute
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
56
 parseStringifierRest
0.00% covered (danger)
0.00%
0 / 38
0.00% covered (danger)
0.00%
0 / 1
90
 parseOperationName
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
30
 parseUnsignedIntegerType
0.00% covered (danger)
0.00%
0 / 26
0.00% covered (danger)
0.00%
0 / 1
56
 parseUnrestrictedFloatType
0.00% covered (danger)
0.00%
0 / 26
0.00% covered (danger)
0.00%
0 / 1
56
 parseinteger
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
42
 parseSpecialOperation
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
20
 parseStaticMemberRest
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
20
 parseOptionalType
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
42
 parseOptionalArgumentList
0.00% covered (danger)
0.00%
0 / 38
0.00% covered (danger)
0.00%
0 / 1
90
 parseReadOnlyMemberRest
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
12
 parseOperationNameKeyword
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
42
 parseIntegerType
0.00% covered (danger)
0.00%
0 / 57
0.00% covered (danger)
0.00%
0 / 1
272
 parseFloatType
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 1
110
 parseSpecial
0.00% covered (danger)
0.00%
0 / 35
0.00% covered (danger)
0.00%
0 / 1
182
 parsei_
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 1
30
 parse
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
110
1<?php
2/*
3 * Generated by WikiPEG
4 */
5
6
7
8
9
10/* File-scope initializer */
11namespace Wikimedia\WebIDL;
12
13
14class Grammar extends \Wikimedia\WikiPEG\PEGParserBase {
15    // initializer
16    
17    /** @var string */
18    private $filename = '';
19    /** @var int */
20    private $lineNum = 1;
21    /** @var bool */
22    private $keepComments = true;
23    /** @var string[]|null */
24    private $lastComments = null;
25    /** @var ?string */
26    private $lastWS = null;
27
28    /**
29     * @param string $contents
30     * @param array $options
31     * @return array
32     */
33    public static function load( string $contents, array $options = [] ) {
34        $g = new Grammar();
35        $g->filename = $options['sourceName'] ?? "<unknown>";
36        $g->keepComments = $options['keepComments'] ?? true;
37        $ast = $g->parse( $contents );
38        if ( $options['concrete'] ?? false ) {
39            $ast[] = [
40                'type' => 'eof',
41                'value' => '',
42                'trivia' => $g->lastWS ?? ''
43            ];
44        }
45        return $ast;
46    }
47
48    private function withComments( $ast ) {
49        if ( !$this->keepComments ) {
50            unset( $ast['leadingComments'] );
51            unset( $ast['trailingComments'] );
52        }
53        return $ast;
54    }
55
56    private static $basicType = [
57        'type' => null,
58        'extAttrs' => [],
59        'generic' => '',
60        'nullable' => false,
61        'union' => false,
62        'idlType' => null,
63    ];
64
65    private static $basicExtAttr = [
66        'type' => 'extended-attribute',
67        'name' => null,
68        'arguments' => [],
69        'rhs' => null,
70    ];
71
72    private static function setType(array &$t, string $val): array {
73        if ( ($t['type'] ?? null) !== null) {
74            return $t;
75        }
76        $t['type'] = $val;
77        if (is_array($t['idlType'] ?? null)) {
78            if ($t['generic'] === '' && $t['union'] === false) {
79                self::setType($t['idlType'], $val);
80            } else if ($t['union'] === false) {
81                foreach ($t['idlType'] as &$tt) {
82                    self::setType($tt, $val);
83                }
84            }
85        }
86        return $t;
87    }
88
89
90    // cache init
91    
92
93    // expectations
94    protected $expectations = [
95        0 => ["type" => "end", "description" => "end of input"],
961 => ["type" => "class", "value" => "[\\t ]", "description" => "[\\t ]"],
972 => ["type" => "literal", "value" => "//", "description" => "\"//\""],
983 => ["type" => "class", "value" => "[^\\n\\r]", "description" => "[^\\n\\r]"],
994 => ["type" => "literal", "value" => "/*", "description" => "\"/*\""],
1005 => ["type" => "class", "value" => "[^\\n\\r*]", "description" => "[^\\n\\r*]"],
1016 => ["type" => "literal", "value" => "*", "description" => "\"*\""],
1027 => ["type" => "literal", "value" => "*/", "description" => "\"*/\""],
1038 => ["type" => "literal", "value" => "[", "description" => "\"[\""],
1049 => ["type" => "literal", "value" => "]", "description" => "\"]\""],
10510 => ["type" => "literal", "value" => "\x0a", "description" => "\"\\n\""],
10611 => ["type" => "literal", "value" => "\x0d\x0a", "description" => "\"\\r\\n\""],
10712 => ["type" => "literal", "value" => "\x0d", "description" => "\"\\r\""],
10813 => ["type" => "literal", "value" => ",", "description" => "\",\""],
10914 => ["type" => "literal", "value" => "callback", "description" => "\"callback\""],
11015 => ["type" => "literal", "value" => "interface", "description" => "\"interface\""],
11116 => ["type" => "literal", "value" => "namespace", "description" => "\"namespace\""],
11217 => ["type" => "literal", "value" => "{", "description" => "\"{\""],
11318 => ["type" => "literal", "value" => "}", "description" => "\"}\""],
11419 => ["type" => "literal", "value" => ";", "description" => "\";\""],
11520 => ["type" => "literal", "value" => "partial", "description" => "\"partial\""],
11621 => ["type" => "literal", "value" => "dictionary", "description" => "\"dictionary\""],
11722 => ["type" => "literal", "value" => "enum", "description" => "\"enum\""],
11823 => ["type" => "literal", "value" => "typedef", "description" => "\"typedef\""],
11924 => ["type" => "literal", "value" => "includes", "description" => "\"includes\""],
12025 => ["type" => "literal", "value" => "(", "description" => "\"(\""],
12126 => ["type" => "literal", "value" => ")", "description" => "\")\""],
12227 => ["type" => "literal", "value" => "=", "description" => "\"=\""],
12328 => ["type" => "class", "value" => "[-_]", "description" => "[-_]"],
12429 => ["type" => "class", "value" => "[A-Za-z]", "description" => "[A-Za-z]"],
12530 => ["type" => "class", "value" => "[-_0-9A-Za-z]", "description" => "[-_0-9A-Za-z]"],
12631 => ["type" => "literal", "value" => ":", "description" => "\":\""],
12732 => ["type" => "literal", "value" => "mixin", "description" => "\"mixin\""],
12833 => ["type" => "literal", "value" => "async", "description" => "\"async\""],
12934 => ["type" => "literal", "value" => "attribute", "description" => "\"attribute\""],
13035 => ["type" => "literal", "value" => "const", "description" => "\"const\""],
13136 => ["type" => "literal", "value" => "constructor", "description" => "\"constructor\""],
13237 => ["type" => "literal", "value" => "deleter", "description" => "\"deleter\""],
13338 => ["type" => "literal", "value" => "getter", "description" => "\"getter\""],
13439 => ["type" => "literal", "value" => "inherit", "description" => "\"inherit\""],
13540 => ["type" => "literal", "value" => "iterable", "description" => "\"iterable\""],
13641 => ["type" => "literal", "value" => "maplike", "description" => "\"maplike\""],
13742 => ["type" => "literal", "value" => "readonly", "description" => "\"readonly\""],
13843 => ["type" => "literal", "value" => "required", "description" => "\"required\""],
13944 => ["type" => "literal", "value" => "setlike", "description" => "\"setlike\""],
14045 => ["type" => "literal", "value" => "setter", "description" => "\"setter\""],
14146 => ["type" => "literal", "value" => "static", "description" => "\"static\""],
14247 => ["type" => "literal", "value" => "stringifier", "description" => "\"stringifier\""],
14348 => ["type" => "literal", "value" => "unrestricted", "description" => "\"unrestricted\""],
14449 => ["type" => "literal", "value" => "ArrayBuffer", "description" => "\"ArrayBuffer\""],
14550 => ["type" => "literal", "value" => "DataView", "description" => "\"DataView\""],
14651 => ["type" => "literal", "value" => "Int8Array", "description" => "\"Int8Array\""],
14752 => ["type" => "literal", "value" => "Int16Array", "description" => "\"Int16Array\""],
14853 => ["type" => "literal", "value" => "Int32Array", "description" => "\"Int32Array\""],
14954 => ["type" => "literal", "value" => "Uint8Array", "description" => "\"Uint8Array\""],
15055 => ["type" => "literal", "value" => "Uint16Array", "description" => "\"Uint16Array\""],
15156 => ["type" => "literal", "value" => "Uint32Array", "description" => "\"Uint32Array\""],
15257 => ["type" => "literal", "value" => "Uint8ClampedArray", "description" => "\"Uint8ClampedArray\""],
15358 => ["type" => "literal", "value" => "Float32Array", "description" => "\"Float32Array\""],
15459 => ["type" => "literal", "value" => "Float64Array", "description" => "\"Float64Array\""],
15560 => ["type" => "literal", "value" => "ByteString", "description" => "\"ByteString\""],
15661 => ["type" => "literal", "value" => "DOMString", "description" => "\"DOMString\""],
15762 => ["type" => "literal", "value" => "FrozenArray", "description" => "\"FrozenArray\""],
15863 => ["type" => "literal", "value" => "Infinity", "description" => "\"Infinity\""],
15964 => ["type" => "literal", "value" => "NaN", "description" => "\"NaN\""],
16065 => ["type" => "literal", "value" => "ObservableArray", "description" => "\"ObservableArray\""],
16166 => ["type" => "literal", "value" => "Promise", "description" => "\"Promise\""],
16267 => ["type" => "literal", "value" => "USVString", "description" => "\"USVString\""],
16368 => ["type" => "literal", "value" => "any", "description" => "\"any\""],
16469 => ["type" => "literal", "value" => "bigint", "description" => "\"bigint\""],
16570 => ["type" => "literal", "value" => "boolean", "description" => "\"boolean\""],
16671 => ["type" => "literal", "value" => "byte", "description" => "\"byte\""],
16772 => ["type" => "literal", "value" => "double", "description" => "\"double\""],
16873 => ["type" => "literal", "value" => "false", "description" => "\"false\""],
16974 => ["type" => "literal", "value" => "float", "description" => "\"float\""],
17075 => ["type" => "literal", "value" => "long", "description" => "\"long\""],
17176 => ["type" => "literal", "value" => "null", "description" => "\"null\""],
17277 => ["type" => "literal", "value" => "object", "description" => "\"object\""],
17378 => ["type" => "literal", "value" => "octet", "description" => "\"octet\""],
17479 => ["type" => "literal", "value" => "or", "description" => "\"or\""],
17580 => ["type" => "literal", "value" => "optional", "description" => "\"optional\""],
17681 => ["type" => "literal", "value" => "record", "description" => "\"record\""],
17782 => ["type" => "literal", "value" => "sequence", "description" => "\"sequence\""],
17883 => ["type" => "literal", "value" => "short", "description" => "\"short\""],
17984 => ["type" => "literal", "value" => "symbol", "description" => "\"symbol\""],
18085 => ["type" => "literal", "value" => "true", "description" => "\"true\""],
18186 => ["type" => "literal", "value" => "unsigned", "description" => "\"unsigned\""],
18287 => ["type" => "literal", "value" => "undefined", "description" => "\"undefined\""],
18388 => ["type" => "literal", "value" => "\"", "description" => "\"\\\"\""],
18489 => ["type" => "class", "value" => "[^\\\"]", "description" => "[^\\\"]"],
18590 => ["type" => "class", "value" => "[0-9]", "description" => "[0-9]"],
18691 => ["type" => "literal", "value" => ".", "description" => "\".\""],
18792 => ["type" => "class", "value" => "[Ee]", "description" => "[Ee]"],
18893 => ["type" => "class", "value" => "[+-]", "description" => "[+-]"],
18994 => ["type" => "class", "value" => "[^\\t\\n\\r 0-9A-Za-z]", "description" => "[^\\t\\n\\r 0-9A-Za-z]"],
19095 => ["type" => "literal", "value" => "-", "description" => "\"-\""],
19196 => ["type" => "literal", "value" => "-Infinity", "description" => "\"-Infinity\""],
19297 => ["type" => "literal", "value" => "...", "description" => "\"...\""],
19398 => ["type" => "literal", "value" => "<", "description" => "\"<\""],
19499 => ["type" => "literal", "value" => ">", "description" => "\">\""],
195100 => ["type" => "literal", "value" => "?", "description" => "\"?\""],
196101 => ["type" => "class", "value" => "[ \\t]", "description" => "[ \\t]"],
197102 => ["type" => "class", "value" => "[1-9]", "description" => "[1-9]"],
198103 => ["type" => "literal", "value" => "0x", "description" => "\"0x\""],
199104 => ["type" => "literal", "value" => "0X", "description" => "\"0X\""],
200105 => ["type" => "class", "value" => "[0-9A-Fa-f]", "description" => "[0-9A-Fa-f]"],
201106 => ["type" => "literal", "value" => "0", "description" => "\"0\""],
202107 => ["type" => "class", "value" => "[0-7]", "description" => "[0-7]"],
203    ];
204
205    // actions
206    private function a0($d) {
207 return $d; 
208}
209private function a1($r) {
210
211  $c = array_values(array_filter($r, function($v) { return $v[0] === '/'; }));
212  $this->lastComments = $c;
213  $this->lastWS = implode( '', $r );
214  return $c;
215
216}
217private function a2($c, $e, $d) {
218
219      $d['extAttrs'] = $e;
220      $d['leadingComments'] = $c;
221      return $this->withComments($d);
222    
223}
224private function a3() {
225
226    $r = $this->lastComments; $this->lastComments = null; return $r;
227
228}
229private function a4($e, $rest) {
230 array_unshift($rest, $e); return $rest; 
231}
232private function a5() {
233 return []; 
234}
235private function a6($nl) {
236 $this->lineNum++; return $nl; 
237}
238private function a7($c) {
239 return $c; 
240}
241private function a8($im) {
242 return $im; 
243}
244private function a9($name, $m) {
245
246    return [
247        'type' => 'namespace',
248        'name' => $name,
249        'inheritance' => null,
250        'partial' => false,
251        'members' => $m,
252    ];
253
254}
255private function a10($p) {
256
257    $p['partial'] = true; return $p;
258
259}
260private function a11($name, $inh, $m) {
261
262        return [
263            'type' => 'dictionary',
264            'name' => $name,
265            'partial' => false,
266            'members' => $m,
267            'inheritance' => $inh,
268        ];
269    
270}
271private function a12($name, $vals) {
272
273    return [
274        'type' => 'enum',
275        'name' => $name,
276        'values' => $vals,
277    ];
278
279}
280private function a13($t, $name) {
281
282    return [
283        'type' => 'typedef',
284         'name' => $name,
285         'idlType' => self::setType($t, 'typedef-type'),
286    ];
287
288}
289private function a14($target, $incl) {
290
291    return [
292        'type' => 'includes',
293        'target' => $target,
294        'includes' => $incl,
295    ];
296
297}
298private function a15($name) {
299
300    return [ 'name' => $name ] + self::$basicExtAttr;
301
302}
303private function a16($name, $args) {
304
305    return [ 'name' => $name, 'arguments' => $args ] + self::$basicExtAttr;
306
307}
308private function a17($name, $rhs) {
309
310    return [
311        'name' => $name,
312        'rhs' => $rhs,
313    ] + self::$basicExtAttr;
314
315}
316private function a18($name, $rhs, $args) {
317
318    return [
319        'name' => $name,
320        'arguments' => $args,
321        'rhs' => [ 'type' => 'identifier', 'value' => $rhs ],
322    ] + self::$basicExtAttr;
323
324}
325private function a19($name, $m) {
326
327    return [
328        'type' => 'callback interface',
329        'name' => $name,
330        'inheritance' => null,
331        'members' => $m,
332        'partial' => false,
333    ];
334
335}
336private function a20($s) {
337
338        return $s[0] == "_" ? substr($s, 1) : $s ;
339    
340}
341private function a21($c, $e, $m) {
342
343      $m['extAttrs'] = $e;
344      $m['leadingComments'] = $c;
345      return $this->withComments( $m );
346    
347}
348private function a22($p) {
349 return $p; 
350}
351private function a23($name) {
352return $name;
353}
354private function a24($s, $vals) {
355
356    array_unshift( $vals, [
357        'type' => 'enum-value',
358        'value' => $s,
359    ] );
360    return $vals;
361
362}
363private function a25($e, $t) {
364
365        $t['extAttrs'] = $e; return $t;
366    
367}
368private function a26($a, $rest) {
369 array_unshift($rest, $a); return $rest; 
370}
371private function a27($rhs) {
372
373        return [ 'type' => 'identifier', 'value' => $rhs ];
374    
375}
376private function a28($s, $s2) {
377return $s2;
378}
379private function a29($s, $rest) {
380
381        array_unshift($rest, $s);
382        $val = array_map(function($item) {
383            return [ 'value' => $item ];
384        }, $rest);
385        return [ 'type' => 'identifier-list', 'value' => $val ];
386    
387}
388private function a30($s) {
389
390        return [ 'type' => 'string', 'value' => $s ];
391    
392}
393private function a31($s, $rest) {
394
395        array_unshift($rest, $s);
396        $val = array_map(function($item) {
397            return [ 'value' => $item ];
398        }, $rest);
399        return [ 'type' => 'string-list', 'value' => $val ];
400    
401}
402private function a32($s) {
403
404        return [ 'type' => 'integer', 'value' => $s ];
405    
406}
407private function a33($s, $rest) {
408
409        array_unshift($rest, $s);
410        $val = array_map(function($item) {
411            return [ 'value' => $item ];
412        }, $rest);
413        return [ 'type' => 'integer-list', 'value' => $val ];
414    
415}
416private function a34($s) {
417
418        return [ 'type' => 'decimal', 'value' => $s ];
419    
420}
421private function a35($s, $rest) {
422
423        array_unshift($rest, $s);
424        $val = array_map(function($item) {
425            return [ 'value' => $item ];
426        }, $rest);
427        return [ 'type' => 'decimal-list', 'value' => $val ];
428    
429}
430private function a36($name, $t, $args) {
431
432    return [
433        'type' => 'callback',
434         'name' => $name,
435         'idlType' => self::setType($t, 'return-type'),
436         'arguments' => $args,
437    ];
438
439}
440private function a37($name, $inh, $m, $c) {
441
442    return $this->withComments( [
443        'type' => 'interface',
444        'name' => $name,
445        'inheritance' => $inh,
446        'members' => $m,
447        'partial' => false,
448        'trailingComments' => $c,
449    ] );
450
451}
452private function a38($name, $m) {
453
454    return [
455        'type' => 'interface mixin',
456        'name' => $name,
457        'inheritance' => null,
458        'partial' => false,
459        'members' => $m,
460    ];
461
462}
463private function a39($k) {
464 return $k; 
465}
466private function a40($s) {
467 return $s; 
468}
469private function a41($a) {
470 $a['readonly'] = true; return $a; 
471}
472private function a42($name, $m) {
473
474       return [
475           'type' => 'dictionary',
476           'name' => $name,
477           'partial' => true,
478           'members' => $m,
479           'inheritance' => null,
480       ];
481   
482}
483private function a43($t, $name) {
484
485      return [
486          'type' => 'field',
487          'name' => $name,
488          'required' => true,
489          'idlType' => self::setType($t, 'dictionary-type'),
490          'default' => null,
491      ];
492    
493}
494private function a44($t, $name, $d) {
495
496      return [
497          'type' => 'field',
498          'name' => $name,
499          'required' => false,
500          'idlType' => self::setType($t, 'dictionary-type'),
501          'default' => $d
502      ];
503  
504}
505private function a45($vals) {
506 return $vals; 
507}
508private function a46($t, $n) {
509 $t['nullable'] = ($n !== null); return $t; 
510}
511private function a47($e, $a) {
512
513        $a['extAttrs'] = $e; return $a;
514    
515}
516private function a48($m, $n) {
517
518    return $m * $n;
519
520}
521private function a49($s) {
522 return floatval( $s ); 
523}
524private function a50() {
525 return null; 
526}
527private function a51($r) {
528
529  return array_values(array_filter($r, function($v) { return $v !== null; }));
530
531}
532private function a52($t, $o) {
533
534    $o['idlType'] = self::setType($t, 'return-type');
535    return $o;
536
537}
538private function a53($t, $name, $c) {
539
540    return $this->withComments( [
541        'type' => 'attribute',
542        'name' => $name,
543        'special' => '',
544        'readonly' => false,
545        'idlType' => self::setType($t, 'attribute-type'),
546        'trailingComments' => $c,
547    ] );
548
549}
550private function a54($name, $m) {
551
552    return [
553        'type' => 'interface',
554        'name' => $name,
555        'inheritance' => null,
556        'members' => $m,
557    ];
558
559}
560private function a55($val) {
561 return $val; 
562}
563private function a56($s, $vals) {
564
565    array_unshift( $vals, [
566        'type' => 'enum-value',
567        'value' => $s,
568    ] );
569    return $vals;
570  
571}
572private function a57($t, $t2) {
573 return $t2; 
574}
575private function a58($t, $rest) {
576
577        array_unshift($rest, $t);
578        return [ 'idlType' => $rest, 'union' => true ] + self::$basicType;
579    
580}
581private function a59() {
582 return true; 
583}
584private function a60($t, $name, $d) {
585
586      return [
587          'type' => 'argument',
588          'default' => $d,
589          'optional' => true,
590          'variadic' => false,
591          'idlType' => self::setType($t, 'argument-type'),
592          'name' => $name,
593      ];
594  
595}
596private function a61($t, $e, $name) {
597
598      return [
599          'type' => 'argument',
600          'default' => null,
601          'optional' => false,
602          'variadic' => ($e !== null),
603          'idlType' => self::setType($t, 'argument-type'),
604          'name' => $name,
605      ];
606  
607}
608private function a62() {
609 return -1; 
610}
611private function a63() {
612 return 1; 
613}
614private function a64($s) {
615 return intval($s); 
616}
617private function a65($s) {
618 return hexdec($s); 
619}
620private function a66($s) {
621 return octdec( $s ); 
622}
623private function a67($t, $name, $v, $c) {
624
625    return $this->withComments( [
626        'type' => 'const',
627        'idlType' => $t,
628        'name' => $name,
629        'value' => $v,
630        'trailingComments' => $c,
631    ] );
632
633}
634private function a68($ro, $a) {
635
636      $a['readonly'] = ($ro !== null);
637      return $a;
638  
639}
640private function a69($name, $args, $c) {
641
642    return $this->withComments( [
643        'type' => 'operation',
644        'special' => '',
645        'idlType' => null,
646        'name' => $name,
647        'arguments' => $args,
648        'extAttrs' => null,
649        'trailingComments' => $c,
650    ] );
651
652}
653private function a70($id) {
654 return $id; 
655}
656private function a71($s) {
657 return [ 'type' => 'string', 'value' => $s ]; 
658}
659private function a72() {
660 return [ 'type' => 'sequence', 'value' => [] ]; 
661}
662private function a73() {
663 return [ 'type' => 'dictionary' ]; 
664}
665private function a74() {
666 return [ 'type' => 'null' ]; 
667}
668private function a75($t) {
669
670        return [ 'idlType' => $t ] + self::$basicType;
671    
672}
673private function a76($g, $t) {
674
675        return [ 'idlType' => [$t], 'generic' => $g ] + self::$basicType;
676    
677}
678private function a77($t) {
679
680      return [ 'idlType' => $t ] + self::$basicType;
681  
682}
683private function a78($dt, $n) {
684 $dt['nullable'] = ($n !== null); return $dt; 
685}
686private function a79() {
687
688      return [ 'idlType' => 'any' ] + self::$basicType;
689    
690}
691private function a80($t) {
692
693        if ( $t['idlType'] === 'void' ) { $t['type'] = 'return-type'; }
694        return [ 'idlType' => [$t], 'generic' => 'Promise' ] + self::$basicType;
695    
696}
697private function a81($t, $n) {
698
699        $t['nullable'] = ($n !== null); return $t;
700    
701}
702private function a82($name) {
703 return $name; 
704}
705private function a83($t) {
706
707        return [ 'type' => 'const-type', 'idlType' => $t ] + self::$basicType;
708    
709}
710private function a84($args, $c) {
711
712        return $this->withComments( [
713          'type' => 'constructor',
714          'arguments' => $args,
715          'trailingComments' => $c,
716        ] );
717  
718}
719private function a85($rest) {
720
721    $rest['special'] = 'stringifier';
722    return $rest;
723
724}
725private function a86($v) {
726 return $v; 
727}
728private function a87($t1, $t2) {
729
730        $t1 = [ 'idlType' => $t1 ] + self::$basicType;
731        return [ 'idlType' => [$t1,$t2], 'generic' => 'record' ] + self::$basicType;
732    
733}
734private function a88($v) {
735
736        return [ 'type' => 'boolean', 'value' => ($v === "true") ];
737    
738}
739private function a89($s) {
740
741        return [ 'type' => 'number', 'value' => $s ];
742    
743}
744private function a90() {
745
746        return [ 'type' => 'Infinity', 'negative' => true ];
747    
748}
749private function a91() {
750
751        return [ 'type' => 'Infinity', 'negative' => false ];
752    
753}
754private function a92() {
755
756        return [ 'type' => 'NaN' ];
757    
758}
759private function a93($rest) {
760
761    $rest['special'] = 'static';
762    return $rest;
763
764}
765private function a94($t1, $t2, $c) {
766
767        return $this->withComments( [
768            'type' => 'iterable',
769            'idlType' => $t2 ? [ $t1, $t2 ] : [ $t1 ],
770            'readonly' => false,
771            'async' => false,
772            'arguments' => [],
773            'trailingComments' => $c,
774        ] );
775    
776}
777private function a95($t1, $t2, $args, $c) {
778
779        return $this->withComments( [
780            'type' => 'iterable',
781            'idlType' => $t2 ? [ $t1, $t2 ] : [ $t1 ],
782            'readonly' => false,
783            'async' => true,
784            'arguments' => $args ?? [],
785            'trailingComments' => $c,
786        ] );
787    
788}
789private function a96($m) {
790
791    $m['readonly'] = true; return $m;
792
793}
794private function a97($t1, $t2, $c) {
795
796        return $this->withComments( [
797            'type' => 'maplike',
798            'idlType' => [ $t1, $t2 ],
799            'readonly' => false,
800            'async' => false,
801            'arguments' => [],
802            'trailingComments' => $c,
803        ] );
804    
805}
806private function a98($t, $c) {
807
808         return $this->withComments( [
809             'type' => 'setlike',
810             'idlType' => [ $t ],
811             'readonly' => false,
812             'async' => false,
813             'arguments' => [],
814             'trailingComments' => $c,
815         ] );
816    
817}
818private function a99($a) {
819
820    $a['special'] = 'inherit';
821    return $a;
822
823}
824private function a100($ro, $a) {
825
826    $a['readonly'] = ($ro !== null);
827    return $a;
828  
829}
830private function a101($c) {
831
832    return $this->withComments( [
833        'type' => 'operation',
834        'name' => '',
835        'arguments' => [],
836        'special' => 'stringifier',
837        'trailingComments' => $c,
838    ] );
839
840}
841private function a102($t) {
842 return "unsigned $t"; 
843}
844private function a103($t) {
845 return "unrestricted $t"; 
846}
847private function a104($s, $o) {
848
849    $o['special'] = $s; return $o;
850
851}
852private function a105($t) {
853 return $t; 
854}
855private function a106($args) {
856 return $args; 
857}
858private function a107($l) {
859 return $l ? "long long" : "long"; 
860}
861
862    // generated
863    private function parsestart($silence) {
864  $p2 = $this->currPos;
865  // start seq_1
866  $p3 = $this->currPos;
867  $r4 = $this->discard_($silence);
868  if ($r4===self::$FAILED) {
869    $r1 = self::$FAILED;
870    goto seq_1;
871  }
872  $r5 = $this->parseDefinitions($silence);
873  // d <- $r5
874  if ($r5===self::$FAILED) {
875    $this->currPos = $p3;
876    $r1 = self::$FAILED;
877    goto seq_1;
878  }
879  $r1 = true;
880  seq_1:
881  if ($r1!==self::$FAILED) {
882    $this->savedPos = $p2;
883    $r1 = $this->a0($r5);
884  }
885  // free $p3
886  return $r1;
887}
888private function discard_($silence) {
889  $p2 = $this->currPos;
890  $r3 = [];
891  for (;;) {
892    // start choice_1
893    $p5 = $this->currPos;
894    $r4 = $this->discardwhitespace($silence);
895    if ($r4!==self::$FAILED) {
896      $r4 = substr($this->input, $p5, $this->currPos - $p5);
897      goto choice_1;
898    } else {
899      $r4 = self::$FAILED;
900    }
901    // free $p5
902    $p5 = $this->currPos;
903    $r4 = $this->discardcomment($silence);
904    if ($r4!==self::$FAILED) {
905      $r4 = substr($this->input, $p5, $this->currPos - $p5);
906    } else {
907      $r4 = self::$FAILED;
908    }
909    // free $p5
910    choice_1:
911    if ($r4!==self::$FAILED) {
912      $r3[] = $r4;
913    } else {
914      break;
915    }
916  }
917  // r <- $r3
918  // free $r4
919  $r1 = $r3;
920  if ($r1!==self::$FAILED) {
921    $this->savedPos = $p2;
922    $r1 = $this->a1($r3);
923  }
924  return $r1;
925}
926private function parseDefinitions($silence) {
927  $r1 = [];
928  for (;;) {
929    $p3 = $this->currPos;
930    // start seq_1
931    $p4 = $this->currPos;
932    $r5 = $this->parseleadingComments($silence);
933    // c <- $r5
934    if ($r5===self::$FAILED) {
935      $r2 = self::$FAILED;
936      goto seq_1;
937    }
938    $r6 = $this->parseExtendedAttributeList($silence);
939    // e <- $r6
940    if ($r6===self::$FAILED) {
941      $this->currPos = $p4;
942      $r2 = self::$FAILED;
943      goto seq_1;
944    }
945    $r7 = $this->parseDefinition($silence);
946    // d <- $r7
947    if ($r7===self::$FAILED) {
948      $this->currPos = $p4;
949      $r2 = self::$FAILED;
950      goto seq_1;
951    }
952    $r2 = true;
953    seq_1:
954    if ($r2!==self::$FAILED) {
955      $this->savedPos = $p3;
956      $r2 = $this->a2($r5, $r6, $r7);
957      $r1[] = $r2;
958    } else {
959      break;
960    }
961    // free $p4
962  }
963  // free $r2
964  return $r1;
965}
966private function discardwhitespace($silence) {
967  $r1 = self::$FAILED;
968  for (;;) {
969    // start choice_1
970    $r2 = $this->input[$this->currPos] ?? '';
971    if ($r2 === "\x09" || $r2 === " ") {
972      $this->currPos++;
973      goto choice_1;
974    } else {
975      $r2 = self::$FAILED;
976      if (!$silence) {$this->fail(1);}
977    }
978    $r2 = $this->discardeol($silence);
979    choice_1:
980    if ($r2!==self::$FAILED) {
981      $r1 = true;
982    } else {
983      break;
984    }
985  }
986  // free $r2
987  return $r1;
988}
989private function discardcomment($silence) {
990  // start choice_1
991  // start seq_1
992  $p2 = $this->currPos;
993  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "//", $this->currPos, 2, false) === 0) {
994    $r3 = "//";
995    $this->currPos += 2;
996  } else {
997    if (!$silence) {$this->fail(2);}
998    $r3 = self::$FAILED;
999    $r1 = self::$FAILED;
1000    goto seq_1;
1001  }
1002  for (;;) {
1003    $r5 = self::charAt($this->input, $this->currPos);
1004    if ($r5 !== '' && !($r5 === "\x0a" || $r5 === "\x0d")) {
1005      $this->currPos += strlen($r5);
1006    } else {
1007      $r5 = self::$FAILED;
1008      if (!$silence) {$this->fail(3);}
1009      break;
1010    }
1011  }
1012  // free $r5
1013  $r4 = true;
1014  if ($r4===self::$FAILED) {
1015    $this->currPos = $p2;
1016    $r1 = self::$FAILED;
1017    goto seq_1;
1018  }
1019  // free $r4
1020  $r1 = true;
1021  seq_1:
1022  if ($r1!==self::$FAILED) {
1023    goto choice_1;
1024  }
1025  // free $p2
1026  // start seq_2
1027  $p2 = $this->currPos;
1028  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "/*", $this->currPos, 2, false) === 0) {
1029    $r4 = "/*";
1030    $this->currPos += 2;
1031  } else {
1032    if (!$silence) {$this->fail(4);}
1033    $r4 = self::$FAILED;
1034    $r1 = self::$FAILED;
1035    goto seq_2;
1036  }
1037  for (;;) {
1038    // start choice_2
1039    $r6 = self::$FAILED;
1040    for (;;) {
1041      if (strcspn($this->input, "\x0a\x0d*", $this->currPos, 1) !== 0) {
1042        $r7 = self::consumeChar($this->input, $this->currPos);
1043        $r6 = true;
1044      } else {
1045        $r7 = self::$FAILED;
1046        if (!$silence) {$this->fail(5);}
1047        break;
1048      }
1049    }
1050    if ($r6!==self::$FAILED) {
1051      goto choice_2;
1052    }
1053    // free $r7
1054    $r6 = $this->discardeol($silence);
1055    if ($r6!==self::$FAILED) {
1056      goto choice_2;
1057    }
1058    // start seq_3
1059    $p8 = $this->currPos;
1060    if (($this->input[$this->currPos] ?? null) === "*") {
1061      $this->currPos++;
1062      $r7 = "*";
1063    } else {
1064      if (!$silence) {$this->fail(6);}
1065      $r7 = self::$FAILED;
1066      $r6 = self::$FAILED;
1067      goto seq_3;
1068    }
1069    $p9 = $this->currPos;
1070    if (($this->input[$this->currPos] ?? null) === "/") {
1071      $this->currPos++;
1072      $r10 = "/";
1073    } else {
1074      $r10 = self::$FAILED;
1075    }
1076    if ($r10 === self::$FAILED) {
1077      $r10 = false;
1078    } else {
1079      $r10 = self::$FAILED;
1080      $this->currPos = $p9;
1081      $this->currPos = $p8;
1082      $r6 = self::$FAILED;
1083      goto seq_3;
1084    }
1085    // free $p9
1086    $r6 = true;
1087    seq_3:
1088    // free $p8
1089    choice_2:
1090    if ($r6===self::$FAILED) {
1091      break;
1092    }
1093  }
1094  // free $r6
1095  $r5 = true;
1096  if ($r5===self::$FAILED) {
1097    $this->currPos = $p2;
1098    $r1 = self::$FAILED;
1099    goto seq_2;
1100  }
1101  // free $r5
1102  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "*/", $this->currPos, 2, false) === 0) {
1103    $r5 = "*/";
1104    $this->currPos += 2;
1105  } else {
1106    if (!$silence) {$this->fail(7);}
1107    $r5 = self::$FAILED;
1108    $this->currPos = $p2;
1109    $r1 = self::$FAILED;
1110    goto seq_2;
1111  }
1112  $r1 = true;
1113  seq_2:
1114  // free $p2
1115  choice_1:
1116  return $r1;
1117}
1118private function parseleadingComments($silence) {
1119  $p2 = $this->currPos;
1120  $r1 = '';
1121  if ($r1!==self::$FAILED) {
1122    $this->savedPos = $p2;
1123    $r1 = $this->a3();
1124  }
1125  return $r1;
1126}
1127private function parseExtendedAttributeList($silence) {
1128  // start choice_1
1129  $p2 = $this->currPos;
1130  // start seq_1
1131  $p3 = $this->currPos;
1132  if (($this->input[$this->currPos] ?? null) === "[") {
1133    $this->currPos++;
1134    $r4 = "[";
1135  } else {
1136    if (!$silence) {$this->fail(8);}
1137    $r4 = self::$FAILED;
1138    $r1 = self::$FAILED;
1139    goto seq_1;
1140  }
1141  $r5 = $this->discard_($silence);
1142  if ($r5===self::$FAILED) {
1143    $this->currPos = $p3;
1144    $r1 = self::$FAILED;
1145    goto seq_1;
1146  }
1147  $r6 = $this->parseExtendedAttribute($silence);
1148  // e <- $r6
1149  if ($r6===self::$FAILED) {
1150    $this->currPos = $p3;
1151    $r1 = self::$FAILED;
1152    goto seq_1;
1153  }
1154  $r7 = $this->parseExtendedAttributes($silence);
1155  // rest <- $r7
1156  if ($r7===self::$FAILED) {
1157    $this->currPos = $p3;
1158    $r1 = self::$FAILED;
1159    goto seq_1;
1160  }
1161  if (($this->input[$this->currPos] ?? null) === "]") {
1162    $this->currPos++;
1163    $r8 = "]";
1164  } else {
1165    if (!$silence) {$this->fail(9);}
1166    $r8 = self::$FAILED;
1167    $this->currPos = $p3;
1168    $r1 = self::$FAILED;
1169    goto seq_1;
1170  }
1171  $r9 = $this->discard_($silence);
1172  if ($r9===self::$FAILED) {
1173    $this->currPos = $p3;
1174    $r1 = self::$FAILED;
1175    goto seq_1;
1176  }
1177  $r1 = true;
1178  seq_1:
1179  if ($r1!==self::$FAILED) {
1180    $this->savedPos = $p2;
1181    $r1 = $this->a4($r6, $r7);
1182    goto choice_1;
1183  }
1184  // free $p3
1185  $p3 = $this->currPos;
1186  // start seq_2
1187  $p10 = $this->currPos;
1188  $p11 = $this->currPos;
1189  if (($this->input[$this->currPos] ?? null) === "[") {
1190    $this->currPos++;
1191    $r12 = "[";
1192  } else {
1193    $r12 = self::$FAILED;
1194  }
1195  if ($r12 === self::$FAILED) {
1196    $r12 = false;
1197  } else {
1198    $r12 = self::$FAILED;
1199    $this->currPos = $p11;
1200    $r1 = self::$FAILED;
1201    goto seq_2;
1202  }
1203  // free $p11
1204  $r1 = true;
1205  seq_2:
1206  if ($r1!==self::$FAILED) {
1207    $this->savedPos = $p3;
1208    $r1 = $this->a5();
1209  }
1210  // free $p10
1211  choice_1:
1212  return $r1;
1213}
1214private function parseDefinition($silence) {
1215  // start choice_1
1216  $r1 = $this->parseCallbackOrInterfaceOrMixin($silence);
1217  if ($r1!==self::$FAILED) {
1218    goto choice_1;
1219  }
1220  $r1 = $this->parseNamespace($silence);
1221  if ($r1!==self::$FAILED) {
1222    goto choice_1;
1223  }
1224  $r1 = $this->parsePartial($silence);
1225  if ($r1!==self::$FAILED) {
1226    goto choice_1;
1227  }
1228  $r1 = $this->parseDictionary($silence);
1229  if ($r1!==self::$FAILED) {
1230    goto choice_1;
1231  }
1232  $r1 = $this->parseEnum($silence);
1233  if ($r1!==self::$FAILED) {
1234    goto choice_1;
1235  }
1236  $r1 = $this->parseTypedef($silence);
1237  if ($r1!==self::$FAILED) {
1238    goto choice_1;
1239  }
1240  $r1 = $this->parseIncludesStatement($silence);
1241  choice_1:
1242  return $r1;
1243}
1244private function discardeol($silence) {
1245  $p2 = $this->currPos;
1246  // start choice_1
1247  if (($this->input[$this->currPos] ?? null) === "\x0a") {
1248    $this->currPos++;
1249    $r3 = "\x0a";
1250    goto choice_1;
1251  } else {
1252    if (!$silence) {$this->fail(10);}
1253    $r3 = self::$FAILED;
1254  }
1255  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "\x0d\x0a", $this->currPos, 2, false) === 0) {
1256    $r3 = "\x0d\x0a";
1257    $this->currPos += 2;
1258    goto choice_1;
1259  } else {
1260    if (!$silence) {$this->fail(11);}
1261    $r3 = self::$FAILED;
1262  }
1263  if (($this->input[$this->currPos] ?? null) === "\x0d") {
1264    $this->currPos++;
1265    $r3 = "\x0d";
1266  } else {
1267    if (!$silence) {$this->fail(12);}
1268    $r3 = self::$FAILED;
1269  }
1270  choice_1:
1271  // nl <- $r3
1272  $r1 = $r3;
1273  if ($r1!==self::$FAILED) {
1274    $this->savedPos = $p2;
1275    $r1 = $this->a6($r3);
1276  }
1277  return $r1;
1278}
1279private function parseExtendedAttribute($silence) {
1280  // start choice_1
1281  $r1 = $this->parseExtendedAttributeNoArgs($silence);
1282  if ($r1!==self::$FAILED) {
1283    goto choice_1;
1284  }
1285  $r1 = $this->parseExtendedAttributeArgList($silence);
1286  if ($r1!==self::$FAILED) {
1287    goto choice_1;
1288  }
1289  $r1 = $this->parseExtendedAttributeIdent($silence);
1290  if ($r1!==self::$FAILED) {
1291    goto choice_1;
1292  }
1293  $r1 = $this->parseExtendedAttributeNamedArgList($silence);
1294  if ($r1!==self::$FAILED) {
1295    goto choice_1;
1296  }
1297  $p2 = $this->currPos;
1298  $r1 = $this->discardSpecCompliantExtendedAttribute($silence);
1299  if ($r1!==self::$FAILED) {
1300    $r1 = substr($this->input, $p2, $this->currPos - $p2);
1301  } else {
1302    $r1 = self::$FAILED;
1303  }
1304  // free $p2
1305  choice_1:
1306  return $r1;
1307}
1308private function parseExtendedAttributes($silence) {
1309  // start choice_1
1310  $p2 = $this->currPos;
1311  // start seq_1
1312  $p3 = $this->currPos;
1313  if (($this->input[$this->currPos] ?? null) === ",") {
1314    $this->currPos++;
1315    $r4 = ",";
1316  } else {
1317    if (!$silence) {$this->fail(13);}
1318    $r4 = self::$FAILED;
1319    $r1 = self::$FAILED;
1320    goto seq_1;
1321  }
1322  $r5 = $this->discard_($silence);
1323  if ($r5===self::$FAILED) {
1324    $this->currPos = $p3;
1325    $r1 = self::$FAILED;
1326    goto seq_1;
1327  }
1328  $r6 = $this->parseExtendedAttribute($silence);
1329  // e <- $r6
1330  if ($r6===self::$FAILED) {
1331    $this->currPos = $p3;
1332    $r1 = self::$FAILED;
1333    goto seq_1;
1334  }
1335  $r7 = $this->parseExtendedAttributes($silence);
1336  // rest <- $r7
1337  if ($r7===self::$FAILED) {
1338    $this->currPos = $p3;
1339    $r1 = self::$FAILED;
1340    goto seq_1;
1341  }
1342  $r1 = true;
1343  seq_1:
1344  if ($r1!==self::$FAILED) {
1345    $this->savedPos = $p2;
1346    $r1 = $this->a4($r6, $r7);
1347    goto choice_1;
1348  }
1349  // free $p3
1350  $p3 = $this->currPos;
1351  $r1 = '';
1352  if ($r1!==self::$FAILED) {
1353    $this->savedPos = $p3;
1354    $r1 = $this->a5();
1355  }
1356  choice_1:
1357  return $r1;
1358}
1359private function parseCallbackOrInterfaceOrMixin($silence) {
1360  // start choice_1
1361  $p2 = $this->currPos;
1362  // start seq_1
1363  $p3 = $this->currPos;
1364  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "callback", $this->currPos, 8, false) === 0) {
1365    $r4 = "callback";
1366    $this->currPos += 8;
1367  } else {
1368    if (!$silence) {$this->fail(14);}
1369    $r4 = self::$FAILED;
1370    $r1 = self::$FAILED;
1371    goto seq_1;
1372  }
1373  $r5 = $this->discardi_($silence);
1374  if ($r5===self::$FAILED) {
1375    $this->currPos = $p3;
1376    $r1 = self::$FAILED;
1377    goto seq_1;
1378  }
1379  $r6 = $this->parseCallbackRestOrInterface($silence);
1380  // c <- $r6
1381  if ($r6===self::$FAILED) {
1382    $this->currPos = $p3;
1383    $r1 = self::$FAILED;
1384    goto seq_1;
1385  }
1386  $r1 = true;
1387  seq_1:
1388  if ($r1!==self::$FAILED) {
1389    $this->savedPos = $p2;
1390    $r1 = $this->a7($r6);
1391    goto choice_1;
1392  }
1393  // free $p3
1394  $p3 = $this->currPos;
1395  // start seq_2
1396  $p7 = $this->currPos;
1397  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "interface", $this->currPos, 9, false) === 0) {
1398    $r8 = "interface";
1399    $this->currPos += 9;
1400  } else {
1401    if (!$silence) {$this->fail(15);}
1402    $r8 = self::$FAILED;
1403    $r1 = self::$FAILED;
1404    goto seq_2;
1405  }
1406  $r9 = $this->discardi_($silence);
1407  if ($r9===self::$FAILED) {
1408    $this->currPos = $p7;
1409    $r1 = self::$FAILED;
1410    goto seq_2;
1411  }
1412  $r10 = $this->parseInterfaceOrMixin($silence);
1413  // im <- $r10
1414  if ($r10===self::$FAILED) {
1415    $this->currPos = $p7;
1416    $r1 = self::$FAILED;
1417    goto seq_2;
1418  }
1419  $r1 = true;
1420  seq_2:
1421  if ($r1!==self::$FAILED) {
1422    $this->savedPos = $p3;
1423    $r1 = $this->a8($r10);
1424  }
1425  // free $p7
1426  choice_1:
1427  return $r1;
1428}
1429private function parseNamespace($silence) {
1430  $p2 = $this->currPos;
1431  // start seq_1
1432  $p3 = $this->currPos;
1433  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "namespace", $this->currPos, 9, false) === 0) {
1434    $r4 = "namespace";
1435    $this->currPos += 9;
1436  } else {
1437    if (!$silence) {$this->fail(16);}
1438    $r4 = self::$FAILED;
1439    $r1 = self::$FAILED;
1440    goto seq_1;
1441  }
1442  $r5 = $this->discardi_($silence);
1443  if ($r5===self::$FAILED) {
1444    $this->currPos = $p3;
1445    $r1 = self::$FAILED;
1446    goto seq_1;
1447  }
1448  $r6 = $this->parseidentifier($silence);
1449  // name <- $r6
1450  if ($r6===self::$FAILED) {
1451    $this->currPos = $p3;
1452    $r1 = self::$FAILED;
1453    goto seq_1;
1454  }
1455  $r7 = $this->discard_($silence);
1456  if ($r7===self::$FAILED) {
1457    $this->currPos = $p3;
1458    $r1 = self::$FAILED;
1459    goto seq_1;
1460  }
1461  if (($this->input[$this->currPos] ?? null) === "{") {
1462    $this->currPos++;
1463    $r8 = "{";
1464  } else {
1465    if (!$silence) {$this->fail(17);}
1466    $r8 = self::$FAILED;
1467    $this->currPos = $p3;
1468    $r1 = self::$FAILED;
1469    goto seq_1;
1470  }
1471  $r9 = $this->discard_($silence);
1472  if ($r9===self::$FAILED) {
1473    $this->currPos = $p3;
1474    $r1 = self::$FAILED;
1475    goto seq_1;
1476  }
1477  $r10 = $this->parseNamespaceMembers($silence);
1478  // m <- $r10
1479  if ($r10===self::$FAILED) {
1480    $this->currPos = $p3;
1481    $r1 = self::$FAILED;
1482    goto seq_1;
1483  }
1484  if (($this->input[$this->currPos] ?? null) === "}") {
1485    $this->currPos++;
1486    $r11 = "}";
1487  } else {
1488    if (!$silence) {$this->fail(18);}
1489    $r11 = self::$FAILED;
1490    $this->currPos = $p3;
1491    $r1 = self::$FAILED;
1492    goto seq_1;
1493  }
1494  $r12 = $this->discard_($silence);
1495  if ($r12===self::$FAILED) {
1496    $this->currPos = $p3;
1497    $r1 = self::$FAILED;
1498    goto seq_1;
1499  }
1500  if (($this->input[$this->currPos] ?? null) === ";") {
1501    $this->currPos++;
1502    $r13 = ";";
1503  } else {
1504    if (!$silence) {$this->fail(19);}
1505    $r13 = self::$FAILED;
1506    $this->currPos = $p3;
1507    $r1 = self::$FAILED;
1508    goto seq_1;
1509  }
1510  $r14 = $this->discard_($silence);
1511  if ($r14===self::$FAILED) {
1512    $this->currPos = $p3;
1513    $r1 = self::$FAILED;
1514    goto seq_1;
1515  }
1516  $r1 = true;
1517  seq_1:
1518  if ($r1!==self::$FAILED) {
1519    $this->savedPos = $p2;
1520    $r1 = $this->a9($r6, $r10);
1521  }
1522  // free $p3
1523  return $r1;
1524}
1525private function parsePartial($silence) {
1526  $p2 = $this->currPos;
1527  // start seq_1
1528  $p3 = $this->currPos;
1529  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "partial", $this->currPos, 7, false) === 0) {
1530    $r4 = "partial";
1531    $this->currPos += 7;
1532  } else {
1533    if (!$silence) {$this->fail(20);}
1534    $r4 = self::$FAILED;
1535    $r1 = self::$FAILED;
1536    goto seq_1;
1537  }
1538  $r5 = $this->discardi_($silence);
1539  if ($r5===self::$FAILED) {
1540    $this->currPos = $p3;
1541    $r1 = self::$FAILED;
1542    goto seq_1;
1543  }
1544  $r6 = $this->parsePartialDefinition($silence);
1545  // p <- $r6
1546  if ($r6===self::$FAILED) {
1547    $this->currPos = $p3;
1548    $r1 = self::$FAILED;
1549    goto seq_1;
1550  }
1551  $r1 = true;
1552  seq_1:
1553  if ($r1!==self::$FAILED) {
1554    $this->savedPos = $p2;
1555    $r1 = $this->a10($r6);
1556  }
1557  // free $p3
1558  return $r1;
1559}
1560private function parseDictionary($silence) {
1561  $p2 = $this->currPos;
1562  // start seq_1
1563  $p3 = $this->currPos;
1564  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "dictionary", $this->currPos, 10, false) === 0) {
1565    $r4 = "dictionary";
1566    $this->currPos += 10;
1567  } else {
1568    if (!$silence) {$this->fail(21);}
1569    $r4 = self::$FAILED;
1570    $r1 = self::$FAILED;
1571    goto seq_1;
1572  }
1573  $r5 = $this->discardi_($silence);
1574  if ($r5===self::$FAILED) {
1575    $this->currPos = $p3;
1576    $r1 = self::$FAILED;
1577    goto seq_1;
1578  }
1579  $r6 = $this->parseidentifier($silence);
1580  // name <- $r6
1581  if ($r6===self::$FAILED) {
1582    $this->currPos = $p3;
1583    $r1 = self::$FAILED;
1584    goto seq_1;
1585  }
1586  $r7 = $this->discard_($silence);
1587  if ($r7===self::$FAILED) {
1588    $this->currPos = $p3;
1589    $r1 = self::$FAILED;
1590    goto seq_1;
1591  }
1592  $r8 = $this->parseInheritance($silence);
1593  // inh <- $r8
1594  if ($r8===self::$FAILED) {
1595    $this->currPos = $p3;
1596    $r1 = self::$FAILED;
1597    goto seq_1;
1598  }
1599  if (($this->input[$this->currPos] ?? null) === "{") {
1600    $this->currPos++;
1601    $r9 = "{";
1602  } else {
1603    if (!$silence) {$this->fail(17);}
1604    $r9 = self::$FAILED;
1605    $this->currPos = $p3;
1606    $r1 = self::$FAILED;
1607    goto seq_1;
1608  }
1609  $r10 = $this->discard_($silence);
1610  if ($r10===self::$FAILED) {
1611    $this->currPos = $p3;
1612    $r1 = self::$FAILED;
1613    goto seq_1;
1614  }
1615  $r11 = $this->parseDictionaryMembers($silence);
1616  // m <- $r11
1617  if ($r11===self::$FAILED) {
1618    $this->currPos = $p3;
1619    $r1 = self::$FAILED;
1620    goto seq_1;
1621  }
1622  if (($this->input[$this->currPos] ?? null) === "}") {
1623    $this->currPos++;
1624    $r12 = "}";
1625  } else {
1626    if (!$silence) {$this->fail(18);}
1627    $r12 = self::$FAILED;
1628    $this->currPos = $p3;
1629    $r1 = self::$FAILED;
1630    goto seq_1;
1631  }
1632  $r13 = $this->discard_($silence);
1633  if ($r13===self::$FAILED) {
1634    $this->currPos = $p3;
1635    $r1 = self::$FAILED;
1636    goto seq_1;
1637  }
1638  if (($this->input[$this->currPos] ?? null) === ";") {
1639    $this->currPos++;
1640    $r14 = ";";
1641  } else {
1642    if (!$silence) {$this->fail(19);}
1643    $r14 = self::$FAILED;
1644    $this->currPos = $p3;
1645    $r1 = self::$FAILED;
1646    goto seq_1;
1647  }
1648  $r15 = $this->discard_($silence);
1649  if ($r15===self::$FAILED) {
1650    $this->currPos = $p3;
1651    $r1 = self::$FAILED;
1652    goto seq_1;
1653  }
1654  $r1 = true;
1655  seq_1:
1656  if ($r1!==self::$FAILED) {
1657    $this->savedPos = $p2;
1658    $r1 = $this->a11($r6, $r8, $r11);
1659  }
1660  // free $p3
1661  return $r1;
1662}
1663private function parseEnum($silence) {
1664  $p2 = $this->currPos;
1665  // start seq_1
1666  $p3 = $this->currPos;
1667  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "enum", $this->currPos, 4, false) === 0) {
1668    $r4 = "enum";
1669    $this->currPos += 4;
1670  } else {
1671    if (!$silence) {$this->fail(22);}
1672    $r4 = self::$FAILED;
1673    $r1 = self::$FAILED;
1674    goto seq_1;
1675  }
1676  $r5 = $this->discardi_($silence);
1677  if ($r5===self::$FAILED) {
1678    $this->currPos = $p3;
1679    $r1 = self::$FAILED;
1680    goto seq_1;
1681  }
1682  $r6 = $this->parseidentifier($silence);
1683  // name <- $r6
1684  if ($r6===self::$FAILED) {
1685    $this->currPos = $p3;
1686    $r1 = self::$FAILED;
1687    goto seq_1;
1688  }
1689  $r7 = $this->discard_($silence);
1690  if ($r7===self::$FAILED) {
1691    $this->currPos = $p3;
1692    $r1 = self::$FAILED;
1693    goto seq_1;
1694  }
1695  if (($this->input[$this->currPos] ?? null) === "{") {
1696    $this->currPos++;
1697    $r8 = "{";
1698  } else {
1699    if (!$silence) {$this->fail(17);}
1700    $r8 = self::$FAILED;
1701    $this->currPos = $p3;
1702    $r1 = self::$FAILED;
1703    goto seq_1;
1704  }
1705  $r9 = $this->discard_($silence);
1706  if ($r9===self::$FAILED) {
1707    $this->currPos = $p3;
1708    $r1 = self::$FAILED;
1709    goto seq_1;
1710  }
1711  $r10 = $this->parseEnumValueList($silence);
1712  // vals <- $r10
1713  if ($r10===self::$FAILED) {
1714    $this->currPos = $p3;
1715    $r1 = self::$FAILED;
1716    goto seq_1;
1717  }
1718  if (($this->input[$this->currPos] ?? null) === "}") {
1719    $this->currPos++;
1720    $r11 = "}";
1721  } else {
1722    if (!$silence) {$this->fail(18);}
1723    $r11 = self::$FAILED;
1724    $this->currPos = $p3;
1725    $r1 = self::$FAILED;
1726    goto seq_1;
1727  }
1728  $r12 = $this->discard_($silence);
1729  if ($r12===self::$FAILED) {
1730    $this->currPos = $p3;
1731    $r1 = self::$FAILED;
1732    goto seq_1;
1733  }
1734  if (($this->input[$this->currPos] ?? null) === ";") {
1735    $this->currPos++;
1736    $r13 = ";";
1737  } else {
1738    if (!$silence) {$this->fail(19);}
1739    $r13 = self::$FAILED;
1740    $this->currPos = $p3;
1741    $r1 = self::$FAILED;
1742    goto seq_1;
1743  }
1744  $r14 = $this->discard_($silence);
1745  if ($r14===self::$FAILED) {
1746    $this->currPos = $p3;
1747    $r1 = self::$FAILED;
1748    goto seq_1;
1749  }
1750  $r1 = true;
1751  seq_1:
1752  if ($r1!==self::$FAILED) {
1753    $this->savedPos = $p2;
1754    $r1 = $this->a12($r6, $r10);
1755  }
1756  // free $p3
1757  return $r1;
1758}
1759private function parseTypedef($silence) {
1760  $p2 = $this->currPos;
1761  // start seq_1
1762  $p3 = $this->currPos;
1763  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "typedef", $this->currPos, 7, false) === 0) {
1764    $r4 = "typedef";
1765    $this->currPos += 7;
1766  } else {
1767    if (!$silence) {$this->fail(23);}
1768    $r4 = self::$FAILED;
1769    $r1 = self::$FAILED;
1770    goto seq_1;
1771  }
1772  $r5 = $this->discardi_($silence);
1773  if ($r5===self::$FAILED) {
1774    $this->currPos = $p3;
1775    $r1 = self::$FAILED;
1776    goto seq_1;
1777  }
1778  $r6 = $this->parseTypeWithExtendedAttributes($silence);
1779  // t <- $r6
1780  if ($r6===self::$FAILED) {
1781    $this->currPos = $p3;
1782    $r1 = self::$FAILED;
1783    goto seq_1;
1784  }
1785  $r7 = $this->parseidentifier($silence);
1786  // name <- $r7
1787  if ($r7===self::$FAILED) {
1788    $this->currPos = $p3;
1789    $r1 = self::$FAILED;
1790    goto seq_1;
1791  }
1792  $r8 = $this->discard_($silence);
1793  if ($r8===self::$FAILED) {
1794    $this->currPos = $p3;
1795    $r1 = self::$FAILED;
1796    goto seq_1;
1797  }
1798  if (($this->input[$this->currPos] ?? null) === ";") {
1799    $this->currPos++;
1800    $r9 = ";";
1801  } else {
1802    if (!$silence) {$this->fail(19);}
1803    $r9 = self::$FAILED;
1804    $this->currPos = $p3;
1805    $r1 = self::$FAILED;
1806    goto seq_1;
1807  }
1808  $r10 = $this->discard_($silence);
1809  if ($r10===self::$FAILED) {
1810    $this->currPos = $p3;
1811    $r1 = self::$FAILED;
1812    goto seq_1;
1813  }
1814  $r1 = true;
1815  seq_1:
1816  if ($r1!==self::$FAILED) {
1817    $this->savedPos = $p2;
1818    $r1 = $this->a13($r6, $r7);
1819  }
1820  // free $p3
1821  return $r1;
1822}
1823private function parseIncludesStatement($silence) {
1824  $p2 = $this->currPos;
1825  // start seq_1
1826  $p3 = $this->currPos;
1827  $r4 = $this->parseidentifier($silence);
1828  // target <- $r4
1829  if ($r4===self::$FAILED) {
1830    $r1 = self::$FAILED;
1831    goto seq_1;
1832  }
1833  $r5 = $this->discard_($silence);
1834  if ($r5===self::$FAILED) {
1835    $this->currPos = $p3;
1836    $r1 = self::$FAILED;
1837    goto seq_1;
1838  }
1839  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "includes", $this->currPos, 8, false) === 0) {
1840    $r6 = "includes";
1841    $this->currPos += 8;
1842  } else {
1843    if (!$silence) {$this->fail(24);}
1844    $r6 = self::$FAILED;
1845    $this->currPos = $p3;
1846    $r1 = self::$FAILED;
1847    goto seq_1;
1848  }
1849  $r7 = $this->discardi_($silence);
1850  if ($r7===self::$FAILED) {
1851    $this->currPos = $p3;
1852    $r1 = self::$FAILED;
1853    goto seq_1;
1854  }
1855  $r8 = $this->parseidentifier($silence);
1856  // incl <- $r8
1857  if ($r8===self::$FAILED) {
1858    $this->currPos = $p3;
1859    $r1 = self::$FAILED;
1860    goto seq_1;
1861  }
1862  $r9 = $this->discard_($silence);
1863  if ($r9===self::$FAILED) {
1864    $this->currPos = $p3;
1865    $r1 = self::$FAILED;
1866    goto seq_1;
1867  }
1868  if (($this->input[$this->currPos] ?? null) === ";") {
1869    $this->currPos++;
1870    $r10 = ";";
1871  } else {
1872    if (!$silence) {$this->fail(19);}
1873    $r10 = self::$FAILED;
1874    $this->currPos = $p3;
1875    $r1 = self::$FAILED;
1876    goto seq_1;
1877  }
1878  $r11 = $this->discard_($silence);
1879  if ($r11===self::$FAILED) {
1880    $this->currPos = $p3;
1881    $r1 = self::$FAILED;
1882    goto seq_1;
1883  }
1884  $r1 = true;
1885  seq_1:
1886  if ($r1!==self::$FAILED) {
1887    $this->savedPos = $p2;
1888    $r1 = $this->a14($r4, $r8);
1889  }
1890  // free $p3
1891  return $r1;
1892}
1893private function parseExtendedAttributeNoArgs($silence) {
1894  $p2 = $this->currPos;
1895  // start seq_1
1896  $p3 = $this->currPos;
1897  $r4 = $this->parseidentifier($silence);
1898  // name <- $r4
1899  if ($r4===self::$FAILED) {
1900    $r1 = self::$FAILED;
1901    goto seq_1;
1902  }
1903  $r5 = $this->discard_($silence);
1904  if ($r5===self::$FAILED) {
1905    $this->currPos = $p3;
1906    $r1 = self::$FAILED;
1907    goto seq_1;
1908  }
1909  $p6 = $this->currPos;
1910  $r7 = $this->input[$this->currPos] ?? '';
1911  if ($r7 === "(" || $r7 === "=") {
1912    $this->currPos++;
1913  } else {
1914    $r7 = self::$FAILED;
1915  }
1916  if ($r7 === self::$FAILED) {
1917    $r7 = false;
1918  } else {
1919    $r7 = self::$FAILED;
1920    $this->currPos = $p6;
1921    $this->currPos = $p3;
1922    $r1 = self::$FAILED;
1923    goto seq_1;
1924  }
1925  // free $p6
1926  $r1 = true;
1927  seq_1:
1928  if ($r1!==self::$FAILED) {
1929    $this->savedPos = $p2;
1930    $r1 = $this->a15($r4);
1931  }
1932  // free $p3
1933  return $r1;
1934}
1935private function parseExtendedAttributeArgList($silence) {
1936  $p2 = $this->currPos;
1937  // start seq_1
1938  $p3 = $this->currPos;
1939  $r4 = $this->parseidentifier($silence);
1940  // name <- $r4
1941  if ($r4===self::$FAILED) {
1942    $r1 = self::$FAILED;
1943    goto seq_1;
1944  }
1945  $r5 = $this->discard_($silence);
1946  if ($r5===self::$FAILED) {
1947    $this->currPos = $p3;
1948    $r1 = self::$FAILED;
1949    goto seq_1;
1950  }
1951  if (($this->input[$this->currPos] ?? null) === "(") {
1952    $this->currPos++;
1953    $r6 = "(";
1954  } else {
1955    if (!$silence) {$this->fail(25);}
1956    $r6 = self::$FAILED;
1957    $this->currPos = $p3;
1958    $r1 = self::$FAILED;
1959    goto seq_1;
1960  }
1961  $r7 = $this->discard_($silence);
1962  if ($r7===self::$FAILED) {
1963    $this->currPos = $p3;
1964    $r1 = self::$FAILED;
1965    goto seq_1;
1966  }
1967  $r8 = $this->parseArgumentList($silence);
1968  // args <- $r8
1969  if ($r8===self::$FAILED) {
1970    $this->currPos = $p3;
1971    $r1 = self::$FAILED;
1972    goto seq_1;
1973  }
1974  if (($this->input[$this->currPos] ?? null) === ")") {
1975    $this->currPos++;
1976    $r9 = ")";
1977  } else {
1978    if (!$silence) {$this->fail(26);}
1979    $r9 = self::$FAILED;
1980    $this->currPos = $p3;
1981    $r1 = self::$FAILED;
1982    goto seq_1;
1983  }
1984  $r10 = $this->discard_($silence);
1985  if ($r10===self::$FAILED) {
1986    $this->currPos = $p3;
1987    $r1 = self::$FAILED;
1988    goto seq_1;
1989  }
1990  $r1 = true;
1991  seq_1:
1992  if ($r1!==self::$FAILED) {
1993    $this->savedPos = $p2;
1994    $r1 = $this->a16($r4, $r8);
1995  }
1996  // free $p3
1997  return $r1;
1998}
1999private function parseExtendedAttributeIdent($silence) {
2000  $p2 = $this->currPos;
2001  // start seq_1
2002  $p3 = $this->currPos;
2003  $r4 = $this->parseidentifier($silence);
2004  // name <- $r4
2005  if ($r4===self::$FAILED) {
2006    $r1 = self::$FAILED;
2007    goto seq_1;
2008  }
2009  $r5 = $this->discard_($silence);
2010  if ($r5===self::$FAILED) {
2011    $this->currPos = $p3;
2012    $r1 = self::$FAILED;
2013    goto seq_1;
2014  }
2015  if (($this->input[$this->currPos] ?? null) === "=") {
2016    $this->currPos++;
2017    $r6 = "=";
2018  } else {
2019    if (!$silence) {$this->fail(27);}
2020    $r6 = self::$FAILED;
2021    $this->currPos = $p3;
2022    $r1 = self::$FAILED;
2023    goto seq_1;
2024  }
2025  $r7 = $this->discard_($silence);
2026  if ($r7===self::$FAILED) {
2027    $this->currPos = $p3;
2028    $r1 = self::$FAILED;
2029    goto seq_1;
2030  }
2031  $r8 = $this->parseExtendedAttributeRHS($silence);
2032  // rhs <- $r8
2033  if ($r8===self::$FAILED) {
2034    $this->currPos = $p3;
2035    $r1 = self::$FAILED;
2036    goto seq_1;
2037  }
2038  $r1 = true;
2039  seq_1:
2040  if ($r1!==self::$FAILED) {
2041    $this->savedPos = $p2;
2042    $r1 = $this->a17($r4, $r8);
2043  }
2044  // free $p3
2045  return $r1;
2046}
2047private function parseExtendedAttributeNamedArgList($silence) {
2048  $p2 = $this->currPos;
2049  // start seq_1
2050  $p3 = $this->currPos;
2051  $r4 = $this->parseidentifier($silence);
2052  // name <- $r4
2053  if ($r4===self::$FAILED) {
2054    $r1 = self::$FAILED;
2055    goto seq_1;
2056  }
2057  $r5 = $this->discard_($silence);
2058  if ($r5===self::$FAILED) {
2059    $this->currPos = $p3;
2060    $r1 = self::$FAILED;
2061    goto seq_1;
2062  }
2063  if (($this->input[$this->currPos] ?? null) === "=") {
2064    $this->currPos++;
2065    $r6 = "=";
2066  } else {
2067    if (!$silence) {$this->fail(27);}
2068    $r6 = self::$FAILED;
2069    $this->currPos = $p3;
2070    $r1 = self::$FAILED;
2071    goto seq_1;
2072  }
2073  $r7 = $this->discard_($silence);
2074  if ($r7===self::$FAILED) {
2075    $this->currPos = $p3;
2076    $r1 = self::$FAILED;
2077    goto seq_1;
2078  }
2079  $r8 = $this->parseidentifier($silence);
2080  // rhs <- $r8
2081  if ($r8===self::$FAILED) {
2082    $this->currPos = $p3;
2083    $r1 = self::$FAILED;
2084    goto seq_1;
2085  }
2086  $r9 = $this->discard_($silence);
2087  if ($r9===self::$FAILED) {
2088    $this->currPos = $p3;
2089    $r1 = self::$FAILED;
2090    goto seq_1;
2091  }
2092  if (($this->input[$this->currPos] ?? null) === "(") {
2093    $this->currPos++;
2094    $r10 = "(";
2095  } else {
2096    if (!$silence) {$this->fail(25);}
2097    $r10 = self::$FAILED;
2098    $this->currPos = $p3;
2099    $r1 = self::$FAILED;
2100    goto seq_1;
2101  }
2102  $r11 = $this->discard_($silence);
2103  if ($r11===self::$FAILED) {
2104    $this->currPos = $p3;
2105    $r1 = self::$FAILED;
2106    goto seq_1;
2107  }
2108  $r12 = $this->parseArgumentList($silence);
2109  // args <- $r12
2110  if ($r12===self::$FAILED) {
2111    $this->currPos = $p3;
2112    $r1 = self::$FAILED;
2113    goto seq_1;
2114  }
2115  if (($this->input[$this->currPos] ?? null) === ")") {
2116    $this->currPos++;
2117    $r13 = ")";
2118  } else {
2119    if (!$silence) {$this->fail(26);}
2120    $r13 = self::$FAILED;
2121    $this->currPos = $p3;
2122    $r1 = self::$FAILED;
2123    goto seq_1;
2124  }
2125  $r14 = $this->discard_($silence);
2126  if ($r14===self::$FAILED) {
2127    $this->currPos = $p3;
2128    $r1 = self::$FAILED;
2129    goto seq_1;
2130  }
2131  $r1 = true;
2132  seq_1:
2133  if ($r1!==self::$FAILED) {
2134    $this->savedPos = $p2;
2135    $r1 = $this->a18($r4, $r8, $r12);
2136  }
2137  // free $p3
2138  return $r1;
2139}
2140private function discardSpecCompliantExtendedAttribute($silence) {
2141  // start choice_1
2142  // start seq_1
2143  $p2 = $this->currPos;
2144  if (($this->input[$this->currPos] ?? null) === "(") {
2145    $this->currPos++;
2146    $r3 = "(";
2147  } else {
2148    if (!$silence) {$this->fail(25);}
2149    $r3 = self::$FAILED;
2150    $r1 = self::$FAILED;
2151    goto seq_1;
2152  }
2153  $r4 = $this->discard_($silence);
2154  if ($r4===self::$FAILED) {
2155    $this->currPos = $p2;
2156    $r1 = self::$FAILED;
2157    goto seq_1;
2158  }
2159  $r5 = $this->discardExtendedAttributeInner($silence);
2160  if ($r5===self::$FAILED) {
2161    $this->currPos = $p2;
2162    $r1 = self::$FAILED;
2163    goto seq_1;
2164  }
2165  if (($this->input[$this->currPos] ?? null) === ")") {
2166    $this->currPos++;
2167    $r6 = ")";
2168  } else {
2169    if (!$silence) {$this->fail(26);}
2170    $r6 = self::$FAILED;
2171    $this->currPos = $p2;
2172    $r1 = self::$FAILED;
2173    goto seq_1;
2174  }
2175  $r7 = $this->discard_($silence);
2176  if ($r7===self::$FAILED) {
2177    $this->currPos = $p2;
2178    $r1 = self::$FAILED;
2179    goto seq_1;
2180  }
2181  $r8 = $this->discardExtendedAttributeRest($silence);
2182  if ($r8===self::$FAILED) {
2183    $this->currPos = $p2;
2184    $r1 = self::$FAILED;
2185    goto seq_1;
2186  }
2187  $r1 = true;
2188  seq_1:
2189  if ($r1!==self::$FAILED) {
2190    goto choice_1;
2191  }
2192  // free $p2
2193  // start seq_2
2194  $p2 = $this->currPos;
2195  if (($this->input[$this->currPos] ?? null) === "[") {
2196    $this->currPos++;
2197    $r9 = "[";
2198  } else {
2199    if (!$silence) {$this->fail(8);}
2200    $r9 = self::$FAILED;
2201    $r1 = self::$FAILED;
2202    goto seq_2;
2203  }
2204  $r10 = $this->discard_($silence);
2205  if ($r10===self::$FAILED) {
2206    $this->currPos = $p2;
2207    $r1 = self::$FAILED;
2208    goto seq_2;
2209  }
2210  $r11 = $this->discardExtendedAttributeInner($silence);
2211  if ($r11===self::$FAILED) {
2212    $this->currPos = $p2;
2213    $r1 = self::$FAILED;
2214    goto seq_2;
2215  }
2216  if (($this->input[$this->currPos] ?? null) === "]") {
2217    $this->currPos++;
2218    $r12 = "]";
2219  } else {
2220    if (!$silence) {$this->fail(9);}
2221    $r12 = self::$FAILED;
2222    $this->currPos = $p2;
2223    $r1 = self::$FAILED;
2224    goto seq_2;
2225  }
2226  $r13 = $this->discard_($silence);
2227  if ($r13===self::$FAILED) {
2228    $this->currPos = $p2;
2229    $r1 = self::$FAILED;
2230    goto seq_2;
2231  }
2232  $r14 = $this->discardExtendedAttributeRest($silence);
2233  if ($r14===self::$FAILED) {
2234    $this->currPos = $p2;
2235    $r1 = self::$FAILED;
2236    goto seq_2;
2237  }
2238  $r1 = true;
2239  seq_2:
2240  if ($r1!==self::$FAILED) {
2241    goto choice_1;
2242  }
2243  // free $p2
2244  // start seq_3
2245  $p2 = $this->currPos;
2246  if (($this->input[$this->currPos] ?? null) === "{") {
2247    $this->currPos++;
2248    $r15 = "{";
2249  } else {
2250    if (!$silence) {$this->fail(17);}
2251    $r15 = self::$FAILED;
2252    $r1 = self::$FAILED;
2253    goto seq_3;
2254  }
2255  $r16 = $this->discard_($silence);
2256  if ($r16===self::$FAILED) {
2257    $this->currPos = $p2;
2258    $r1 = self::$FAILED;
2259    goto seq_3;
2260  }
2261  $r17 = $this->discardExtendedAttributeInner($silence);
2262  if ($r17===self::$FAILED) {
2263    $this->currPos = $p2;
2264    $r1 = self::$FAILED;
2265    goto seq_3;
2266  }
2267  if (($this->input[$this->currPos] ?? null) === "}") {
2268    $this->currPos++;
2269    $r18 = "}";
2270  } else {
2271    if (!$silence) {$this->fail(18);}
2272    $r18 = self::$FAILED;
2273    $this->currPos = $p2;
2274    $r1 = self::$FAILED;
2275    goto seq_3;
2276  }
2277  $r19 = $this->discard_($silence);
2278  if ($r19===self::$FAILED) {
2279    $this->currPos = $p2;
2280    $r1 = self::$FAILED;
2281    goto seq_3;
2282  }
2283  $r20 = $this->discardExtendedAttributeRest($silence);
2284  if ($r20===self::$FAILED) {
2285    $this->currPos = $p2;
2286    $r1 = self::$FAILED;
2287    goto seq_3;
2288  }
2289  $r1 = true;
2290  seq_3:
2291  if ($r1!==self::$FAILED) {
2292    goto choice_1;
2293  }
2294  // free $p2
2295  // start seq_4
2296  $p2 = $this->currPos;
2297  $r21 = self::$FAILED;
2298  for (;;) {
2299    $r22 = $this->discardOther($silence);
2300    if ($r22!==self::$FAILED) {
2301      $r21 = true;
2302    } else {
2303      break;
2304    }
2305  }
2306  if ($r21===self::$FAILED) {
2307    $r1 = self::$FAILED;
2308    goto seq_4;
2309  }
2310  // free $r22
2311  $r22 = $this->discardExtendedAttributeRest($silence);
2312  if ($r22===self::$FAILED) {
2313    $this->currPos = $p2;
2314    $r1 = self::$FAILED;
2315    goto seq_4;
2316  }
2317  $r1 = true;
2318  seq_4:
2319  // free $p2
2320  choice_1:
2321  return $r1;
2322}
2323private function discardi_($silence) {
2324  $p2 = $this->currPos;
2325  // start seq_1
2326  $p3 = $this->currPos;
2327  $p4 = $this->currPos;
2328  $r5 = $this->input[$this->currPos] ?? '';
2329  if (preg_match("/^[\\-_0-9A-Za-z]/", $r5)) {
2330    $this->currPos++;
2331  } else {
2332    $r5 = self::$FAILED;
2333  }
2334  if ($r5 === self::$FAILED) {
2335    $r5 = false;
2336  } else {
2337    $r5 = self::$FAILED;
2338    $this->currPos = $p4;
2339    $r1 = self::$FAILED;
2340    goto seq_1;
2341  }
2342  // free $p4
2343  $r6 = $this->parse_($silence);
2344  // c <- $r6
2345  if ($r6===self::$FAILED) {
2346    $this->currPos = $p3;
2347    $r1 = self::$FAILED;
2348    goto seq_1;
2349  }
2350  $r1 = true;
2351  seq_1:
2352  if ($r1!==self::$FAILED) {
2353    $this->savedPos = $p2;
2354    $r1 = $this->a7($r6);
2355  }
2356  // free $p3
2357  return $r1;
2358}
2359private function parseCallbackRestOrInterface($silence) {
2360  // start choice_1
2361  $r1 = $this->parseCallbackRest($silence);
2362  if ($r1!==self::$FAILED) {
2363    goto choice_1;
2364  }
2365  $p2 = $this->currPos;
2366  // start seq_1
2367  $p3 = $this->currPos;
2368  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "interface", $this->currPos, 9, false) === 0) {
2369    $r4 = "interface";
2370    $this->currPos += 9;
2371  } else {
2372    if (!$silence) {$this->fail(15);}
2373    $r4 = self::$FAILED;
2374    $r1 = self::$FAILED;
2375    goto seq_1;
2376  }
2377  $r5 = $this->discardi_($silence);
2378  if ($r5===self::$FAILED) {
2379    $this->currPos = $p3;
2380    $r1 = self::$FAILED;
2381    goto seq_1;
2382  }
2383  $r6 = $this->parseidentifier($silence);
2384  // name <- $r6
2385  if ($r6===self::$FAILED) {
2386    $this->currPos = $p3;
2387    $r1 = self::$FAILED;
2388    goto seq_1;
2389  }
2390  $r7 = $this->discard_($silence);
2391  if ($r7===self::$FAILED) {
2392    $this->currPos = $p3;
2393    $r1 = self::$FAILED;
2394    goto seq_1;
2395  }
2396  if (($this->input[$this->currPos] ?? null) === "{") {
2397    $this->currPos++;
2398    $r8 = "{";
2399  } else {
2400    if (!$silence) {$this->fail(17);}
2401    $r8 = self::$FAILED;
2402    $this->currPos = $p3;
2403    $r1 = self::$FAILED;
2404    goto seq_1;
2405  }
2406  $r9 = $this->discard_($silence);
2407  if ($r9===self::$FAILED) {
2408    $this->currPos = $p3;
2409    $r1 = self::$FAILED;
2410    goto seq_1;
2411  }
2412  $r10 = $this->parseCallbackInterfaceMembers($silence);
2413  // m <- $r10
2414  if ($r10===self::$FAILED) {
2415    $this->currPos = $p3;
2416    $r1 = self::$FAILED;
2417    goto seq_1;
2418  }
2419  if (($this->input[$this->currPos] ?? null) === "}") {
2420    $this->currPos++;
2421    $r11 = "}";
2422  } else {
2423    if (!$silence) {$this->fail(18);}
2424    $r11 = self::$FAILED;
2425    $this->currPos = $p3;
2426    $r1 = self::$FAILED;
2427    goto seq_1;
2428  }
2429  $r12 = $this->discard_($silence);
2430  if ($r12===self::$FAILED) {
2431    $this->currPos = $p3;
2432    $r1 = self::$FAILED;
2433    goto seq_1;
2434  }
2435  if (($this->input[$this->currPos] ?? null) === ";") {
2436    $this->currPos++;
2437    $r13 = ";";
2438  } else {
2439    if (!$silence) {$this->fail(19);}
2440    $r13 = self::$FAILED;
2441    $this->currPos = $p3;
2442    $r1 = self::$FAILED;
2443    goto seq_1;
2444  }
2445  $r14 = $this->discard_($silence);
2446  if ($r14===self::$FAILED) {
2447    $this->currPos = $p3;
2448    $r1 = self::$FAILED;
2449    goto seq_1;
2450  }
2451  $r1 = true;
2452  seq_1:
2453  if ($r1!==self::$FAILED) {
2454    $this->savedPos = $p2;
2455    $r1 = $this->a19($r6, $r10);
2456  }
2457  // free $p3
2458  choice_1:
2459  return $r1;
2460}
2461private function parseInterfaceOrMixin($silence) {
2462  // start choice_1
2463  $r1 = $this->parseInterfaceRest($silence);
2464  if ($r1!==self::$FAILED) {
2465    goto choice_1;
2466  }
2467  $r1 = $this->parseMixinRest($silence);
2468  choice_1:
2469  return $r1;
2470}
2471private function parseidentifier($silence) {
2472  $p2 = $this->currPos;
2473  // start seq_1
2474  $p3 = $this->currPos;
2475  $p4 = $this->currPos;
2476  // start choice_1
2477  $r5 = $this->discardArgumentNameKeyword(true);
2478  if ($r5!==self::$FAILED) {
2479    goto choice_1;
2480  }
2481  $r5 = $this->discardBufferRelatedType(true);
2482  if ($r5!==self::$FAILED) {
2483    goto choice_1;
2484  }
2485  $r5 = $this->discardOtherIdLike(true);
2486  choice_1:
2487  if ($r5 === self::$FAILED) {
2488    $r5 = false;
2489  } else {
2490    $r5 = self::$FAILED;
2491    $this->currPos = $p4;
2492    $r1 = self::$FAILED;
2493    goto seq_1;
2494  }
2495  // free $p4
2496  $p4 = $this->currPos;
2497  // start seq_2
2498  $p7 = $this->currPos;
2499  // start choice_2
2500  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "_constructor", $this->currPos, 12, false) === 0) {
2501    $r8 = "_constructor";
2502    $this->currPos += 12;
2503    goto choice_2;
2504  } else {
2505    $r8 = self::$FAILED;
2506  }
2507  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "_toString", $this->currPos, 9, false) === 0) {
2508    $r8 = "_toString";
2509    $this->currPos += 9;
2510    goto choice_2;
2511  } else {
2512    $r8 = self::$FAILED;
2513  }
2514  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "toString", $this->currPos, 8, false) === 0) {
2515    $r8 = "toString";
2516    $this->currPos += 8;
2517  } else {
2518    $r8 = self::$FAILED;
2519  }
2520  choice_2:
2521  if ($r8===self::$FAILED) {
2522    $r6 = self::$FAILED;
2523    goto seq_2;
2524  }
2525  $r9 = $this->discardi_(true);
2526  if ($r9===self::$FAILED) {
2527    $this->currPos = $p7;
2528    $r6 = self::$FAILED;
2529    goto seq_2;
2530  }
2531  $r6 = true;
2532  seq_2:
2533  // free $p7
2534  if ($r6 === self::$FAILED) {
2535    $r6 = false;
2536  } else {
2537    $r6 = self::$FAILED;
2538    $this->currPos = $p4;
2539    $this->currPos = $p3;
2540    $r1 = self::$FAILED;
2541    goto seq_1;
2542  }
2543  // free $p4
2544  $p4 = $this->currPos;
2545  // start seq_3
2546  $p7 = $this->currPos;
2547  $r11 = $this->input[$this->currPos] ?? '';
2548  if ($r11 === "-" || $r11 === "_") {
2549    $this->currPos++;
2550  } else {
2551    $r11 = self::$FAILED;
2552    if (!$silence) {$this->fail(28);}
2553    $r11 = null;
2554  }
2555  $r12 = $this->input[$this->currPos] ?? '';
2556  if (preg_match("/^[A-Za-z]/", $r12)) {
2557    $this->currPos++;
2558  } else {
2559    $r12 = self::$FAILED;
2560    if (!$silence) {$this->fail(29);}
2561    $this->currPos = $p7;
2562    $r10 = self::$FAILED;
2563    goto seq_3;
2564  }
2565  for (;;) {
2566    $r14 = $this->input[$this->currPos] ?? '';
2567    if (preg_match("/^[\\-_0-9A-Za-z]/", $r14)) {
2568      $this->currPos++;
2569    } else {
2570      $r14 = self::$FAILED;
2571      if (!$silence) {$this->fail(30);}
2572      break;
2573    }
2574  }
2575  // free $r14
2576  $r13 = true;
2577  if ($r13===self::$FAILED) {
2578    $this->currPos = $p7;
2579    $r10 = self::$FAILED;
2580    goto seq_3;
2581  }
2582  // free $r13
2583  $r10 = true;
2584  seq_3:
2585  // s <- $r10
2586  if ($r10!==self::$FAILED) {
2587    $r10 = substr($this->input, $p4, $this->currPos - $p4);
2588  } else {
2589    $r10 = self::$FAILED;
2590    $this->currPos = $p3;
2591    $r1 = self::$FAILED;
2592    goto seq_1;
2593  }
2594  // free $p7
2595  // free $p4
2596  $r1 = true;
2597  seq_1:
2598  if ($r1!==self::$FAILED) {
2599    $this->savedPos = $p2;
2600    $r1 = $this->a20($r10);
2601  }
2602  // free $p3
2603  return $r1;
2604}
2605private function parseNamespaceMembers($silence) {
2606  $r1 = [];
2607  for (;;) {
2608    $p3 = $this->currPos;
2609    // start seq_1
2610    $p4 = $this->currPos;
2611    $r5 = $this->parseleadingComments($silence);
2612    // c <- $r5
2613    if ($r5===self::$FAILED) {
2614      $r2 = self::$FAILED;
2615      goto seq_1;
2616    }
2617    $r6 = $this->parseExtendedAttributeList($silence);
2618    // e <- $r6
2619    if ($r6===self::$FAILED) {
2620      $this->currPos = $p4;
2621      $r2 = self::$FAILED;
2622      goto seq_1;
2623    }
2624    $r7 = $this->parseNamespaceMember($silence);
2625    // m <- $r7
2626    if ($r7===self::$FAILED) {
2627      $this->currPos = $p4;
2628      $r2 = self::$FAILED;
2629      goto seq_1;
2630    }
2631    $r2 = true;
2632    seq_1:
2633    if ($r2!==self::$FAILED) {
2634      $this->savedPos = $p3;
2635      $r2 = $this->a21($r5, $r6, $r7);
2636      $r1[] = $r2;
2637    } else {
2638      break;
2639    }
2640    // free $p4
2641  }
2642  // free $r2
2643  return $r1;
2644}
2645private function parsePartialDefinition($silence) {
2646  // start choice_1
2647  $p2 = $this->currPos;
2648  // start seq_1
2649  $p3 = $this->currPos;
2650  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "interface", $this->currPos, 9, false) === 0) {
2651    $r4 = "interface";
2652    $this->currPos += 9;
2653  } else {
2654    if (!$silence) {$this->fail(15);}
2655    $r4 = self::$FAILED;
2656    $r1 = self::$FAILED;
2657    goto seq_1;
2658  }
2659  $r5 = $this->discardi_($silence);
2660  if ($r5===self::$FAILED) {
2661    $this->currPos = $p3;
2662    $r1 = self::$FAILED;
2663    goto seq_1;
2664  }
2665  $r6 = $this->parsePartialInterfaceOrPartialMixin($silence);
2666  // p <- $r6
2667  if ($r6===self::$FAILED) {
2668    $this->currPos = $p3;
2669    $r1 = self::$FAILED;
2670    goto seq_1;
2671  }
2672  $r1 = true;
2673  seq_1:
2674  if ($r1!==self::$FAILED) {
2675    $this->savedPos = $p2;
2676    $r1 = $this->a22($r6);
2677    goto choice_1;
2678  }
2679  // free $p3
2680  $r1 = $this->parsePartialDictionary($silence);
2681  if ($r1!==self::$FAILED) {
2682    goto choice_1;
2683  }
2684  $r1 = $this->parseNamespace($silence);
2685  choice_1:
2686  return $r1;
2687}
2688private function parseInheritance($silence) {
2689  $p2 = $this->currPos;
2690  // start seq_1
2691  $p3 = $this->currPos;
2692  if (($this->input[$this->currPos] ?? null) === ":") {
2693    $this->currPos++;
2694    $r4 = ":";
2695  } else {
2696    if (!$silence) {$this->fail(31);}
2697    $r4 = self::$FAILED;
2698    $r1 = self::$FAILED;
2699    goto seq_1;
2700  }
2701  $r5 = $this->discard_($silence);
2702  if ($r5===self::$FAILED) {
2703    $this->currPos = $p3;
2704    $r1 = self::$FAILED;
2705    goto seq_1;
2706  }
2707  $r6 = $this->parseidentifier($silence);
2708  // name <- $r6
2709  if ($r6===self::$FAILED) {
2710    $this->currPos = $p3;
2711    $r1 = self::$FAILED;
2712    goto seq_1;
2713  }
2714  $r7 = $this->discard_($silence);
2715  if ($r7===self::$FAILED) {
2716    $this->currPos = $p3;
2717    $r1 = self::$FAILED;
2718    goto seq_1;
2719  }
2720  $r1 = true;
2721  seq_1:
2722  if ($r1!==self::$FAILED) {
2723    $this->savedPos = $p2;
2724    $r1 = $this->a23($r6);
2725  } else {
2726    $r1 = null;
2727  }
2728  // free $p3
2729  return $r1;
2730}
2731private function parseDictionaryMembers($silence) {
2732  $r1 = [];
2733  for (;;) {
2734    $p3 = $this->currPos;
2735    // start seq_1
2736    $p4 = $this->currPos;
2737    $r5 = $this->parseleadingComments($silence);
2738    // c <- $r5
2739    if ($r5===self::$FAILED) {
2740      $r2 = self::$FAILED;
2741      goto seq_1;
2742    }
2743    $r6 = $this->parseExtendedAttributeList($silence);
2744    // e <- $r6
2745    if ($r6===self::$FAILED) {
2746      $this->currPos = $p4;
2747      $r2 = self::$FAILED;
2748      goto seq_1;
2749    }
2750    $r7 = $this->parseDictionaryMemberRest($silence);
2751    // m <- $r7
2752    if ($r7===self::$FAILED) {
2753      $this->currPos = $p4;
2754      $r2 = self::$FAILED;
2755      goto seq_1;
2756    }
2757    $r2 = true;
2758    seq_1:
2759    if ($r2!==self::$FAILED) {
2760      $this->savedPos = $p3;
2761      $r2 = $this->a21($r5, $r6, $r7);
2762      $r1[] = $r2;
2763    } else {
2764      break;
2765    }
2766    // free $p4
2767  }
2768  // free $r2
2769  return $r1;
2770}
2771private function parseEnumValueList($silence) {
2772  $p2 = $this->currPos;
2773  // start seq_1
2774  $p3 = $this->currPos;
2775  $r4 = $this->parsestring($silence);
2776  // s <- $r4
2777  if ($r4===self::$FAILED) {
2778    $r1 = self::$FAILED;
2779    goto seq_1;
2780  }
2781  $r5 = $this->discard_($silence);
2782  if ($r5===self::$FAILED) {
2783    $this->currPos = $p3;
2784    $r1 = self::$FAILED;
2785    goto seq_1;
2786  }
2787  $r6 = $this->parseEnumValueListComma($silence);
2788  // vals <- $r6
2789  if ($r6===self::$FAILED) {
2790    $this->currPos = $p3;
2791    $r1 = self::$FAILED;
2792    goto seq_1;
2793  }
2794  $r1 = true;
2795  seq_1:
2796  if ($r1!==self::$FAILED) {
2797    $this->savedPos = $p2;
2798    $r1 = $this->a24($r4, $r6);
2799  }
2800  // free $p3
2801  return $r1;
2802}
2803private function parseTypeWithExtendedAttributes($silence) {
2804  $p2 = $this->currPos;
2805  // start seq_1
2806  $p3 = $this->currPos;
2807  $r4 = $this->parseExtendedAttributeList($silence);
2808  // e <- $r4
2809  if ($r4===self::$FAILED) {
2810    $r1 = self::$FAILED;
2811    goto seq_1;
2812  }
2813  $r5 = $this->parseType($silence);
2814  // t <- $r5
2815  if ($r5===self::$FAILED) {
2816    $this->currPos = $p3;
2817    $r1 = self::$FAILED;
2818    goto seq_1;
2819  }
2820  $r1 = true;
2821  seq_1:
2822  if ($r1!==self::$FAILED) {
2823    $this->savedPos = $p2;
2824    $r1 = $this->a25($r4, $r5);
2825  }
2826  // free $p3
2827  return $r1;
2828}
2829private function parseArgumentList($silence) {
2830  // start choice_1
2831  $p2 = $this->currPos;
2832  // start seq_1
2833  $p3 = $this->currPos;
2834  $r4 = $this->parseArgument($silence);
2835  // a <- $r4
2836  if ($r4===self::$FAILED) {
2837    $r1 = self::$FAILED;
2838    goto seq_1;
2839  }
2840  $r5 = $this->parseArguments($silence);
2841  // rest <- $r5
2842  if ($r5===self::$FAILED) {
2843    $this->currPos = $p3;
2844    $r1 = self::$FAILED;
2845    goto seq_1;
2846  }
2847  $r1 = true;
2848  seq_1:
2849  if ($r1!==self::$FAILED) {
2850    $this->savedPos = $p2;
2851    $r1 = $this->a26($r4, $r5);
2852    goto choice_1;
2853  }
2854  // free $p3
2855  $p3 = $this->currPos;
2856  $r1 = '';
2857  if ($r1!==self::$FAILED) {
2858    $this->savedPos = $p3;
2859    $r1 = $this->a5();
2860  }
2861  choice_1:
2862  return $r1;
2863}
2864private function parseExtendedAttributeRHS($silence) {
2865  // start choice_1
2866  $p2 = $this->currPos;
2867  // start seq_1
2868  $p3 = $this->currPos;
2869  $r4 = $this->parseidentifier($silence);
2870  // rhs <- $r4
2871  if ($r4===self::$FAILED) {
2872    $r1 = self::$FAILED;
2873    goto seq_1;
2874  }
2875  $r5 = $this->discard_($silence);
2876  if ($r5===self::$FAILED) {
2877    $this->currPos = $p3;
2878    $r1 = self::$FAILED;
2879    goto seq_1;
2880  }
2881  $p6 = $this->currPos;
2882  if (($this->input[$this->currPos] ?? null) === "(") {
2883    $this->currPos++;
2884    $r7 = "(";
2885  } else {
2886    $r7 = self::$FAILED;
2887  }
2888  if ($r7 === self::$FAILED) {
2889    $r7 = false;
2890  } else {
2891    $r7 = self::$FAILED;
2892    $this->currPos = $p6;
2893    $this->currPos = $p3;
2894    $r1 = self::$FAILED;
2895    goto seq_1;
2896  }
2897  // free $p6
2898  $r1 = true;
2899  seq_1:
2900  if ($r1!==self::$FAILED) {
2901    $this->savedPos = $p2;
2902    $r1 = $this->a27($r4);
2903    goto choice_1;
2904  }
2905  // free $p3
2906  $p3 = $this->currPos;
2907  // start seq_2
2908  $p6 = $this->currPos;
2909  if (($this->input[$this->currPos] ?? null) === "(") {
2910    $this->currPos++;
2911    $r8 = "(";
2912  } else {
2913    if (!$silence) {$this->fail(25);}
2914    $r8 = self::$FAILED;
2915    $r1 = self::$FAILED;
2916    goto seq_2;
2917  }
2918  $r9 = $this->discard_($silence);
2919  if ($r9===self::$FAILED) {
2920    $this->currPos = $p6;
2921    $r1 = self::$FAILED;
2922    goto seq_2;
2923  }
2924  $r10 = $this->parseidentifier($silence);
2925  // s <- $r10
2926  if ($r10===self::$FAILED) {
2927    $this->currPos = $p6;
2928    $r1 = self::$FAILED;
2929    goto seq_2;
2930  }
2931  $r11 = $this->discard_($silence);
2932  if ($r11===self::$FAILED) {
2933    $this->currPos = $p6;
2934    $r1 = self::$FAILED;
2935    goto seq_2;
2936  }
2937  $r12 = [];
2938  for (;;) {
2939    $p14 = $this->currPos;
2940    // start seq_3
2941    $p15 = $this->currPos;
2942    if (($this->input[$this->currPos] ?? null) === ",") {
2943      $this->currPos++;
2944      $r16 = ",";
2945    } else {
2946      if (!$silence) {$this->fail(13);}
2947      $r16 = self::$FAILED;
2948      $r13 = self::$FAILED;
2949      goto seq_3;
2950    }
2951    $r17 = $this->discard_($silence);
2952    if ($r17===self::$FAILED) {
2953      $this->currPos = $p15;
2954      $r13 = self::$FAILED;
2955      goto seq_3;
2956    }
2957    $r18 = $this->parseidentifier($silence);
2958    // s2 <- $r18
2959    if ($r18===self::$FAILED) {
2960      $this->currPos = $p15;
2961      $r13 = self::$FAILED;
2962      goto seq_3;
2963    }
2964    $r19 = $this->discard_($silence);
2965    if ($r19===self::$FAILED) {
2966      $this->currPos = $p15;
2967      $r13 = self::$FAILED;
2968      goto seq_3;
2969    }
2970    $r13 = true;
2971    seq_3:
2972    if ($r13!==self::$FAILED) {
2973      $this->savedPos = $p14;
2974      $r13 = $this->a28($r10, $r18);
2975      $r12[] = $r13;
2976    } else {
2977      break;
2978    }
2979    // free $p15
2980  }
2981  // rest <- $r12
2982  // free $r13
2983  if (($this->input[$this->currPos] ?? null) === ")") {
2984    $this->currPos++;
2985    $r13 = ")";
2986  } else {
2987    if (!$silence) {$this->fail(26);}
2988    $r13 = self::$FAILED;
2989    $this->currPos = $p6;
2990    $r1 = self::$FAILED;
2991    goto seq_2;
2992  }
2993  $r20 = $this->discard_($silence);
2994  if ($r20===self::$FAILED) {
2995    $this->currPos = $p6;
2996    $r1 = self::$FAILED;
2997    goto seq_2;
2998  }
2999  $r1 = true;
3000  seq_2:
3001  if ($r1!==self::$FAILED) {
3002    $this->savedPos = $p3;
3003    $r1 = $this->a29($r10, $r12);
3004    goto choice_1;
3005  }
3006  // free $p6
3007  $p6 = $this->currPos;
3008  // start seq_4
3009  $p15 = $this->currPos;
3010  $p22 = $this->currPos;
3011  $r21 = $this->discardstring($silence);
3012  // s <- $r21
3013  if ($r21!==self::$FAILED) {
3014    $r21 = substr($this->input, $p22, $this->currPos - $p22);
3015  } else {
3016    $r21 = self::$FAILED;
3017    $r1 = self::$FAILED;
3018    goto seq_4;
3019  }
3020  // free $p22
3021  $r23 = $this->discard_($silence);
3022  if ($r23===self::$FAILED) {
3023    $this->currPos = $p15;
3024    $r1 = self::$FAILED;
3025    goto seq_4;
3026  }
3027  $r1 = true;
3028  seq_4:
3029  if ($r1!==self::$FAILED) {
3030    $this->savedPos = $p6;
3031    $r1 = $this->a30($r21);
3032    goto choice_1;
3033  }
3034  // free $p15
3035  $p15 = $this->currPos;
3036  // start seq_5
3037  $p22 = $this->currPos;
3038  if (($this->input[$this->currPos] ?? null) === "(") {
3039    $this->currPos++;
3040    $r24 = "(";
3041  } else {
3042    if (!$silence) {$this->fail(25);}
3043    $r24 = self::$FAILED;
3044    $r1 = self::$FAILED;
3045    goto seq_5;
3046  }
3047  $r25 = $this->discard_($silence);
3048  if ($r25===self::$FAILED) {
3049    $this->currPos = $p22;
3050    $r1 = self::$FAILED;
3051    goto seq_5;
3052  }
3053  $p27 = $this->currPos;
3054  $r26 = $this->discardstring($silence);
3055  // s <- $r26
3056  if ($r26!==self::$FAILED) {
3057    $r26 = substr($this->input, $p27, $this->currPos - $p27);
3058  } else {
3059    $r26 = self::$FAILED;
3060    $this->currPos = $p22;
3061    $r1 = self::$FAILED;
3062    goto seq_5;
3063  }
3064  // free $p27
3065  $r28 = $this->discard_($silence);
3066  if ($r28===self::$FAILED) {
3067    $this->currPos = $p22;
3068    $r1 = self::$FAILED;
3069    goto seq_5;
3070  }
3071  $r29 = [];
3072  for (;;) {
3073    $p27 = $this->currPos;
3074    // start seq_6
3075    $p31 = $this->currPos;
3076    if (($this->input[$this->currPos] ?? null) === ",") {
3077      $this->currPos++;
3078      $r32 = ",";
3079    } else {
3080      if (!$silence) {$this->fail(13);}
3081      $r32 = self::$FAILED;
3082      $r30 = self::$FAILED;
3083      goto seq_6;
3084    }
3085    $r33 = $this->discard_($silence);
3086    if ($r33===self::$FAILED) {
3087      $this->currPos = $p31;
3088      $r30 = self::$FAILED;
3089      goto seq_6;
3090    }
3091    $p35 = $this->currPos;
3092    $r34 = $this->discardstring($silence);
3093    // s2 <- $r34
3094    if ($r34!==self::$FAILED) {
3095      $r34 = substr($this->input, $p35, $this->currPos - $p35);
3096    } else {
3097      $r34 = self::$FAILED;
3098      $this->currPos = $p31;
3099      $r30 = self::$FAILED;
3100      goto seq_6;
3101    }
3102    // free $p35
3103    $r36 = $this->discard_($silence);
3104    if ($r36===self::$FAILED) {
3105      $this->currPos = $p31;
3106      $r30 = self::$FAILED;
3107      goto seq_6;
3108    }
3109    $r30 = true;
3110    seq_6:
3111    if ($r30!==self::$FAILED) {
3112      $this->savedPos = $p27;
3113      $r30 = $this->a28($r26, $r34);
3114      $r29[] = $r30;
3115    } else {
3116      break;
3117    }
3118    // free $p31
3119  }
3120  // rest <- $r29
3121  // free $r30
3122  if (($this->input[$this->currPos] ?? null) === ")") {
3123    $this->currPos++;
3124    $r30 = ")";
3125  } else {
3126    if (!$silence) {$this->fail(26);}
3127    $r30 = self::$FAILED;
3128    $this->currPos = $p22;
3129    $r1 = self::$FAILED;
3130    goto seq_5;
3131  }
3132  $r37 = $this->discard_($silence);
3133  if ($r37===self::$FAILED) {
3134    $this->currPos = $p22;
3135    $r1 = self::$FAILED;
3136    goto seq_5;
3137  }
3138  $r1 = true;
3139  seq_5:
3140  if ($r1!==self::$FAILED) {
3141    $this->savedPos = $p15;
3142    $r1 = $this->a31($r26, $r29);
3143    goto choice_1;
3144  }
3145  // free $p22
3146  $p22 = $this->currPos;
3147  // start seq_7
3148  $p31 = $this->currPos;
3149  $p35 = $this->currPos;
3150  $r38 = $this->discardinteger($silence);
3151  // s <- $r38
3152  if ($r38!==self::$FAILED) {
3153    $r38 = substr($this->input, $p35, $this->currPos - $p35);
3154  } else {
3155    $r38 = self::$FAILED;
3156    $r1 = self::$FAILED;
3157    goto seq_7;
3158  }
3159  // free $p35
3160  $r39 = $this->discard_($silence);
3161  if ($r39===self::$FAILED) {
3162    $this->currPos = $p31;
3163    $r1 = self::$FAILED;
3164    goto seq_7;
3165  }
3166  $p35 = $this->currPos;
3167  if (($this->input[$this->currPos] ?? null) === ".") {
3168    $this->currPos++;
3169    $r40 = ".";
3170  } else {
3171    $r40 = self::$FAILED;
3172  }
3173  if ($r40 === self::$FAILED) {
3174    $r40 = false;
3175  } else {
3176    $r40 = self::$FAILED;
3177    $this->currPos = $p35;
3178    $this->currPos = $p31;
3179    $r1 = self::$FAILED;
3180    goto seq_7;
3181  }
3182  // free $p35
3183  $r1 = true;
3184  seq_7:
3185  if ($r1!==self::$FAILED) {
3186    $this->savedPos = $p22;
3187    $r1 = $this->a32($r38);
3188    goto choice_1;
3189  }
3190  // free $p31
3191  $p31 = $this->currPos;
3192  // start seq_8
3193  $p35 = $this->currPos;
3194  if (($this->input[$this->currPos] ?? null) === "(") {
3195    $this->currPos++;
3196    $r41 = "(";
3197  } else {
3198    if (!$silence) {$this->fail(25);}
3199    $r41 = self::$FAILED;
3200    $r1 = self::$FAILED;
3201    goto seq_8;
3202  }
3203  $r42 = $this->discard_($silence);
3204  if ($r42===self::$FAILED) {
3205    $this->currPos = $p35;
3206    $r1 = self::$FAILED;
3207    goto seq_8;
3208  }
3209  $p44 = $this->currPos;
3210  $r43 = $this->discardinteger($silence);
3211  // s <- $r43
3212  if ($r43!==self::$FAILED) {
3213    $r43 = substr($this->input, $p44, $this->currPos - $p44);
3214  } else {
3215    $r43 = self::$FAILED;
3216    $this->currPos = $p35;
3217    $r1 = self::$FAILED;
3218    goto seq_8;
3219  }
3220  // free $p44
3221  $r45 = $this->discard_($silence);
3222  if ($r45===self::$FAILED) {
3223    $this->currPos = $p35;
3224    $r1 = self::$FAILED;
3225    goto seq_8;
3226  }
3227  $r46 = [];
3228  for (;;) {
3229    $p44 = $this->currPos;
3230    // start seq_9
3231    $p48 = $this->currPos;
3232    if (($this->input[$this->currPos] ?? null) === ",") {
3233      $this->currPos++;
3234      $r49 = ",";
3235    } else {
3236      if (!$silence) {$this->fail(13);}
3237      $r49 = self::$FAILED;
3238      $r47 = self::$FAILED;
3239      goto seq_9;
3240    }
3241    $r50 = $this->discard_($silence);
3242    if ($r50===self::$FAILED) {
3243      $this->currPos = $p48;
3244      $r47 = self::$FAILED;
3245      goto seq_9;
3246    }
3247    $p52 = $this->currPos;
3248    $r51 = $this->discardinteger($silence);
3249    // s2 <- $r51
3250    if ($r51!==self::$FAILED) {
3251      $r51 = substr($this->input, $p52, $this->currPos - $p52);
3252    } else {
3253      $r51 = self::$FAILED;
3254      $this->currPos = $p48;
3255      $r47 = self::$FAILED;
3256      goto seq_9;
3257    }
3258    // free $p52
3259    $r53 = $this->discard_($silence);
3260    if ($r53===self::$FAILED) {
3261      $this->currPos = $p48;
3262      $r47 = self::$FAILED;
3263      goto seq_9;
3264    }
3265    $r47 = true;
3266    seq_9:
3267    if ($r47!==self::$FAILED) {
3268      $this->savedPos = $p44;
3269      $r47 = $this->a28($r43, $r51);
3270      $r46[] = $r47;
3271    } else {
3272      break;
3273    }
3274    // free $p48
3275  }
3276  // rest <- $r46
3277  // free $r47
3278  if (($this->input[$this->currPos] ?? null) === ")") {
3279    $this->currPos++;
3280    $r47 = ")";
3281  } else {
3282    if (!$silence) {$this->fail(26);}
3283    $r47 = self::$FAILED;
3284    $this->currPos = $p35;
3285    $r1 = self::$FAILED;
3286    goto seq_8;
3287  }
3288  $r54 = $this->discard_($silence);
3289  if ($r54===self::$FAILED) {
3290    $this->currPos = $p35;
3291    $r1 = self::$FAILED;
3292    goto seq_8;
3293  }
3294  $r1 = true;
3295  seq_8:
3296  if ($r1!==self::$FAILED) {
3297    $this->savedPos = $p31;
3298    $r1 = $this->a33($r43, $r46);
3299    goto choice_1;
3300  }
3301  // free $p35
3302  $p35 = $this->currPos;
3303  // start seq_10
3304  $p48 = $this->currPos;
3305  $p52 = $this->currPos;
3306  $r55 = $this->discarddecimal($silence);
3307  // s <- $r55
3308  if ($r55!==self::$FAILED) {
3309    $r55 = substr($this->input, $p52, $this->currPos - $p52);
3310  } else {
3311    $r55 = self::$FAILED;
3312    $r1 = self::$FAILED;
3313    goto seq_10;
3314  }
3315  // free $p52
3316  $r56 = $this->discard_($silence);
3317  if ($r56===self::$FAILED) {
3318    $this->currPos = $p48;
3319    $r1 = self::$FAILED;
3320    goto seq_10;
3321  }
3322  $r1 = true;
3323  seq_10:
3324  if ($r1!==self::$FAILED) {
3325    $this->savedPos = $p35;
3326    $r1 = $this->a34($r55);
3327    goto choice_1;
3328  }
3329  // free $p48
3330  $p48 = $this->currPos;
3331  // start seq_11
3332  $p52 = $this->currPos;
3333  if (($this->input[$this->currPos] ?? null) === "(") {
3334    $this->currPos++;
3335    $r57 = "(";
3336  } else {
3337    if (!$silence) {$this->fail(25);}
3338    $r57 = self::$FAILED;
3339    $r1 = self::$FAILED;
3340    goto seq_11;
3341  }
3342  $r58 = $this->discard_($silence);
3343  if ($r58===self::$FAILED) {
3344    $this->currPos = $p52;
3345    $r1 = self::$FAILED;
3346    goto seq_11;
3347  }
3348  $p60 = $this->currPos;
3349  $r59 = $this->discarddecimal($silence);
3350  // s <- $r59
3351  if ($r59!==self::$FAILED) {
3352    $r59 = substr($this->input, $p60, $this->currPos - $p60);
3353  } else {
3354    $r59 = self::$FAILED;
3355    $this->currPos = $p52;
3356    $r1 = self::$FAILED;
3357    goto seq_11;
3358  }
3359  // free $p60
3360  $r61 = $this->discard_($silence);
3361  if ($r61===self::$FAILED) {
3362    $this->currPos = $p52;
3363    $r1 = self::$FAILED;
3364    goto seq_11;
3365  }
3366  $r62 = [];
3367  for (;;) {
3368    $p60 = $this->currPos;
3369    // start seq_12
3370    $p64 = $this->currPos;
3371    if (($this->input[$this->currPos] ?? null) === ",") {
3372      $this->currPos++;
3373      $r65 = ",";
3374    } else {
3375      if (!$silence) {$this->fail(13);}
3376      $r65 = self::$FAILED;
3377      $r63 = self::$FAILED;
3378      goto seq_12;
3379    }
3380    $r66 = $this->discard_($silence);
3381    if ($r66===self::$FAILED) {
3382      $this->currPos = $p64;
3383      $r63 = self::$FAILED;
3384      goto seq_12;
3385    }
3386    $p68 = $this->currPos;
3387    $r67 = $this->discarddecimal($silence);
3388    // s2 <- $r67
3389    if ($r67!==self::$FAILED) {
3390      $r67 = substr($this->input, $p68, $this->currPos - $p68);
3391    } else {
3392      $r67 = self::$FAILED;
3393      $this->currPos = $p64;
3394      $r63 = self::$FAILED;
3395      goto seq_12;
3396    }
3397    // free $p68
3398    $r69 = $this->discard_($silence);
3399    if ($r69===self::$FAILED) {
3400      $this->currPos = $p64;
3401      $r63 = self::$FAILED;
3402      goto seq_12;
3403    }
3404    $r63 = true;
3405    seq_12:
3406    if ($r63!==self::$FAILED) {
3407      $this->savedPos = $p60;
3408      $r63 = $this->a28($r59, $r67);
3409      $r62[] = $r63;
3410    } else {
3411      break;
3412    }
3413    // free $p64
3414  }
3415  // rest <- $r62
3416  // free $r63
3417  if (($this->input[$this->currPos] ?? null) === ")") {
3418    $this->currPos++;
3419    $r63 = ")";
3420  } else {
3421    if (!$silence) {$this->fail(26);}
3422    $r63 = self::$FAILED;
3423    $this->currPos = $p52;
3424    $r1 = self::$FAILED;
3425    goto seq_11;
3426  }
3427  $r70 = $this->discard_($silence);
3428  if ($r70===self::$FAILED) {
3429    $this->currPos = $p52;
3430    $r1 = self::$FAILED;
3431    goto seq_11;
3432  }
3433  $r1 = true;
3434  seq_11:
3435  if ($r1!==self::$FAILED) {
3436    $this->savedPos = $p48;
3437    $r1 = $this->a35($r59, $r62);
3438  }
3439  // free $p52
3440  choice_1:
3441  return $r1;
3442}
3443private function discardExtendedAttributeInner($silence) {
3444  // start choice_1
3445  // start seq_1
3446  $p2 = $this->currPos;
3447  if (($this->input[$this->currPos] ?? null) === "(") {
3448    $this->currPos++;
3449    $r3 = "(";
3450  } else {
3451    if (!$silence) {$this->fail(25);}
3452    $r3 = self::$FAILED;
3453    $r1 = self::$FAILED;
3454    goto seq_1;
3455  }
3456  $r4 = $this->discard_($silence);
3457  if ($r4===self::$FAILED) {
3458    $this->currPos = $p2;
3459    $r1 = self::$FAILED;
3460    goto seq_1;
3461  }
3462  $r5 = $this->discardExtendedAttributeInner($silence);
3463  if ($r5===self::$FAILED) {
3464    $this->currPos = $p2;
3465    $r1 = self::$FAILED;
3466    goto seq_1;
3467  }
3468  if (($this->input[$this->currPos] ?? null) === ")") {
3469    $this->currPos++;
3470    $r6 = ")";
3471  } else {
3472    if (!$silence) {$this->fail(26);}
3473    $r6 = self::$FAILED;
3474    $this->currPos = $p2;
3475    $r1 = self::$FAILED;
3476    goto seq_1;
3477  }
3478  $r7 = $this->discard_($silence);
3479  if ($r7===self::$FAILED) {
3480    $this->currPos = $p2;
3481    $r1 = self::$FAILED;
3482    goto seq_1;
3483  }
3484  $r8 = $this->discardExtendedAttributeInner($silence);
3485  if ($r8===self::$FAILED) {
3486    $this->currPos = $p2;
3487    $r1 = self::$FAILED;
3488    goto seq_1;
3489  }
3490  $r1 = true;
3491  seq_1:
3492  if ($r1!==self::$FAILED) {
3493    goto choice_1;
3494  }
3495  // free $p2
3496  // start seq_2
3497  $p2 = $this->currPos;
3498  if (($this->input[$this->currPos] ?? null) === "[") {
3499    $this->currPos++;
3500    $r9 = "[";
3501  } else {
3502    if (!$silence) {$this->fail(8);}
3503    $r9 = self::$FAILED;
3504    $r1 = self::$FAILED;
3505    goto seq_2;
3506  }
3507  $r10 = $this->discard_($silence);
3508  if ($r10===self::$FAILED) {
3509    $this->currPos = $p2;
3510    $r1 = self::$FAILED;
3511    goto seq_2;
3512  }
3513  $r11 = $this->discardExtendedAttributeInner($silence);
3514  if ($r11===self::$FAILED) {
3515    $this->currPos = $p2;
3516    $r1 = self::$FAILED;
3517    goto seq_2;
3518  }
3519  if (($this->input[$this->currPos] ?? null) === "]") {
3520    $this->currPos++;
3521    $r12 = "]";
3522  } else {
3523    if (!$silence) {$this->fail(9);}
3524    $r12 = self::$FAILED;
3525    $this->currPos = $p2;
3526    $r1 = self::$FAILED;
3527    goto seq_2;
3528  }
3529  $r13 = $this->discard_($silence);
3530  if ($r13===self::$FAILED) {
3531    $this->currPos = $p2;
3532    $r1 = self::$FAILED;
3533    goto seq_2;
3534  }
3535  $r14 = $this->discardExtendedAttributeInner($silence);
3536  if ($r14===self::$FAILED) {
3537    $this->currPos = $p2;
3538    $r1 = self::$FAILED;
3539    goto seq_2;
3540  }
3541  $r1 = true;
3542  seq_2:
3543  if ($r1!==self::$FAILED) {
3544    goto choice_1;
3545  }
3546  // free $p2
3547  // start seq_3
3548  $p2 = $this->currPos;
3549  if (($this->input[$this->currPos] ?? null) === "{") {
3550    $this->currPos++;
3551    $r15 = "{";
3552  } else {
3553    if (!$silence) {$this->fail(17);}
3554    $r15 = self::$FAILED;
3555    $r1 = self::$FAILED;
3556    goto seq_3;
3557  }
3558  $r16 = $this->discard_($silence);
3559  if ($r16===self::$FAILED) {
3560    $this->currPos = $p2;
3561    $r1 = self::$FAILED;
3562    goto seq_3;
3563  }
3564  $r17 = $this->discardExtendedAttributeInner($silence);
3565  if ($r17===self::$FAILED) {
3566    $this->currPos = $p2;
3567    $r1 = self::$FAILED;
3568    goto seq_3;
3569  }
3570  if (($this->input[$this->currPos] ?? null) === "}") {
3571    $this->currPos++;
3572    $r18 = "}";
3573  } else {
3574    if (!$silence) {$this->fail(18);}
3575    $r18 = self::$FAILED;
3576    $this->currPos = $p2;
3577    $r1 = self::$FAILED;
3578    goto seq_3;
3579  }
3580  $r19 = $this->discard_($silence);
3581  if ($r19===self::$FAILED) {
3582    $this->currPos = $p2;
3583    $r1 = self::$FAILED;
3584    goto seq_3;
3585  }
3586  $r20 = $this->discardExtendedAttributeInner($silence);
3587  if ($r20===self::$FAILED) {
3588    $this->currPos = $p2;
3589    $r1 = self::$FAILED;
3590    goto seq_3;
3591  }
3592  $r1 = true;
3593  seq_3:
3594  if ($r1!==self::$FAILED) {
3595    goto choice_1;
3596  }
3597  // free $p2
3598  // start seq_4
3599  $p2 = $this->currPos;
3600  $r21 = $this->discardOtherOrComma($silence);
3601  if ($r21===self::$FAILED) {
3602    $r1 = self::$FAILED;
3603    goto seq_4;
3604  }
3605  $r22 = $this->discardExtendedAttributeInner($silence);
3606  if ($r22===self::$FAILED) {
3607    $this->currPos = $p2;
3608    $r1 = self::$FAILED;
3609    goto seq_4;
3610  }
3611  $r1 = true;
3612  seq_4:
3613  if ($r1!==self::$FAILED) {
3614    goto choice_1;
3615  }
3616  // free $p2
3617  $r1 = '';
3618  choice_1:
3619  return $r1;
3620}
3621private function discardExtendedAttributeRest($silence) {
3622  $r1 = $this->discardSpecCompliantExtendedAttribute($silence);
3623  if ($r1===self::$FAILED) {
3624    $r1 = null;
3625  }
3626  return $r1;
3627}
3628private function discardOther($silence) {
3629  // start choice_1
3630  $r1 = $this->discardOtherIdLike($silence);
3631  if ($r1!==self::$FAILED) {
3632    goto choice_1;
3633  }
3634  $r1 = $this->discardArgumentNameKeyword($silence);
3635  if ($r1!==self::$FAILED) {
3636    goto choice_1;
3637  }
3638  $r1 = $this->discardBufferRelatedType($silence);
3639  if ($r1!==self::$FAILED) {
3640    goto choice_1;
3641  }
3642  $p2 = $this->currPos;
3643  // start seq_1
3644  $p3 = $this->currPos;
3645  $p5 = $this->currPos;
3646  // start choice_2
3647  $r4 = $this->discardinteger($silence);
3648  if ($r4!==self::$FAILED) {
3649    goto choice_2;
3650  }
3651  $r4 = $this->discarddecimal($silence);
3652  if ($r4!==self::$FAILED) {
3653    goto choice_2;
3654  }
3655  $r4 = $this->discardidentifier($silence);
3656  if ($r4!==self::$FAILED) {
3657    goto choice_2;
3658  }
3659  $r4 = $this->discardstring($silence);
3660  if ($r4!==self::$FAILED) {
3661    goto choice_2;
3662  }
3663  $r4 = $this->discardotherchar($silence);
3664  if ($r4!==self::$FAILED) {
3665    goto choice_2;
3666  }
3667  $r4 = $this->discardotherterminals($silence);
3668  choice_2:
3669  // c <- $r4
3670  if ($r4!==self::$FAILED) {
3671    $r4 = substr($this->input, $p5, $this->currPos - $p5);
3672  } else {
3673    $r4 = self::$FAILED;
3674    $r1 = self::$FAILED;
3675    goto seq_1;
3676  }
3677  // free $p5
3678  $r6 = $this->discard_($silence);
3679  if ($r6===self::$FAILED) {
3680    $this->currPos = $p3;
3681    $r1 = self::$FAILED;
3682    goto seq_1;
3683  }
3684  $r1 = true;
3685  seq_1:
3686  if ($r1!==self::$FAILED) {
3687    $this->savedPos = $p2;
3688    $r1 = $this->a7($r4);
3689  }
3690  // free $p3
3691  choice_1:
3692  return $r1;
3693}
3694private function parse_($silence) {
3695  $p2 = $this->currPos;
3696  $r3 = [];
3697  for (;;) {
3698    // start choice_1
3699    $p5 = $this->currPos;
3700    $r4 = $this->discardwhitespace($silence);
3701    if ($r4!==self::$FAILED) {
3702      $r4 = substr($this->input, $p5, $this->currPos - $p5);
3703      goto choice_1;
3704    } else {
3705      $r4 = self::$FAILED;
3706    }
3707    // free $p5
3708    $p5 = $this->currPos;
3709    $r4 = $this->discardcomment($silence);
3710    if ($r4!==self::$FAILED) {
3711      $r4 = substr($this->input, $p5, $this->currPos - $p5);
3712    } else {
3713      $r4 = self::$FAILED;
3714    }
3715    // free $p5
3716    choice_1:
3717    if ($r4!==self::$FAILED) {
3718      $r3[] = $r4;
3719    } else {
3720      break;
3721    }
3722  }
3723  // r <- $r3
3724  // free $r4
3725  $r1 = $r3;
3726  if ($r1!==self::$FAILED) {
3727    $this->savedPos = $p2;
3728    $r1 = $this->a1($r3);
3729  }
3730  return $r1;
3731}
3732private function parseCallbackRest($silence) {
3733  $p2 = $this->currPos;
3734  // start seq_1
3735  $p3 = $this->currPos;
3736  $r4 = $this->parseidentifier($silence);
3737  // name <- $r4
3738  if ($r4===self::$FAILED) {
3739    $r1 = self::$FAILED;
3740    goto seq_1;
3741  }
3742  $r5 = $this->discard_($silence);
3743  if ($r5===self::$FAILED) {
3744    $this->currPos = $p3;
3745    $r1 = self::$FAILED;
3746    goto seq_1;
3747  }
3748  if (($this->input[$this->currPos] ?? null) === "=") {
3749    $this->currPos++;
3750    $r6 = "=";
3751  } else {
3752    if (!$silence) {$this->fail(27);}
3753    $r6 = self::$FAILED;
3754    $this->currPos = $p3;
3755    $r1 = self::$FAILED;
3756    goto seq_1;
3757  }
3758  $r7 = $this->discard_($silence);
3759  if ($r7===self::$FAILED) {
3760    $this->currPos = $p3;
3761    $r1 = self::$FAILED;
3762    goto seq_1;
3763  }
3764  $r8 = $this->parseType($silence);
3765  // t <- $r8
3766  if ($r8===self::$FAILED) {
3767    $this->currPos = $p3;
3768    $r1 = self::$FAILED;
3769    goto seq_1;
3770  }
3771  if (($this->input[$this->currPos] ?? null) === "(") {
3772    $this->currPos++;
3773    $r9 = "(";
3774  } else {
3775    if (!$silence) {$this->fail(25);}
3776    $r9 = self::$FAILED;
3777    $this->currPos = $p3;
3778    $r1 = self::$FAILED;
3779    goto seq_1;
3780  }
3781  $r10 = $this->discard_($silence);
3782  if ($r10===self::$FAILED) {
3783    $this->currPos = $p3;
3784    $r1 = self::$FAILED;
3785    goto seq_1;
3786  }
3787  $r11 = $this->parseArgumentList($silence);
3788  // args <- $r11
3789  if ($r11===self::$FAILED) {
3790    $this->currPos = $p3;
3791    $r1 = self::$FAILED;
3792    goto seq_1;
3793  }
3794  if (($this->input[$this->currPos] ?? null) === ")") {
3795    $this->currPos++;
3796    $r12 = ")";
3797  } else {
3798    if (!$silence) {$this->fail(26);}
3799    $r12 = self::$FAILED;
3800    $this->currPos = $p3;
3801    $r1 = self::$FAILED;
3802    goto seq_1;
3803  }
3804  $r13 = $this->discard_($silence);
3805  if ($r13===self::$FAILED) {
3806    $this->currPos = $p3;
3807    $r1 = self::$FAILED;
3808    goto seq_1;
3809  }
3810  if (($this->input[$this->currPos] ?? null) === ";") {
3811    $this->currPos++;
3812    $r14 = ";";
3813  } else {
3814    if (!$silence) {$this->fail(19);}
3815    $r14 = self::$FAILED;
3816    $this->currPos = $p3;
3817    $r1 = self::$FAILED;
3818    goto seq_1;
3819  }
3820  $r15 = $this->discard_($silence);
3821  if ($r15===self::$FAILED) {
3822    $this->currPos = $p3;
3823    $r1 = self::$FAILED;
3824    goto seq_1;
3825  }
3826  $r1 = true;
3827  seq_1:
3828  if ($r1!==self::$FAILED) {
3829    $this->savedPos = $p2;
3830    $r1 = $this->a36($r4, $r8, $r11);
3831  }
3832  // free $p3
3833  return $r1;
3834}
3835private function parseCallbackInterfaceMembers($silence) {
3836  $r1 = [];
3837  for (;;) {
3838    $p3 = $this->currPos;
3839    // start seq_1
3840    $p4 = $this->currPos;
3841    $r5 = $this->parseleadingComments($silence);
3842    // c <- $r5
3843    if ($r5===self::$FAILED) {
3844      $r2 = self::$FAILED;
3845      goto seq_1;
3846    }
3847    $r6 = $this->parseExtendedAttributeList($silence);
3848    // e <- $r6
3849    if ($r6===self::$FAILED) {
3850      $this->currPos = $p4;
3851      $r2 = self::$FAILED;
3852      goto seq_1;
3853    }
3854    $r7 = $this->parseCallbackInterfaceMember($silence);
3855    // m <- $r7
3856    if ($r7===self::$FAILED) {
3857      $this->currPos = $p4;
3858      $r2 = self::$FAILED;
3859      goto seq_1;
3860    }
3861    $r2 = true;
3862    seq_1:
3863    if ($r2!==self::$FAILED) {
3864      $this->savedPos = $p3;
3865      $r2 = $this->a21($r5, $r6, $r7);
3866      $r1[] = $r2;
3867    } else {
3868      break;
3869    }
3870    // free $p4
3871  }
3872  // free $r2
3873  return $r1;
3874}
3875private function parseInterfaceRest($silence) {
3876  $p2 = $this->currPos;
3877  // start seq_1
3878  $p3 = $this->currPos;
3879  $r4 = $this->parseidentifier($silence);
3880  // name <- $r4
3881  if ($r4===self::$FAILED) {
3882    $r1 = self::$FAILED;
3883    goto seq_1;
3884  }
3885  $r5 = $this->discard_($silence);
3886  if ($r5===self::$FAILED) {
3887    $this->currPos = $p3;
3888    $r1 = self::$FAILED;
3889    goto seq_1;
3890  }
3891  $r6 = $this->parseInheritance($silence);
3892  // inh <- $r6
3893  if ($r6===self::$FAILED) {
3894    $this->currPos = $p3;
3895    $r1 = self::$FAILED;
3896    goto seq_1;
3897  }
3898  if (($this->input[$this->currPos] ?? null) === "{") {
3899    $this->currPos++;
3900    $r7 = "{";
3901  } else {
3902    if (!$silence) {$this->fail(17);}
3903    $r7 = self::$FAILED;
3904    $this->currPos = $p3;
3905    $r1 = self::$FAILED;
3906    goto seq_1;
3907  }
3908  $r8 = $this->discard_($silence);
3909  if ($r8===self::$FAILED) {
3910    $this->currPos = $p3;
3911    $r1 = self::$FAILED;
3912    goto seq_1;
3913  }
3914  $r9 = $this->parseInterfaceMembers($silence);
3915  // m <- $r9
3916  if ($r9===self::$FAILED) {
3917    $this->currPos = $p3;
3918    $r1 = self::$FAILED;
3919    goto seq_1;
3920  }
3921  if (($this->input[$this->currPos] ?? null) === "}") {
3922    $this->currPos++;
3923    $r10 = "}";
3924  } else {
3925    if (!$silence) {$this->fail(18);}
3926    $r10 = self::$FAILED;
3927    $this->currPos = $p3;
3928    $r1 = self::$FAILED;
3929    goto seq_1;
3930  }
3931  $r11 = $this->discard_($silence);
3932  if ($r11===self::$FAILED) {
3933    $this->currPos = $p3;
3934    $r1 = self::$FAILED;
3935    goto seq_1;
3936  }
3937  if (($this->input[$this->currPos] ?? null) === ";") {
3938    $this->currPos++;
3939    $r12 = ";";
3940  } else {
3941    if (!$silence) {$this->fail(19);}
3942    $r12 = self::$FAILED;
3943    $this->currPos = $p3;
3944    $r1 = self::$FAILED;
3945    goto seq_1;
3946  }
3947  $r13 = $this->parsec_($silence);
3948  // c <- $r13
3949  if ($r13===self::$FAILED) {
3950    $this->currPos = $p3;
3951    $r1 = self::$FAILED;
3952    goto seq_1;
3953  }
3954  $r1 = true;
3955  seq_1:
3956  if ($r1!==self::$FAILED) {
3957    $this->savedPos = $p2;
3958    $r1 = $this->a37($r4, $r6, $r9, $r13);
3959  }
3960  // free $p3
3961  return $r1;
3962}
3963private function parseMixinRest($silence) {
3964  $p2 = $this->currPos;
3965  // start seq_1
3966  $p3 = $this->currPos;
3967  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "mixin", $this->currPos, 5, false) === 0) {
3968    $r4 = "mixin";
3969    $this->currPos += 5;
3970  } else {
3971    if (!$silence) {$this->fail(32);}
3972    $r4 = self::$FAILED;
3973    $r1 = self::$FAILED;
3974    goto seq_1;
3975  }
3976  $r5 = $this->discardi_($silence);
3977  if ($r5===self::$FAILED) {
3978    $this->currPos = $p3;
3979    $r1 = self::$FAILED;
3980    goto seq_1;
3981  }
3982  $r6 = $this->parseidentifier($silence);
3983  // name <- $r6
3984  if ($r6===self::$FAILED) {
3985    $this->currPos = $p3;
3986    $r1 = self::$FAILED;
3987    goto seq_1;
3988  }
3989  $r7 = $this->discard_($silence);
3990  if ($r7===self::$FAILED) {
3991    $this->currPos = $p3;
3992    $r1 = self::$FAILED;
3993    goto seq_1;
3994  }
3995  if (($this->input[$this->currPos] ?? null) === "{") {
3996    $this->currPos++;
3997    $r8 = "{";
3998  } else {
3999    if (!$silence) {$this->fail(17);}
4000    $r8 = self::$FAILED;
4001    $this->currPos = $p3;
4002    $r1 = self::$FAILED;
4003    goto seq_1;
4004  }
4005  $r9 = $this->discard_($silence);
4006  if ($r9===self::$FAILED) {
4007    $this->currPos = $p3;
4008    $r1 = self::$FAILED;
4009    goto seq_1;
4010  }
4011  $r10 = $this->parseMixinMembers($silence);
4012  // m <- $r10
4013  if ($r10===self::$FAILED) {
4014    $this->currPos = $p3;
4015    $r1 = self::$FAILED;
4016    goto seq_1;
4017  }
4018  if (($this->input[$this->currPos] ?? null) === "}") {
4019    $this->currPos++;
4020    $r11 = "}";
4021  } else {
4022    if (!$silence) {$this->fail(18);}
4023    $r11 = self::$FAILED;
4024    $this->currPos = $p3;
4025    $r1 = self::$FAILED;
4026    goto seq_1;
4027  }
4028  $r12 = $this->discard_($silence);
4029  if ($r12===self::$FAILED) {
4030    $this->currPos = $p3;
4031    $r1 = self::$FAILED;
4032    goto seq_1;
4033  }
4034  if (($this->input[$this->currPos] ?? null) === ";") {
4035    $this->currPos++;
4036    $r13 = ";";
4037  } else {
4038    if (!$silence) {$this->fail(19);}
4039    $r13 = self::$FAILED;
4040    $this->currPos = $p3;
4041    $r1 = self::$FAILED;
4042    goto seq_1;
4043  }
4044  $r14 = $this->discard_($silence);
4045  if ($r14===self::$FAILED) {
4046    $this->currPos = $p3;
4047    $r1 = self::$FAILED;
4048    goto seq_1;
4049  }
4050  $r1 = true;
4051  seq_1:
4052  if ($r1!==self::$FAILED) {
4053    $this->savedPos = $p2;
4054    $r1 = $this->a38($r6, $r10);
4055  }
4056  // free $p3
4057  return $r1;
4058}
4059private function discardArgumentNameKeyword($silence) {
4060  $p2 = $this->currPos;
4061  // start seq_1
4062  $p3 = $this->currPos;
4063  $p5 = $this->currPos;
4064  // start choice_1
4065  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "async", $this->currPos, 5, false) === 0) {
4066    $r4 = "async";
4067    $this->currPos += 5;
4068    goto choice_1;
4069  } else {
4070    if (!$silence) {$this->fail(33);}
4071    $r4 = self::$FAILED;
4072  }
4073  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "attribute", $this->currPos, 9, false) === 0) {
4074    $r4 = "attribute";
4075    $this->currPos += 9;
4076    goto choice_1;
4077  } else {
4078    if (!$silence) {$this->fail(34);}
4079    $r4 = self::$FAILED;
4080  }
4081  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "callback", $this->currPos, 8, false) === 0) {
4082    $r4 = "callback";
4083    $this->currPos += 8;
4084    goto choice_1;
4085  } else {
4086    if (!$silence) {$this->fail(14);}
4087    $r4 = self::$FAILED;
4088  }
4089  // start seq_2
4090  $p6 = $this->currPos;
4091  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "const", $this->currPos, 5, false) === 0) {
4092    $r7 = "const";
4093    $this->currPos += 5;
4094  } else {
4095    if (!$silence) {$this->fail(35);}
4096    $r7 = self::$FAILED;
4097    $r4 = self::$FAILED;
4098    goto seq_2;
4099  }
4100  $p8 = $this->currPos;
4101  $r9 = $this->input[$this->currPos] ?? '';
4102  if (preg_match("/^[\\-_0-9A-Za-z]/", $r9)) {
4103    $this->currPos++;
4104  } else {
4105    $r9 = self::$FAILED;
4106  }
4107  if ($r9 === self::$FAILED) {
4108    $r9 = false;
4109  } else {
4110    $r9 = self::$FAILED;
4111    $this->currPos = $p8;
4112    $this->currPos = $p6;
4113    $r4 = self::$FAILED;
4114    goto seq_2;
4115  }
4116  // free $p8
4117  $r4 = true;
4118  seq_2:
4119  if ($r4!==self::$FAILED) {
4120    goto choice_1;
4121  }
4122  // free $p6
4123  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "constructor", $this->currPos, 11, false) === 0) {
4124    $r4 = "constructor";
4125    $this->currPos += 11;
4126    goto choice_1;
4127  } else {
4128    if (!$silence) {$this->fail(36);}
4129    $r4 = self::$FAILED;
4130  }
4131  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "deleter", $this->currPos, 7, false) === 0) {
4132    $r4 = "deleter";
4133    $this->currPos += 7;
4134    goto choice_1;
4135  } else {
4136    if (!$silence) {$this->fail(37);}
4137    $r4 = self::$FAILED;
4138  }
4139  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "dictionary", $this->currPos, 10, false) === 0) {
4140    $r4 = "dictionary";
4141    $this->currPos += 10;
4142    goto choice_1;
4143  } else {
4144    if (!$silence) {$this->fail(21);}
4145    $r4 = self::$FAILED;
4146  }
4147  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "enum", $this->currPos, 4, false) === 0) {
4148    $r4 = "enum";
4149    $this->currPos += 4;
4150    goto choice_1;
4151  } else {
4152    if (!$silence) {$this->fail(22);}
4153    $r4 = self::$FAILED;
4154  }
4155  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "getter", $this->currPos, 6, false) === 0) {
4156    $r4 = "getter";
4157    $this->currPos += 6;
4158    goto choice_1;
4159  } else {
4160    if (!$silence) {$this->fail(38);}
4161    $r4 = self::$FAILED;
4162  }
4163  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "includes", $this->currPos, 8, false) === 0) {
4164    $r4 = "includes";
4165    $this->currPos += 8;
4166    goto choice_1;
4167  } else {
4168    if (!$silence) {$this->fail(24);}
4169    $r4 = self::$FAILED;
4170  }
4171  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "inherit", $this->currPos, 7, false) === 0) {
4172    $r4 = "inherit";
4173    $this->currPos += 7;
4174    goto choice_1;
4175  } else {
4176    if (!$silence) {$this->fail(39);}
4177    $r4 = self::$FAILED;
4178  }
4179  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "interface", $this->currPos, 9, false) === 0) {
4180    $r4 = "interface";
4181    $this->currPos += 9;
4182    goto choice_1;
4183  } else {
4184    if (!$silence) {$this->fail(15);}
4185    $r4 = self::$FAILED;
4186  }
4187  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "iterable", $this->currPos, 8, false) === 0) {
4188    $r4 = "iterable";
4189    $this->currPos += 8;
4190    goto choice_1;
4191  } else {
4192    if (!$silence) {$this->fail(40);}
4193    $r4 = self::$FAILED;
4194  }
4195  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "maplike", $this->currPos, 7, false) === 0) {
4196    $r4 = "maplike";
4197    $this->currPos += 7;
4198    goto choice_1;
4199  } else {
4200    if (!$silence) {$this->fail(41);}
4201    $r4 = self::$FAILED;
4202  }
4203  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "mixin", $this->currPos, 5, false) === 0) {
4204    $r4 = "mixin";
4205    $this->currPos += 5;
4206    goto choice_1;
4207  } else {
4208    if (!$silence) {$this->fail(32);}
4209    $r4 = self::$FAILED;
4210  }
4211  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "namespace", $this->currPos, 9, false) === 0) {
4212    $r4 = "namespace";
4213    $this->currPos += 9;
4214    goto choice_1;
4215  } else {
4216    if (!$silence) {$this->fail(16);}
4217    $r4 = self::$FAILED;
4218  }
4219  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "partial", $this->currPos, 7, false) === 0) {
4220    $r4 = "partial";
4221    $this->currPos += 7;
4222    goto choice_1;
4223  } else {
4224    if (!$silence) {$this->fail(20);}
4225    $r4 = self::$FAILED;
4226  }
4227  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "readonly", $this->currPos, 8, false) === 0) {
4228    $r4 = "readonly";
4229    $this->currPos += 8;
4230    goto choice_1;
4231  } else {
4232    if (!$silence) {$this->fail(42);}
4233    $r4 = self::$FAILED;
4234  }
4235  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "required", $this->currPos, 8, false) === 0) {
4236    $r4 = "required";
4237    $this->currPos += 8;
4238    goto choice_1;
4239  } else {
4240    if (!$silence) {$this->fail(43);}
4241    $r4 = self::$FAILED;
4242  }
4243  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "setlike", $this->currPos, 7, false) === 0) {
4244    $r4 = "setlike";
4245    $this->currPos += 7;
4246    goto choice_1;
4247  } else {
4248    if (!$silence) {$this->fail(44);}
4249    $r4 = self::$FAILED;
4250  }
4251  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "setter", $this->currPos, 6, false) === 0) {
4252    $r4 = "setter";
4253    $this->currPos += 6;
4254    goto choice_1;
4255  } else {
4256    if (!$silence) {$this->fail(45);}
4257    $r4 = self::$FAILED;
4258  }
4259  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "static", $this->currPos, 6, false) === 0) {
4260    $r4 = "static";
4261    $this->currPos += 6;
4262    goto choice_1;
4263  } else {
4264    if (!$silence) {$this->fail(46);}
4265    $r4 = self::$FAILED;
4266  }
4267  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "stringifier", $this->currPos, 11, false) === 0) {
4268    $r4 = "stringifier";
4269    $this->currPos += 11;
4270    goto choice_1;
4271  } else {
4272    if (!$silence) {$this->fail(47);}
4273    $r4 = self::$FAILED;
4274  }
4275  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "typedef", $this->currPos, 7, false) === 0) {
4276    $r4 = "typedef";
4277    $this->currPos += 7;
4278    goto choice_1;
4279  } else {
4280    if (!$silence) {$this->fail(23);}
4281    $r4 = self::$FAILED;
4282  }
4283  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "unrestricted", $this->currPos, 12, false) === 0) {
4284    $r4 = "unrestricted";
4285    $this->currPos += 12;
4286  } else {
4287    if (!$silence) {$this->fail(48);}
4288    $r4 = self::$FAILED;
4289  }
4290  choice_1:
4291  // k <- $r4
4292  if ($r4!==self::$FAILED) {
4293    $r4 = substr($this->input, $p5, $this->currPos - $p5);
4294  } else {
4295    $r4 = self::$FAILED;
4296    $r1 = self::$FAILED;
4297    goto seq_1;
4298  }
4299  // free $p5
4300  $r10 = $this->discardi_($silence);
4301  if ($r10===self::$FAILED) {
4302    $this->currPos = $p3;
4303    $r1 = self::$FAILED;
4304    goto seq_1;
4305  }
4306  $r1 = true;
4307  seq_1:
4308  if ($r1!==self::$FAILED) {
4309    $this->savedPos = $p2;
4310    $r1 = $this->a39($r4);
4311  }
4312  // free $p3
4313  return $r1;
4314}
4315private function discardBufferRelatedType($silence) {
4316  $p2 = $this->currPos;
4317  // start seq_1
4318  $p3 = $this->currPos;
4319  $p5 = $this->currPos;
4320  // start choice_1
4321  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "ArrayBuffer", $this->currPos, 11, false) === 0) {
4322    $r4 = "ArrayBuffer";
4323    $this->currPos += 11;
4324    goto choice_1;
4325  } else {
4326    if (!$silence) {$this->fail(49);}
4327    $r4 = self::$FAILED;
4328  }
4329  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "DataView", $this->currPos, 8, false) === 0) {
4330    $r4 = "DataView";
4331    $this->currPos += 8;
4332    goto choice_1;
4333  } else {
4334    if (!$silence) {$this->fail(50);}
4335    $r4 = self::$FAILED;
4336  }
4337  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Int8Array", $this->currPos, 9, false) === 0) {
4338    $r4 = "Int8Array";
4339    $this->currPos += 9;
4340    goto choice_1;
4341  } else {
4342    if (!$silence) {$this->fail(51);}
4343    $r4 = self::$FAILED;
4344  }
4345  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Int16Array", $this->currPos, 10, false) === 0) {
4346    $r4 = "Int16Array";
4347    $this->currPos += 10;
4348    goto choice_1;
4349  } else {
4350    if (!$silence) {$this->fail(52);}
4351    $r4 = self::$FAILED;
4352  }
4353  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Int32Array", $this->currPos, 10, false) === 0) {
4354    $r4 = "Int32Array";
4355    $this->currPos += 10;
4356    goto choice_1;
4357  } else {
4358    if (!$silence) {$this->fail(53);}
4359    $r4 = self::$FAILED;
4360  }
4361  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Uint8Array", $this->currPos, 10, false) === 0) {
4362    $r4 = "Uint8Array";
4363    $this->currPos += 10;
4364    goto choice_1;
4365  } else {
4366    if (!$silence) {$this->fail(54);}
4367    $r4 = self::$FAILED;
4368  }
4369  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Uint16Array", $this->currPos, 11, false) === 0) {
4370    $r4 = "Uint16Array";
4371    $this->currPos += 11;
4372    goto choice_1;
4373  } else {
4374    if (!$silence) {$this->fail(55);}
4375    $r4 = self::$FAILED;
4376  }
4377  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Uint32Array", $this->currPos, 11, false) === 0) {
4378    $r4 = "Uint32Array";
4379    $this->currPos += 11;
4380    goto choice_1;
4381  } else {
4382    if (!$silence) {$this->fail(56);}
4383    $r4 = self::$FAILED;
4384  }
4385  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Uint8ClampedArray", $this->currPos, 17, false) === 0) {
4386    $r4 = "Uint8ClampedArray";
4387    $this->currPos += 17;
4388    goto choice_1;
4389  } else {
4390    if (!$silence) {$this->fail(57);}
4391    $r4 = self::$FAILED;
4392  }
4393  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Float32Array", $this->currPos, 12, false) === 0) {
4394    $r4 = "Float32Array";
4395    $this->currPos += 12;
4396    goto choice_1;
4397  } else {
4398    if (!$silence) {$this->fail(58);}
4399    $r4 = self::$FAILED;
4400  }
4401  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Float64Array", $this->currPos, 12, false) === 0) {
4402    $r4 = "Float64Array";
4403    $this->currPos += 12;
4404  } else {
4405    if (!$silence) {$this->fail(59);}
4406    $r4 = self::$FAILED;
4407  }
4408  choice_1:
4409  // s <- $r4
4410  if ($r4!==self::$FAILED) {
4411    $r4 = substr($this->input, $p5, $this->currPos - $p5);
4412  } else {
4413    $r4 = self::$FAILED;
4414    $r1 = self::$FAILED;
4415    goto seq_1;
4416  }
4417  // free $p5
4418  $r6 = $this->discardi_($silence);
4419  if ($r6===self::$FAILED) {
4420    $this->currPos = $p3;
4421    $r1 = self::$FAILED;
4422    goto seq_1;
4423  }
4424  $r1 = true;
4425  seq_1:
4426  if ($r1!==self::$FAILED) {
4427    $this->savedPos = $p2;
4428    $r1 = $this->a40($r4);
4429  }
4430  // free $p3
4431  return $r1;
4432}
4433private function discardOtherIdLike($silence) {
4434  $p2 = $this->currPos;
4435  // start seq_1
4436  $p3 = $this->currPos;
4437  $p5 = $this->currPos;
4438  // start choice_1
4439  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "ByteString", $this->currPos, 10, false) === 0) {
4440    $r4 = "ByteString";
4441    $this->currPos += 10;
4442    goto choice_1;
4443  } else {
4444    if (!$silence) {$this->fail(60);}
4445    $r4 = self::$FAILED;
4446  }
4447  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "DOMString", $this->currPos, 9, false) === 0) {
4448    $r4 = "DOMString";
4449    $this->currPos += 9;
4450    goto choice_1;
4451  } else {
4452    if (!$silence) {$this->fail(61);}
4453    $r4 = self::$FAILED;
4454  }
4455  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "FrozenArray", $this->currPos, 11, false) === 0) {
4456    $r4 = "FrozenArray";
4457    $this->currPos += 11;
4458    goto choice_1;
4459  } else {
4460    if (!$silence) {$this->fail(62);}
4461    $r4 = self::$FAILED;
4462  }
4463  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Infinity", $this->currPos, 8, false) === 0) {
4464    $r4 = "Infinity";
4465    $this->currPos += 8;
4466    goto choice_1;
4467  } else {
4468    if (!$silence) {$this->fail(63);}
4469    $r4 = self::$FAILED;
4470  }
4471  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "NaN", $this->currPos, 3, false) === 0) {
4472    $r4 = "NaN";
4473    $this->currPos += 3;
4474    goto choice_1;
4475  } else {
4476    if (!$silence) {$this->fail(64);}
4477    $r4 = self::$FAILED;
4478  }
4479  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "ObservableArray", $this->currPos, 15, false) === 0) {
4480    $r4 = "ObservableArray";
4481    $this->currPos += 15;
4482    goto choice_1;
4483  } else {
4484    if (!$silence) {$this->fail(65);}
4485    $r4 = self::$FAILED;
4486  }
4487  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Promise", $this->currPos, 7, false) === 0) {
4488    $r4 = "Promise";
4489    $this->currPos += 7;
4490    goto choice_1;
4491  } else {
4492    if (!$silence) {$this->fail(66);}
4493    $r4 = self::$FAILED;
4494  }
4495  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "USVString", $this->currPos, 9, false) === 0) {
4496    $r4 = "USVString";
4497    $this->currPos += 9;
4498    goto choice_1;
4499  } else {
4500    if (!$silence) {$this->fail(67);}
4501    $r4 = self::$FAILED;
4502  }
4503  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "any", $this->currPos, 3, false) === 0) {
4504    $r4 = "any";
4505    $this->currPos += 3;
4506    goto choice_1;
4507  } else {
4508    if (!$silence) {$this->fail(68);}
4509    $r4 = self::$FAILED;
4510  }
4511  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "bigint", $this->currPos, 6, false) === 0) {
4512    $r4 = "bigint";
4513    $this->currPos += 6;
4514    goto choice_1;
4515  } else {
4516    if (!$silence) {$this->fail(69);}
4517    $r4 = self::$FAILED;
4518  }
4519  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "boolean", $this->currPos, 7, false) === 0) {
4520    $r4 = "boolean";
4521    $this->currPos += 7;
4522    goto choice_1;
4523  } else {
4524    if (!$silence) {$this->fail(70);}
4525    $r4 = self::$FAILED;
4526  }
4527  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "byte", $this->currPos, 4, false) === 0) {
4528    $r4 = "byte";
4529    $this->currPos += 4;
4530    goto choice_1;
4531  } else {
4532    if (!$silence) {$this->fail(71);}
4533    $r4 = self::$FAILED;
4534  }
4535  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "double", $this->currPos, 6, false) === 0) {
4536    $r4 = "double";
4537    $this->currPos += 6;
4538    goto choice_1;
4539  } else {
4540    if (!$silence) {$this->fail(72);}
4541    $r4 = self::$FAILED;
4542  }
4543  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "false", $this->currPos, 5, false) === 0) {
4544    $r4 = "false";
4545    $this->currPos += 5;
4546    goto choice_1;
4547  } else {
4548    if (!$silence) {$this->fail(73);}
4549    $r4 = self::$FAILED;
4550  }
4551  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "float", $this->currPos, 5, false) === 0) {
4552    $r4 = "float";
4553    $this->currPos += 5;
4554    goto choice_1;
4555  } else {
4556    if (!$silence) {$this->fail(74);}
4557    $r4 = self::$FAILED;
4558  }
4559  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "long", $this->currPos, 4, false) === 0) {
4560    $r4 = "long";
4561    $this->currPos += 4;
4562    goto choice_1;
4563  } else {
4564    if (!$silence) {$this->fail(75);}
4565    $r4 = self::$FAILED;
4566  }
4567  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "null", $this->currPos, 4, false) === 0) {
4568    $r4 = "null";
4569    $this->currPos += 4;
4570    goto choice_1;
4571  } else {
4572    if (!$silence) {$this->fail(76);}
4573    $r4 = self::$FAILED;
4574  }
4575  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "object", $this->currPos, 6, false) === 0) {
4576    $r4 = "object";
4577    $this->currPos += 6;
4578    goto choice_1;
4579  } else {
4580    if (!$silence) {$this->fail(77);}
4581    $r4 = self::$FAILED;
4582  }
4583  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "octet", $this->currPos, 5, false) === 0) {
4584    $r4 = "octet";
4585    $this->currPos += 5;
4586    goto choice_1;
4587  } else {
4588    if (!$silence) {$this->fail(78);}
4589    $r4 = self::$FAILED;
4590  }
4591  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "or", $this->currPos, 2, false) === 0) {
4592    $r4 = "or";
4593    $this->currPos += 2;
4594    goto choice_1;
4595  } else {
4596    if (!$silence) {$this->fail(79);}
4597    $r4 = self::$FAILED;
4598  }
4599  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "optional", $this->currPos, 8, false) === 0) {
4600    $r4 = "optional";
4601    $this->currPos += 8;
4602    goto choice_1;
4603  } else {
4604    if (!$silence) {$this->fail(80);}
4605    $r4 = self::$FAILED;
4606  }
4607  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "record", $this->currPos, 6, false) === 0) {
4608    $r4 = "record";
4609    $this->currPos += 6;
4610    goto choice_1;
4611  } else {
4612    if (!$silence) {$this->fail(81);}
4613    $r4 = self::$FAILED;
4614  }
4615  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "sequence", $this->currPos, 8, false) === 0) {
4616    $r4 = "sequence";
4617    $this->currPos += 8;
4618    goto choice_1;
4619  } else {
4620    if (!$silence) {$this->fail(82);}
4621    $r4 = self::$FAILED;
4622  }
4623  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "short", $this->currPos, 5, false) === 0) {
4624    $r4 = "short";
4625    $this->currPos += 5;
4626    goto choice_1;
4627  } else {
4628    if (!$silence) {$this->fail(83);}
4629    $r4 = self::$FAILED;
4630  }
4631  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "symbol", $this->currPos, 6, false) === 0) {
4632    $r4 = "symbol";
4633    $this->currPos += 6;
4634    goto choice_1;
4635  } else {
4636    if (!$silence) {$this->fail(84);}
4637    $r4 = self::$FAILED;
4638  }
4639  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "true", $this->currPos, 4, false) === 0) {
4640    $r4 = "true";
4641    $this->currPos += 4;
4642    goto choice_1;
4643  } else {
4644    if (!$silence) {$this->fail(85);}
4645    $r4 = self::$FAILED;
4646  }
4647  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "unsigned", $this->currPos, 8, false) === 0) {
4648    $r4 = "unsigned";
4649    $this->currPos += 8;
4650    goto choice_1;
4651  } else {
4652    if (!$silence) {$this->fail(86);}
4653    $r4 = self::$FAILED;
4654  }
4655  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "undefined", $this->currPos, 9, false) === 0) {
4656    $r4 = "undefined";
4657    $this->currPos += 9;
4658  } else {
4659    if (!$silence) {$this->fail(87);}
4660    $r4 = self::$FAILED;
4661  }
4662  choice_1:
4663  // c <- $r4
4664  if ($r4!==self::$FAILED) {
4665    $r4 = substr($this->input, $p5, $this->currPos - $p5);
4666  } else {
4667    $r4 = self::$FAILED;
4668    $r1 = self::$FAILED;
4669    goto seq_1;
4670  }
4671  // free $p5
4672  $r6 = $this->discardi_($silence);
4673  if ($r6===self::$FAILED) {
4674    $this->currPos = $p3;
4675    $r1 = self::$FAILED;
4676    goto seq_1;
4677  }
4678  $r1 = true;
4679  seq_1:
4680  if ($r1!==self::$FAILED) {
4681    $this->savedPos = $p2;
4682    $r1 = $this->a7($r4);
4683  }
4684  // free $p3
4685  return $r1;
4686}
4687private function parseNamespaceMember($silence) {
4688  // start choice_1
4689  $r1 = $this->parseRegularOperation($silence);
4690  if ($r1!==self::$FAILED) {
4691    goto choice_1;
4692  }
4693  $p2 = $this->currPos;
4694  // start seq_1
4695  $p3 = $this->currPos;
4696  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "readonly", $this->currPos, 8, false) === 0) {
4697    $r4 = "readonly";
4698    $this->currPos += 8;
4699  } else {
4700    if (!$silence) {$this->fail(42);}
4701    $r4 = self::$FAILED;
4702    $r1 = self::$FAILED;
4703    goto seq_1;
4704  }
4705  $r5 = $this->discardi_($silence);
4706  if ($r5===self::$FAILED) {
4707    $this->currPos = $p3;
4708    $r1 = self::$FAILED;
4709    goto seq_1;
4710  }
4711  $r6 = $this->parseAttributeRest($silence);
4712  // a <- $r6
4713  if ($r6===self::$FAILED) {
4714    $this->currPos = $p3;
4715    $r1 = self::$FAILED;
4716    goto seq_1;
4717  }
4718  $r1 = true;
4719  seq_1:
4720  if ($r1!==self::$FAILED) {
4721    $this->savedPos = $p2;
4722    $r1 = $this->a41($r6);
4723  }
4724  // free $p3
4725  choice_1:
4726  return $r1;
4727}
4728private function parsePartialInterfaceOrPartialMixin($silence) {
4729  // start choice_1
4730  $r1 = $this->parsePartialInterfaceRest($silence);
4731  if ($r1!==self::$FAILED) {
4732    goto choice_1;
4733  }
4734  $r1 = $this->parseMixinRest($silence);
4735  choice_1:
4736  return $r1;
4737}
4738private function parsePartialDictionary($silence) {
4739  $p2 = $this->currPos;
4740  // start seq_1
4741  $p3 = $this->currPos;
4742  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "dictionary", $this->currPos, 10, false) === 0) {
4743    $r4 = "dictionary";
4744    $this->currPos += 10;
4745  } else {
4746    if (!$silence) {$this->fail(21);}
4747    $r4 = self::$FAILED;
4748    $r1 = self::$FAILED;
4749    goto seq_1;
4750  }
4751  $r5 = $this->discardi_($silence);
4752  if ($r5===self::$FAILED) {
4753    $this->currPos = $p3;
4754    $r1 = self::$FAILED;
4755    goto seq_1;
4756  }
4757  $r6 = $this->parseidentifier($silence);
4758  // name <- $r6
4759  if ($r6===self::$FAILED) {
4760    $this->currPos = $p3;
4761    $r1 = self::$FAILED;
4762    goto seq_1;
4763  }
4764  $r7 = $this->discard_($silence);
4765  if ($r7===self::$FAILED) {
4766    $this->currPos = $p3;
4767    $r1 = self::$FAILED;
4768    goto seq_1;
4769  }
4770  if (($this->input[$this->currPos] ?? null) === "{") {
4771    $this->currPos++;
4772    $r8 = "{";
4773  } else {
4774    if (!$silence) {$this->fail(17);}
4775    $r8 = self::$FAILED;
4776    $this->currPos = $p3;
4777    $r1 = self::$FAILED;
4778    goto seq_1;
4779  }
4780  $r9 = $this->discard_($silence);
4781  if ($r9===self::$FAILED) {
4782    $this->currPos = $p3;
4783    $r1 = self::$FAILED;
4784    goto seq_1;
4785  }
4786  $r10 = $this->parseDictionaryMembers($silence);
4787  // m <- $r10
4788  if ($r10===self::$FAILED) {
4789    $this->currPos = $p3;
4790    $r1 = self::$FAILED;
4791    goto seq_1;
4792  }
4793  if (($this->input[$this->currPos] ?? null) === "}") {
4794    $this->currPos++;
4795    $r11 = "}";
4796  } else {
4797    if (!$silence) {$this->fail(18);}
4798    $r11 = self::$FAILED;
4799    $this->currPos = $p3;
4800    $r1 = self::$FAILED;
4801    goto seq_1;
4802  }
4803  $r12 = $this->discard_($silence);
4804  if ($r12===self::$FAILED) {
4805    $this->currPos = $p3;
4806    $r1 = self::$FAILED;
4807    goto seq_1;
4808  }
4809  if (($this->input[$this->currPos] ?? null) === ";") {
4810    $this->currPos++;
4811    $r13 = ";";
4812  } else {
4813    if (!$silence) {$this->fail(19);}
4814    $r13 = self::$FAILED;
4815    $this->currPos = $p3;
4816    $r1 = self::$FAILED;
4817    goto seq_1;
4818  }
4819  $r14 = $this->discard_($silence);
4820  if ($r14===self::$FAILED) {
4821    $this->currPos = $p3;
4822    $r1 = self::$FAILED;
4823    goto seq_1;
4824  }
4825  $r1 = true;
4826  seq_1:
4827  if ($r1!==self::$FAILED) {
4828    $this->savedPos = $p2;
4829    $r1 = $this->a42($r6, $r10);
4830  }
4831  // free $p3
4832  return $r1;
4833}
4834private function parseDictionaryMemberRest($silence) {
4835  // start choice_1
4836  $p2 = $this->currPos;
4837  // start seq_1
4838  $p3 = $this->currPos;
4839  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "required", $this->currPos, 8, false) === 0) {
4840    $r4 = "required";
4841    $this->currPos += 8;
4842  } else {
4843    if (!$silence) {$this->fail(43);}
4844    $r4 = self::$FAILED;
4845    $r1 = self::$FAILED;
4846    goto seq_1;
4847  }
4848  $r5 = $this->discardi_($silence);
4849  if ($r5===self::$FAILED) {
4850    $this->currPos = $p3;
4851    $r1 = self::$FAILED;
4852    goto seq_1;
4853  }
4854  $r6 = $this->parseTypeWithExtendedAttributes($silence);
4855  // t <- $r6
4856  if ($r6===self::$FAILED) {
4857    $this->currPos = $p3;
4858    $r1 = self::$FAILED;
4859    goto seq_1;
4860  }
4861  $r7 = $this->parseidentifier($silence);
4862  // name <- $r7
4863  if ($r7===self::$FAILED) {
4864    $this->currPos = $p3;
4865    $r1 = self::$FAILED;
4866    goto seq_1;
4867  }
4868  $r8 = $this->discard_($silence);
4869  if ($r8===self::$FAILED) {
4870    $this->currPos = $p3;
4871    $r1 = self::$FAILED;
4872    goto seq_1;
4873  }
4874  if (($this->input[$this->currPos] ?? null) === ";") {
4875    $this->currPos++;
4876    $r9 = ";";
4877  } else {
4878    if (!$silence) {$this->fail(19);}
4879    $r9 = self::$FAILED;
4880    $this->currPos = $p3;
4881    $r1 = self::$FAILED;
4882    goto seq_1;
4883  }
4884  $r10 = $this->discard_($silence);
4885  if ($r10===self::$FAILED) {
4886    $this->currPos = $p3;
4887    $r1 = self::$FAILED;
4888    goto seq_1;
4889  }
4890  $r1 = true;
4891  seq_1:
4892  if ($r1!==self::$FAILED) {
4893    $this->savedPos = $p2;
4894    $r1 = $this->a43($r6, $r7);
4895    goto choice_1;
4896  }
4897  // free $p3
4898  $p3 = $this->currPos;
4899  // start seq_2
4900  $p11 = $this->currPos;
4901  $r12 = $this->parseType($silence);
4902  // t <- $r12
4903  if ($r12===self::$FAILED) {
4904    $r1 = self::$FAILED;
4905    goto seq_2;
4906  }
4907  $r13 = $this->parseidentifier($silence);
4908  // name <- $r13
4909  if ($r13===self::$FAILED) {
4910    $this->currPos = $p11;
4911    $r1 = self::$FAILED;
4912    goto seq_2;
4913  }
4914  $r14 = $this->discard_($silence);
4915  if ($r14===self::$FAILED) {
4916    $this->currPos = $p11;
4917    $r1 = self::$FAILED;
4918    goto seq_2;
4919  }
4920  $r15 = $this->parseDefault($silence);
4921  // d <- $r15
4922  if ($r15===self::$FAILED) {
4923    $this->currPos = $p11;
4924    $r1 = self::$FAILED;
4925    goto seq_2;
4926  }
4927  if (($this->input[$this->currPos] ?? null) === ";") {
4928    $this->currPos++;
4929    $r16 = ";";
4930  } else {
4931    if (!$silence) {$this->fail(19);}
4932    $r16 = self::$FAILED;
4933    $this->currPos = $p11;
4934    $r1 = self::$FAILED;
4935    goto seq_2;
4936  }
4937  $r17 = $this->discard_($silence);
4938  if ($r17===self::$FAILED) {
4939    $this->currPos = $p11;
4940    $r1 = self::$FAILED;
4941    goto seq_2;
4942  }
4943  $r1 = true;
4944  seq_2:
4945  if ($r1!==self::$FAILED) {
4946    $this->savedPos = $p3;
4947    $r1 = $this->a44($r12, $r13, $r15);
4948  }
4949  // free $p11
4950  choice_1:
4951  return $r1;
4952}
4953private function parsestring($silence) {
4954  $p2 = $this->currPos;
4955  // start seq_1
4956  $p3 = $this->currPos;
4957  if (($this->input[$this->currPos] ?? null) === "\"") {
4958    $this->currPos++;
4959    $r4 = "\"";
4960  } else {
4961    if (!$silence) {$this->fail(88);}
4962    $r4 = self::$FAILED;
4963    $r1 = self::$FAILED;
4964    goto seq_1;
4965  }
4966  $p6 = $this->currPos;
4967  for (;;) {
4968    $r7 = self::charAt($this->input, $this->currPos);
4969    if ($r7 !== '' && !($r7 === "\"")) {
4970      $this->currPos += strlen($r7);
4971    } else {
4972      $r7 = self::$FAILED;
4973      if (!$silence) {$this->fail(89);}
4974      break;
4975    }
4976  }
4977  // free $r7
4978  $r5 = true;
4979  // s <- $r5
4980  if ($r5!==self::$FAILED) {
4981    $r5 = substr($this->input, $p6, $this->currPos - $p6);
4982  } else {
4983    $r5 = self::$FAILED;
4984    $this->currPos = $p3;
4985    $r1 = self::$FAILED;
4986    goto seq_1;
4987  }
4988  // free $p6
4989  if (($this->input[$this->currPos] ?? null) === "\"") {
4990    $this->currPos++;
4991    $r7 = "\"";
4992  } else {
4993    if (!$silence) {$this->fail(88);}
4994    $r7 = self::$FAILED;
4995    $this->currPos = $p3;
4996    $r1 = self::$FAILED;
4997    goto seq_1;
4998  }
4999  $r1 = true;
5000  seq_1:
5001  if ($r1!==self::$FAILED) {
5002    $this->savedPos = $p2;
5003    $r1 = $this->a40($r5);
5004  }
5005  // free $p3
5006  return $r1;
5007}
5008private function parseEnumValueListComma($silence) {
5009  // start choice_1
5010  $p2 = $this->currPos;
5011  // start seq_1
5012  $p3 = $this->currPos;
5013  if (($this->input[$this->currPos] ?? null) === ",") {
5014    $this->currPos++;
5015    $r4 = ",";
5016  } else {
5017    if (!$silence) {$this->fail(13);}
5018    $r4 = self::$FAILED;
5019    $r1 = self::$FAILED;
5020    goto seq_1;
5021  }
5022  $r5 = $this->discard_($silence);
5023  if ($r5===self::$FAILED) {
5024    $this->currPos = $p3;
5025    $r1 = self::$FAILED;
5026    goto seq_1;
5027  }
5028  $r6 = $this->parseEnumValueListString($silence);
5029  // vals <- $r6
5030  if ($r6===self::$FAILED) {
5031    $this->currPos = $p3;
5032    $r1 = self::$FAILED;
5033    goto seq_1;
5034  }
5035  $r1 = true;
5036  seq_1:
5037  if ($r1!==self::$FAILED) {
5038    $this->savedPos = $p2;
5039    $r1 = $this->a45($r6);
5040    goto choice_1;
5041  }
5042  // free $p3
5043  $p3 = $this->currPos;
5044  $r1 = '';
5045  if ($r1!==self::$FAILED) {
5046    $this->savedPos = $p3;
5047    $r1 = $this->a5();
5048  }
5049  choice_1:
5050  return $r1;
5051}
5052private function parseType($silence) {
5053  // start choice_1
5054  $r1 = $this->parseSingleType($silence);
5055  if ($r1!==self::$FAILED) {
5056    goto choice_1;
5057  }
5058  $p2 = $this->currPos;
5059  // start seq_1
5060  $p3 = $this->currPos;
5061  $r4 = $this->parseUnionType($silence);
5062  // t <- $r4
5063  if ($r4===self::$FAILED) {
5064    $r1 = self::$FAILED;
5065    goto seq_1;
5066  }
5067  $r5 = $this->parseNull($silence);
5068  // n <- $r5
5069  if ($r5===self::$FAILED) {
5070    $this->currPos = $p3;
5071    $r1 = self::$FAILED;
5072    goto seq_1;
5073  }
5074  $r1 = true;
5075  seq_1:
5076  if ($r1!==self::$FAILED) {
5077    $this->savedPos = $p2;
5078    $r1 = $this->a46($r4, $r5);
5079  }
5080  // free $p3
5081  choice_1:
5082  return $r1;
5083}
5084private function parseArgument($silence) {
5085  $p2 = $this->currPos;
5086  // start seq_1
5087  $p3 = $this->currPos;
5088  $r4 = $this->parseExtendedAttributeList($silence);
5089  // e <- $r4
5090  if ($r4===self::$FAILED) {
5091    $r1 = self::$FAILED;
5092    goto seq_1;
5093  }
5094  $r5 = $this->parseArgumentRest($silence);
5095  // a <- $r5
5096  if ($r5===self::$FAILED) {
5097    $this->currPos = $p3;
5098    $r1 = self::$FAILED;
5099    goto seq_1;
5100  }
5101  $r1 = true;
5102  seq_1:
5103  if ($r1!==self::$FAILED) {
5104    $this->savedPos = $p2;
5105    $r1 = $this->a47($r4, $r5);
5106  }
5107  // free $p3
5108  return $r1;
5109}
5110private function parseArguments($silence) {
5111  // start choice_1
5112  $p2 = $this->currPos;
5113  // start seq_1
5114  $p3 = $this->currPos;
5115  if (($this->input[$this->currPos] ?? null) === ",") {
5116    $this->currPos++;
5117    $r4 = ",";
5118  } else {
5119    if (!$silence) {$this->fail(13);}
5120    $r4 = self::$FAILED;
5121    $r1 = self::$FAILED;
5122    goto seq_1;
5123  }
5124  $r5 = $this->discard_($silence);
5125  if ($r5===self::$FAILED) {
5126    $this->currPos = $p3;
5127    $r1 = self::$FAILED;
5128    goto seq_1;
5129  }
5130  $r6 = $this->parseArgument($silence);
5131  // a <- $r6
5132  if ($r6===self::$FAILED) {
5133    $this->currPos = $p3;
5134    $r1 = self::$FAILED;
5135    goto seq_1;
5136  }
5137  $r7 = $this->parseArguments($silence);
5138  // rest <- $r7
5139  if ($r7===self::$FAILED) {
5140    $this->currPos = $p3;
5141    $r1 = self::$FAILED;
5142    goto seq_1;
5143  }
5144  $r1 = true;
5145  seq_1:
5146  if ($r1!==self::$FAILED) {
5147    $this->savedPos = $p2;
5148    $r1 = $this->a26($r6, $r7);
5149    goto choice_1;
5150  }
5151  // free $p3
5152  $p3 = $this->currPos;
5153  $r1 = '';
5154  if ($r1!==self::$FAILED) {
5155    $this->savedPos = $p3;
5156    $r1 = $this->a5();
5157  }
5158  choice_1:
5159  return $r1;
5160}
5161private function discardstring($silence) {
5162  $p2 = $this->currPos;
5163  // start seq_1
5164  $p3 = $this->currPos;
5165  if (($this->input[$this->currPos] ?? null) === "\"") {
5166    $this->currPos++;
5167    $r4 = "\"";
5168  } else {
5169    if (!$silence) {$this->fail(88);}
5170    $r4 = self::$FAILED;
5171    $r1 = self::$FAILED;
5172    goto seq_1;
5173  }
5174  $p6 = $this->currPos;
5175  for (;;) {
5176    $r7 = self::charAt($this->input, $this->currPos);
5177    if ($r7 !== '' && !($r7 === "\"")) {
5178      $this->currPos += strlen($r7);
5179    } else {
5180      $r7 = self::$FAILED;
5181      if (!$silence) {$this->fail(89);}
5182      break;
5183    }
5184  }
5185  // free $r7
5186  $r5 = true;
5187  // s <- $r5
5188  if ($r5!==self::$FAILED) {
5189    $r5 = substr($this->input, $p6, $this->currPos - $p6);
5190  } else {
5191    $r5 = self::$FAILED;
5192    $this->currPos = $p3;
5193    $r1 = self::$FAILED;
5194    goto seq_1;
5195  }
5196  // free $p6
5197  if (($this->input[$this->currPos] ?? null) === "\"") {
5198    $this->currPos++;
5199    $r7 = "\"";
5200  } else {
5201    if (!$silence) {$this->fail(88);}
5202    $r7 = self::$FAILED;
5203    $this->currPos = $p3;
5204    $r1 = self::$FAILED;
5205    goto seq_1;
5206  }
5207  $r1 = true;
5208  seq_1:
5209  if ($r1!==self::$FAILED) {
5210    $this->savedPos = $p2;
5211    $r1 = $this->a40($r5);
5212  }
5213  // free $p3
5214  return $r1;
5215}
5216private function discardinteger($silence) {
5217  $p2 = $this->currPos;
5218  // start seq_1
5219  $p3 = $this->currPos;
5220  $r4 = $this->parseopt_minus($silence);
5221  // m <- $r4
5222  if ($r4===self::$FAILED) {
5223    $r1 = self::$FAILED;
5224    goto seq_1;
5225  }
5226  // start choice_1
5227  $r5 = $this->parsedecimal_integer($silence);
5228  if ($r5!==self::$FAILED) {
5229    goto choice_1;
5230  }
5231  $r5 = $this->parsehex_integer($silence);
5232  if ($r5!==self::$FAILED) {
5233    goto choice_1;
5234  }
5235  $r5 = $this->parseoctal_integer($silence);
5236  choice_1:
5237  // n <- $r5
5238  if ($r5===self::$FAILED) {
5239    $this->currPos = $p3;
5240    $r1 = self::$FAILED;
5241    goto seq_1;
5242  }
5243  $r1 = true;
5244  seq_1:
5245  if ($r1!==self::$FAILED) {
5246    $this->savedPos = $p2;
5247    $r1 = $this->a48($r4, $r5);
5248  }
5249  // free $p3
5250  return $r1;
5251}
5252private function discarddecimal($silence) {
5253  $p2 = $this->currPos;
5254  $p4 = $this->currPos;
5255  // start seq_1
5256  $p5 = $this->currPos;
5257  $r6 = $this->parseopt_minus($silence);
5258  // m <- $r6
5259  if ($r6===self::$FAILED) {
5260    $r3 = self::$FAILED;
5261    goto seq_1;
5262  }
5263  // start choice_1
5264  // start seq_2
5265  $p8 = $this->currPos;
5266  // start choice_2
5267  // start seq_3
5268  $p10 = $this->currPos;
5269  $r11 = self::$FAILED;
5270  for (;;) {
5271    $r12 = $this->input[$this->currPos] ?? '';
5272    if (preg_match("/^[0-9]/", $r12)) {
5273      $this->currPos++;
5274      $r11 = true;
5275    } else {
5276      $r12 = self::$FAILED;
5277      if (!$silence) {$this->fail(90);}
5278      break;
5279    }
5280  }
5281  if ($r11===self::$FAILED) {
5282    $r9 = self::$FAILED;
5283    goto seq_3;
5284  }
5285  // free $r12
5286  if (($this->input[$this->currPos] ?? null) === ".") {
5287    $this->currPos++;
5288    $r12 = ".";
5289  } else {
5290    if (!$silence) {$this->fail(91);}
5291    $r12 = self::$FAILED;
5292    $this->currPos = $p10;
5293    $r9 = self::$FAILED;
5294    goto seq_3;
5295  }
5296  for (;;) {
5297    $r14 = $this->input[$this->currPos] ?? '';
5298    if (preg_match("/^[0-9]/", $r14)) {
5299      $this->currPos++;
5300    } else {
5301      $r14 = self::$FAILED;
5302      if (!$silence) {$this->fail(90);}
5303      break;
5304    }
5305  }
5306  // free $r14
5307  $r13 = true;
5308  if ($r13===self::$FAILED) {
5309    $this->currPos = $p10;
5310    $r9 = self::$FAILED;
5311    goto seq_3;
5312  }
5313  // free $r13
5314  $r9 = true;
5315  seq_3:
5316  if ($r9!==self::$FAILED) {
5317    goto choice_2;
5318  }
5319  // free $p10
5320  // start seq_4
5321  $p10 = $this->currPos;
5322  for (;;) {
5323    $r14 = $this->input[$this->currPos] ?? '';
5324    if (preg_match("/^[0-9]/", $r14)) {
5325      $this->currPos++;
5326    } else {
5327      $r14 = self::$FAILED;
5328      if (!$silence) {$this->fail(90);}
5329      break;
5330    }
5331  }
5332  // free $r14
5333  $r13 = true;
5334  if ($r13===self::$FAILED) {
5335    $r9 = self::$FAILED;
5336    goto seq_4;
5337  }
5338  // free $r13
5339  if (($this->input[$this->currPos] ?? null) === ".") {
5340    $this->currPos++;
5341    $r13 = ".";
5342  } else {
5343    if (!$silence) {$this->fail(91);}
5344    $r13 = self::$FAILED;
5345    $this->currPos = $p10;
5346    $r9 = self::$FAILED;
5347    goto seq_4;
5348  }
5349  $r14 = self::$FAILED;
5350  for (;;) {
5351    $r15 = $this->input[$this->currPos] ?? '';
5352    if (preg_match("/^[0-9]/", $r15)) {
5353      $this->currPos++;
5354      $r14 = true;
5355    } else {
5356      $r15 = self::$FAILED;
5357      if (!$silence) {$this->fail(90);}
5358      break;
5359    }
5360  }
5361  if ($r14===self::$FAILED) {
5362    $this->currPos = $p10;
5363    $r9 = self::$FAILED;
5364    goto seq_4;
5365  }
5366  // free $r15
5367  $r9 = true;
5368  seq_4:
5369  // free $p10
5370  choice_2:
5371  if ($r9===self::$FAILED) {
5372    $r7 = self::$FAILED;
5373    goto seq_2;
5374  }
5375  // start seq_5
5376  $p10 = $this->currPos;
5377  $r16 = $this->input[$this->currPos] ?? '';
5378  if ($r16 === "E" || $r16 === "e") {
5379    $this->currPos++;
5380  } else {
5381    $r16 = self::$FAILED;
5382    if (!$silence) {$this->fail(92);}
5383    $r15 = self::$FAILED;
5384    goto seq_5;
5385  }
5386  $r17 = $this->input[$this->currPos] ?? '';
5387  if ($r17 === "+" || $r17 === "-") {
5388    $this->currPos++;
5389  } else {
5390    $r17 = self::$FAILED;
5391    if (!$silence) {$this->fail(93);}
5392    $r17 = null;
5393  }
5394  $r18 = self::$FAILED;
5395  for (;;) {
5396    $r19 = $this->input[$this->currPos] ?? '';
5397    if (preg_match("/^[0-9]/", $r19)) {
5398      $this->currPos++;
5399      $r18 = true;
5400    } else {
5401      $r19 = self::$FAILED;
5402      if (!$silence) {$this->fail(90);}
5403      break;
5404    }
5405  }
5406  if ($r18===self::$FAILED) {
5407    $this->currPos = $p10;
5408    $r15 = self::$FAILED;
5409    goto seq_5;
5410  }
5411  // free $r19
5412  $r15 = true;
5413  seq_5:
5414  if ($r15===self::$FAILED) {
5415    $r15 = null;
5416  }
5417  // free $p10
5418  $r7 = true;
5419  seq_2:
5420  if ($r7!==self::$FAILED) {
5421    goto choice_1;
5422  }
5423  // free $p8
5424  // start seq_6
5425  $p8 = $this->currPos;
5426  $r19 = self::$FAILED;
5427  for (;;) {
5428    $r20 = $this->input[$this->currPos] ?? '';
5429    if (preg_match("/^[0-9]/", $r20)) {
5430      $this->currPos++;
5431      $r19 = true;
5432    } else {
5433      $r20 = self::$FAILED;
5434      if (!$silence) {$this->fail(90);}
5435      break;
5436    }
5437  }
5438  if ($r19===self::$FAILED) {
5439    $r7 = self::$FAILED;
5440    goto seq_6;
5441  }
5442  // free $r20
5443  $r20 = $this->input[$this->currPos] ?? '';
5444  if ($r20 === "E" || $r20 === "e") {
5445    $this->currPos++;
5446  } else {
5447    $r20 = self::$FAILED;
5448    if (!$silence) {$this->fail(92);}
5449    $this->currPos = $p8;
5450    $r7 = self::$FAILED;
5451    goto seq_6;
5452  }
5453  $r21 = $this->input[$this->currPos] ?? '';
5454  if ($r21 === "+" || $r21 === "-") {
5455    $this->currPos++;
5456  } else {
5457    $r21 = self::$FAILED;
5458    if (!$silence) {$this->fail(93);}
5459    $r21 = null;
5460  }
5461  $r22 = self::$FAILED;
5462  for (;;) {
5463    $r23 = $this->input[$this->currPos] ?? '';
5464    if (preg_match("/^[0-9]/", $r23)) {
5465      $this->currPos++;
5466      $r22 = true;
5467    } else {
5468      $r23 = self::$FAILED;
5469      if (!$silence) {$this->fail(90);}
5470      break;
5471    }
5472  }
5473  if ($r22===self::$FAILED) {
5474    $this->currPos = $p8;
5475    $r7 = self::$FAILED;
5476    goto seq_6;
5477  }
5478  // free $r23
5479  $r7 = true;
5480  seq_6:
5481  // free $p8
5482  choice_1:
5483  if ($r7===self::$FAILED) {
5484    $this->currPos = $p5;
5485    $r3 = self::$FAILED;
5486    goto seq_1;
5487  }
5488  $r3 = true;
5489  seq_1:
5490  // s <- $r3
5491  if ($r3!==self::$FAILED) {
5492    $r3 = substr($this->input, $p4, $this->currPos - $p4);
5493  } else {
5494    $r3 = self::$FAILED;
5495  }
5496  // free $p5
5497  // free $p4
5498  $r1 = $r3;
5499  if ($r1!==self::$FAILED) {
5500    $this->savedPos = $p2;
5501    $r1 = $this->a49($r3);
5502  }
5503  return $r1;
5504}
5505private function discardOtherOrComma($silence) {
5506  // start choice_1
5507  $r1 = $this->discardOther($silence);
5508  if ($r1!==self::$FAILED) {
5509    goto choice_1;
5510  }
5511  // start seq_1
5512  $p2 = $this->currPos;
5513  if (($this->input[$this->currPos] ?? null) === ",") {
5514    $this->currPos++;
5515    $r3 = ",";
5516  } else {
5517    if (!$silence) {$this->fail(13);}
5518    $r3 = self::$FAILED;
5519    $r1 = self::$FAILED;
5520    goto seq_1;
5521  }
5522  $r4 = $this->discard_($silence);
5523  if ($r4===self::$FAILED) {
5524    $this->currPos = $p2;
5525    $r1 = self::$FAILED;
5526    goto seq_1;
5527  }
5528  $r1 = true;
5529  seq_1:
5530  // free $p2
5531  choice_1:
5532  return $r1;
5533}
5534private function discardidentifier($silence) {
5535  $p2 = $this->currPos;
5536  // start seq_1
5537  $p3 = $this->currPos;
5538  $p4 = $this->currPos;
5539  // start choice_1
5540  $r5 = $this->discardArgumentNameKeyword(true);
5541  if ($r5!==self::$FAILED) {
5542    goto choice_1;
5543  }
5544  $r5 = $this->discardBufferRelatedType(true);
5545  if ($r5!==self::$FAILED) {
5546    goto choice_1;
5547  }
5548  $r5 = $this->discardOtherIdLike(true);
5549  choice_1:
5550  if ($r5 === self::$FAILED) {
5551    $r5 = false;
5552  } else {
5553    $r5 = self::$FAILED;
5554    $this->currPos = $p4;
5555    $r1 = self::$FAILED;
5556    goto seq_1;
5557  }
5558  // free $p4
5559  $p4 = $this->currPos;
5560  // start seq_2
5561  $p7 = $this->currPos;
5562  // start choice_2
5563  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "_constructor", $this->currPos, 12, false) === 0) {
5564    $r8 = "_constructor";
5565    $this->currPos += 12;
5566    goto choice_2;
5567  } else {
5568    $r8 = self::$FAILED;
5569  }
5570  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "_toString", $this->currPos, 9, false) === 0) {
5571    $r8 = "_toString";
5572    $this->currPos += 9;
5573    goto choice_2;
5574  } else {
5575    $r8 = self::$FAILED;
5576  }
5577  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "toString", $this->currPos, 8, false) === 0) {
5578    $r8 = "toString";
5579    $this->currPos += 8;
5580  } else {
5581    $r8 = self::$FAILED;
5582  }
5583  choice_2:
5584  if ($r8===self::$FAILED) {
5585    $r6 = self::$FAILED;
5586    goto seq_2;
5587  }
5588  $r9 = $this->discardi_(true);
5589  if ($r9===self::$FAILED) {
5590    $this->currPos = $p7;
5591    $r6 = self::$FAILED;
5592    goto seq_2;
5593  }
5594  $r6 = true;
5595  seq_2:
5596  // free $p7
5597  if ($r6 === self::$FAILED) {
5598    $r6 = false;
5599  } else {
5600    $r6 = self::$FAILED;
5601    $this->currPos = $p4;
5602    $this->currPos = $p3;
5603    $r1 = self::$FAILED;
5604    goto seq_1;
5605  }
5606  // free $p4
5607  $p4 = $this->currPos;
5608  // start seq_3
5609  $p7 = $this->currPos;
5610  $r11 = $this->input[$this->currPos] ?? '';
5611  if ($r11 === "-" || $r11 === "_") {
5612    $this->currPos++;
5613  } else {
5614    $r11 = self::$FAILED;
5615    if (!$silence) {$this->fail(28);}
5616    $r11 = null;
5617  }
5618  $r12 = $this->input[$this->currPos] ?? '';
5619  if (preg_match("/^[A-Za-z]/", $r12)) {
5620    $this->currPos++;
5621  } else {
5622    $r12 = self::$FAILED;
5623    if (!$silence) {$this->fail(29);}
5624    $this->currPos = $p7;
5625    $r10 = self::$FAILED;
5626    goto seq_3;
5627  }
5628  for (;;) {
5629    $r14 = $this->input[$this->currPos] ?? '';
5630    if (preg_match("/^[\\-_0-9A-Za-z]/", $r14)) {
5631      $this->currPos++;
5632    } else {
5633      $r14 = self::$FAILED;
5634      if (!$silence) {$this->fail(30);}
5635      break;
5636    }
5637  }
5638  // free $r14
5639  $r13 = true;
5640  if ($r13===self::$FAILED) {
5641    $this->currPos = $p7;
5642    $r10 = self::$FAILED;
5643    goto seq_3;
5644  }
5645  // free $r13
5646  $r10 = true;
5647  seq_3:
5648  // s <- $r10
5649  if ($r10!==self::$FAILED) {
5650    $r10 = substr($this->input, $p4, $this->currPos - $p4);
5651  } else {
5652    $r10 = self::$FAILED;
5653    $this->currPos = $p3;
5654    $r1 = self::$FAILED;
5655    goto seq_1;
5656  }
5657  // free $p7
5658  // free $p4
5659  $r1 = true;
5660  seq_1:
5661  if ($r1!==self::$FAILED) {
5662    $this->savedPos = $p2;
5663    $r1 = $this->a20($r10);
5664  }
5665  // free $p3
5666  return $r1;
5667}
5668private function discardotherchar($silence) {
5669  // start seq_1
5670  $p1 = $this->currPos;
5671  $p3 = $this->currPos;
5672  $r4 = $this->discardotherterminals(true);
5673  if ($r4 === self::$FAILED) {
5674    $r4 = false;
5675  } else {
5676    $r4 = self::$FAILED;
5677    $this->currPos = $p3;
5678    $r2 = self::$FAILED;
5679    goto seq_1;
5680  }
5681  // free $p3
5682  $p3 = $this->currPos;
5683  if (strspn($this->input, "()[]{},", $this->currPos, 1) !== 0) {
5684    $r5 = $this->input[$this->currPos++];
5685  } else {
5686    $r5 = self::$FAILED;
5687  }
5688  if ($r5 === self::$FAILED) {
5689    $r5 = false;
5690  } else {
5691    $r5 = self::$FAILED;
5692    $this->currPos = $p3;
5693    $this->currPos = $p1;
5694    $r2 = self::$FAILED;
5695    goto seq_1;
5696  }
5697  // free $p3
5698  $r6 = self::charAt($this->input, $this->currPos);
5699  if (preg_match("/^[^\\x09\\x0a\\x0d 0-9A-Za-z]/", $r6)) {
5700    $this->currPos += strlen($r6);
5701  } else {
5702    $r6 = self::$FAILED;
5703    if (!$silence) {$this->fail(94);}
5704    $this->currPos = $p1;
5705    $r2 = self::$FAILED;
5706    goto seq_1;
5707  }
5708  $r2 = true;
5709  seq_1:
5710  // free $r2,$p1
5711  return $r2;
5712}
5713private function discardotherterminals($silence) {
5714  // start choice_1
5715  if (($this->input[$this->currPos] ?? null) === "-") {
5716    $this->currPos++;
5717    $r1 = "-";
5718    goto choice_1;
5719  } else {
5720    if (!$silence) {$this->fail(95);}
5721    $r1 = self::$FAILED;
5722  }
5723  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "-Infinity", $this->currPos, 9, false) === 0) {
5724    $r1 = "-Infinity";
5725    $this->currPos += 9;
5726    goto choice_1;
5727  } else {
5728    if (!$silence) {$this->fail(96);}
5729    $r1 = self::$FAILED;
5730  }
5731  if (($this->input[$this->currPos] ?? null) === ".") {
5732    $this->currPos++;
5733    $r1 = ".";
5734    goto choice_1;
5735  } else {
5736    if (!$silence) {$this->fail(91);}
5737    $r1 = self::$FAILED;
5738  }
5739  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "...", $this->currPos, 3, false) === 0) {
5740    $r1 = "...";
5741    $this->currPos += 3;
5742    goto choice_1;
5743  } else {
5744    if (!$silence) {$this->fail(97);}
5745    $r1 = self::$FAILED;
5746  }
5747  if (($this->input[$this->currPos] ?? null) === ":") {
5748    $this->currPos++;
5749    $r1 = ":";
5750    goto choice_1;
5751  } else {
5752    if (!$silence) {$this->fail(31);}
5753    $r1 = self::$FAILED;
5754  }
5755  if (($this->input[$this->currPos] ?? null) === ";") {
5756    $this->currPos++;
5757    $r1 = ";";
5758    goto choice_1;
5759  } else {
5760    if (!$silence) {$this->fail(19);}
5761    $r1 = self::$FAILED;
5762  }
5763  if (($this->input[$this->currPos] ?? null) === "<") {
5764    $this->currPos++;
5765    $r1 = "<";
5766    goto choice_1;
5767  } else {
5768    if (!$silence) {$this->fail(98);}
5769    $r1 = self::$FAILED;
5770  }
5771  if (($this->input[$this->currPos] ?? null) === "=") {
5772    $this->currPos++;
5773    $r1 = "=";
5774    goto choice_1;
5775  } else {
5776    if (!$silence) {$this->fail(27);}
5777    $r1 = self::$FAILED;
5778  }
5779  if (($this->input[$this->currPos] ?? null) === ">") {
5780    $this->currPos++;
5781    $r1 = ">";
5782    goto choice_1;
5783  } else {
5784    if (!$silence) {$this->fail(99);}
5785    $r1 = self::$FAILED;
5786  }
5787  if (($this->input[$this->currPos] ?? null) === "?") {
5788    $this->currPos++;
5789    $r1 = "?";
5790  } else {
5791    if (!$silence) {$this->fail(100);}
5792    $r1 = self::$FAILED;
5793  }
5794  choice_1:
5795  return $r1;
5796}
5797private function parseCallbackInterfaceMember($silence) {
5798  // start choice_1
5799  $r1 = $this->parseConst($silence);
5800  if ($r1!==self::$FAILED) {
5801    goto choice_1;
5802  }
5803  $r1 = $this->parseRegularOperation($silence);
5804  choice_1:
5805  return $r1;
5806}
5807private function parseInterfaceMembers($silence) {
5808  $r1 = [];
5809  for (;;) {
5810    $p3 = $this->currPos;
5811    // start seq_1
5812    $p4 = $this->currPos;
5813    $r5 = $this->parseleadingComments($silence);
5814    // c <- $r5
5815    if ($r5===self::$FAILED) {
5816      $r2 = self::$FAILED;
5817      goto seq_1;
5818    }
5819    $r6 = $this->parseExtendedAttributeList($silence);
5820    // e <- $r6
5821    if ($r6===self::$FAILED) {
5822      $this->currPos = $p4;
5823      $r2 = self::$FAILED;
5824      goto seq_1;
5825    }
5826    $r7 = $this->parseInterfaceMember($silence);
5827    // m <- $r7
5828    if ($r7===self::$FAILED) {
5829      $this->currPos = $p4;
5830      $r2 = self::$FAILED;
5831      goto seq_1;
5832    }
5833    $r2 = true;
5834    seq_1:
5835    if ($r2!==self::$FAILED) {
5836      $this->savedPos = $p3;
5837      $r2 = $this->a21($r5, $r6, $r7);
5838      $r1[] = $r2;
5839    } else {
5840      break;
5841    }
5842    // free $p4
5843  }
5844  // free $r2
5845  return $r1;
5846}
5847private function parsec_($silence) {
5848  $p2 = $this->currPos;
5849  // start seq_1
5850  $p3 = $this->currPos;
5851  $r4 = [];
5852  for (;;) {
5853    // start choice_1
5854    $p6 = $this->currPos;
5855    $r5 = $this->input[$this->currPos] ?? '';
5856    if ($r5 === " " || $r5 === "\x09") {
5857      $this->currPos++;
5858      $this->savedPos = $p6;
5859      $r5 = $this->a50();
5860      goto choice_1;
5861    } else {
5862      $r5 = self::$FAILED;
5863      if (!$silence) {$this->fail(101);}
5864    }
5865    $p7 = $this->currPos;
5866    $r5 = $this->discardcomment($silence);
5867    if ($r5!==self::$FAILED) {
5868      $r5 = substr($this->input, $p7, $this->currPos - $p7);
5869    } else {
5870      $r5 = self::$FAILED;
5871    }
5872    // free $p7
5873    choice_1:
5874    if ($r5!==self::$FAILED) {
5875      $r4[] = $r5;
5876    } else {
5877      break;
5878    }
5879  }
5880  // r <- $r4
5881  // free $r5
5882  $r5 = $this->discard_($silence);
5883  if ($r5===self::$FAILED) {
5884    $this->currPos = $p3;
5885    $r1 = self::$FAILED;
5886    goto seq_1;
5887  }
5888  $r1 = true;
5889  seq_1:
5890  if ($r1!==self::$FAILED) {
5891    $this->savedPos = $p2;
5892    $r1 = $this->a51($r4);
5893  }
5894  // free $p3
5895  return $r1;
5896}
5897private function parseMixinMembers($silence) {
5898  $r1 = [];
5899  for (;;) {
5900    $p3 = $this->currPos;
5901    // start seq_1
5902    $p4 = $this->currPos;
5903    $r5 = $this->parseleadingComments($silence);
5904    // c <- $r5
5905    if ($r5===self::$FAILED) {
5906      $r2 = self::$FAILED;
5907      goto seq_1;
5908    }
5909    $r6 = $this->parseExtendedAttributeList($silence);
5910    // e <- $r6
5911    if ($r6===self::$FAILED) {
5912      $this->currPos = $p4;
5913      $r2 = self::$FAILED;
5914      goto seq_1;
5915    }
5916    $r7 = $this->parseMixinMember($silence);
5917    // m <- $r7
5918    if ($r7===self::$FAILED) {
5919      $this->currPos = $p4;
5920      $r2 = self::$FAILED;
5921      goto seq_1;
5922    }
5923    $r2 = true;
5924    seq_1:
5925    if ($r2!==self::$FAILED) {
5926      $this->savedPos = $p3;
5927      $r2 = $this->a21($r5, $r6, $r7);
5928      $r1[] = $r2;
5929    } else {
5930      break;
5931    }
5932    // free $p4
5933  }
5934  // free $r2
5935  return $r1;
5936}
5937private function parseRegularOperation($silence) {
5938  $p2 = $this->currPos;
5939  // start seq_1
5940  $p3 = $this->currPos;
5941  $r4 = $this->parseType($silence);
5942  // t <- $r4
5943  if ($r4===self::$FAILED) {
5944    $r1 = self::$FAILED;
5945    goto seq_1;
5946  }
5947  $r5 = $this->parseOperationRest($silence);
5948  // o <- $r5
5949  if ($r5===self::$FAILED) {
5950    $this->currPos = $p3;
5951    $r1 = self::$FAILED;
5952    goto seq_1;
5953  }
5954  $r1 = true;
5955  seq_1:
5956  if ($r1!==self::$FAILED) {
5957    $this->savedPos = $p2;
5958    $r1 = $this->a52($r4, $r5);
5959  }
5960  // free $p3
5961  return $r1;
5962}
5963private function parseAttributeRest($silence) {
5964  $p2 = $this->currPos;
5965  // start seq_1
5966  $p3 = $this->currPos;
5967  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "attribute", $this->currPos, 9, false) === 0) {
5968    $r4 = "attribute";
5969    $this->currPos += 9;
5970  } else {
5971    if (!$silence) {$this->fail(34);}
5972    $r4 = self::$FAILED;
5973    $r1 = self::$FAILED;
5974    goto seq_1;
5975  }
5976  $r5 = $this->discardi_($silence);
5977  if ($r5===self::$FAILED) {
5978    $this->currPos = $p3;
5979    $r1 = self::$FAILED;
5980    goto seq_1;
5981  }
5982  $r6 = $this->parseTypeWithExtendedAttributes($silence);
5983  // t <- $r6
5984  if ($r6===self::$FAILED) {
5985    $this->currPos = $p3;
5986    $r1 = self::$FAILED;
5987    goto seq_1;
5988  }
5989  $r7 = $this->parseAttributeName($silence);
5990  // name <- $r7
5991  if ($r7===self::$FAILED) {
5992    $this->currPos = $p3;
5993    $r1 = self::$FAILED;
5994    goto seq_1;
5995  }
5996  if (($this->input[$this->currPos] ?? null) === ";") {
5997    $this->currPos++;
5998    $r8 = ";";
5999  } else {
6000    if (!$silence) {$this->fail(19);}
6001    $r8 = self::$FAILED;
6002    $this->currPos = $p3;
6003    $r1 = self::$FAILED;
6004    goto seq_1;
6005  }
6006  $r9 = $this->parsec_($silence);
6007  // c <- $r9
6008  if ($r9===self::$FAILED) {
6009    $this->currPos = $p3;
6010    $r1 = self::$FAILED;
6011    goto seq_1;
6012  }
6013  $r1 = true;
6014  seq_1:
6015  if ($r1!==self::$FAILED) {
6016    $this->savedPos = $p2;
6017    $r1 = $this->a53($r6, $r7, $r9);
6018  }
6019  // free $p3
6020  return $r1;
6021}
6022private function parsePartialInterfaceRest($silence) {
6023  $p2 = $this->currPos;
6024  // start seq_1
6025  $p3 = $this->currPos;
6026  $r4 = $this->parseidentifier($silence);
6027  // name <- $r4
6028  if ($r4===self::$FAILED) {
6029    $r1 = self::$FAILED;
6030    goto seq_1;
6031  }
6032  $r5 = $this->discard_($silence);
6033  if ($r5===self::$FAILED) {
6034    $this->currPos = $p3;
6035    $r1 = self::$FAILED;
6036    goto seq_1;
6037  }
6038  if (($this->input[$this->currPos] ?? null) === "{") {
6039    $this->currPos++;
6040    $r6 = "{";
6041  } else {
6042    if (!$silence) {$this->fail(17);}
6043    $r6 = self::$FAILED;
6044    $this->currPos = $p3;
6045    $r1 = self::$FAILED;
6046    goto seq_1;
6047  }
6048  $r7 = $this->discard_($silence);
6049  if ($r7===self::$FAILED) {
6050    $this->currPos = $p3;
6051    $r1 = self::$FAILED;
6052    goto seq_1;
6053  }
6054  $r8 = $this->parsePartialInterfaceMembers($silence);
6055  // m <- $r8
6056  if ($r8===self::$FAILED) {
6057    $this->currPos = $p3;
6058    $r1 = self::$FAILED;
6059    goto seq_1;
6060  }
6061  if (($this->input[$this->currPos] ?? null) === "}") {
6062    $this->currPos++;
6063    $r9 = "}";
6064  } else {
6065    if (!$silence) {$this->fail(18);}
6066    $r9 = self::$FAILED;
6067    $this->currPos = $p3;
6068    $r1 = self::$FAILED;
6069    goto seq_1;
6070  }
6071  $r10 = $this->discard_($silence);
6072  if ($r10===self::$FAILED) {
6073    $this->currPos = $p3;
6074    $r1 = self::$FAILED;
6075    goto seq_1;
6076  }
6077  if (($this->input[$this->currPos] ?? null) === ";") {
6078    $this->currPos++;
6079    $r11 = ";";
6080  } else {
6081    if (!$silence) {$this->fail(19);}
6082    $r11 = self::$FAILED;
6083    $this->currPos = $p3;
6084    $r1 = self::$FAILED;
6085    goto seq_1;
6086  }
6087  $r12 = $this->discard_($silence);
6088  if ($r12===self::$FAILED) {
6089    $this->currPos = $p3;
6090    $r1 = self::$FAILED;
6091    goto seq_1;
6092  }
6093  $r1 = true;
6094  seq_1:
6095  if ($r1!==self::$FAILED) {
6096    $this->savedPos = $p2;
6097    $r1 = $this->a54($r4, $r8);
6098  }
6099  // free $p3
6100  return $r1;
6101}
6102private function parseDefault($silence) {
6103  $p2 = $this->currPos;
6104  // start seq_1
6105  $p3 = $this->currPos;
6106  if (($this->input[$this->currPos] ?? null) === "=") {
6107    $this->currPos++;
6108    $r4 = "=";
6109  } else {
6110    if (!$silence) {$this->fail(27);}
6111    $r4 = self::$FAILED;
6112    $r1 = self::$FAILED;
6113    goto seq_1;
6114  }
6115  $r5 = $this->discard_($silence);
6116  if ($r5===self::$FAILED) {
6117    $this->currPos = $p3;
6118    $r1 = self::$FAILED;
6119    goto seq_1;
6120  }
6121  $r6 = $this->parseDefaultValue($silence);
6122  // val <- $r6
6123  if ($r6===self::$FAILED) {
6124    $this->currPos = $p3;
6125    $r1 = self::$FAILED;
6126    goto seq_1;
6127  }
6128  $r1 = true;
6129  seq_1:
6130  if ($r1!==self::$FAILED) {
6131    $this->savedPos = $p2;
6132    $r1 = $this->a55($r6);
6133  } else {
6134    $r1 = null;
6135  }
6136  // free $p3
6137  return $r1;
6138}
6139private function parseEnumValueListString($silence) {
6140  // start choice_1
6141  $p2 = $this->currPos;
6142  // start seq_1
6143  $p3 = $this->currPos;
6144  $r4 = $this->parsestring($silence);
6145  // s <- $r4
6146  if ($r4===self::$FAILED) {
6147    $r1 = self::$FAILED;
6148    goto seq_1;
6149  }
6150  $r5 = $this->discard_($silence);
6151  if ($r5===self::$FAILED) {
6152    $this->currPos = $p3;
6153    $r1 = self::$FAILED;
6154    goto seq_1;
6155  }
6156  $r6 = $this->parseEnumValueListComma($silence);
6157  // vals <- $r6
6158  if ($r6===self::$FAILED) {
6159    $this->currPos = $p3;
6160    $r1 = self::$FAILED;
6161    goto seq_1;
6162  }
6163  $r1 = true;
6164  seq_1:
6165  if ($r1!==self::$FAILED) {
6166    $this->savedPos = $p2;
6167    $r1 = $this->a56($r4, $r6);
6168    goto choice_1;
6169  }
6170  // free $p3
6171  $p3 = $this->currPos;
6172  $r1 = '';
6173  if ($r1!==self::$FAILED) {
6174    $this->savedPos = $p3;
6175    $r1 = $this->a5();
6176  }
6177  choice_1:
6178  return $r1;
6179}
6180private function parseSingleType($silence) {
6181  // start choice_1
6182  $r1 = $this->parseDistinguishableType($silence);
6183  if ($r1!==self::$FAILED) {
6184    goto choice_1;
6185  }
6186  $r1 = $this->parseAnyType($silence);
6187  if ($r1!==self::$FAILED) {
6188    goto choice_1;
6189  }
6190  $r1 = $this->parsePromiseType($silence);
6191  choice_1:
6192  return $r1;
6193}
6194private function parseUnionType($silence) {
6195  $p2 = $this->currPos;
6196  // start seq_1
6197  $p3 = $this->currPos;
6198  if (($this->input[$this->currPos] ?? null) === "(") {
6199    $this->currPos++;
6200    $r4 = "(";
6201  } else {
6202    if (!$silence) {$this->fail(25);}
6203    $r4 = self::$FAILED;
6204    $r1 = self::$FAILED;
6205    goto seq_1;
6206  }
6207  $r5 = $this->discard_($silence);
6208  if ($r5===self::$FAILED) {
6209    $this->currPos = $p3;
6210    $r1 = self::$FAILED;
6211    goto seq_1;
6212  }
6213  $r6 = $this->parseUnionMemberType($silence);
6214  // t <- $r6
6215  if ($r6===self::$FAILED) {
6216    $this->currPos = $p3;
6217    $r1 = self::$FAILED;
6218    goto seq_1;
6219  }
6220  $r7 = [];
6221  for (;;) {
6222    $p9 = $this->currPos;
6223    // start seq_2
6224    $p10 = $this->currPos;
6225    if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "or", $this->currPos, 2, false) === 0) {
6226      $r11 = "or";
6227      $this->currPos += 2;
6228    } else {
6229      if (!$silence) {$this->fail(79);}
6230      $r11 = self::$FAILED;
6231      $r8 = self::$FAILED;
6232      goto seq_2;
6233    }
6234    $r12 = $this->discardi_($silence);
6235    if ($r12===self::$FAILED) {
6236      $this->currPos = $p10;
6237      $r8 = self::$FAILED;
6238      goto seq_2;
6239    }
6240    $r13 = $this->parseUnionMemberType($silence);
6241    // t2 <- $r13
6242    if ($r13===self::$FAILED) {
6243      $this->currPos = $p10;
6244      $r8 = self::$FAILED;
6245      goto seq_2;
6246    }
6247    $r8 = true;
6248    seq_2:
6249    if ($r8!==self::$FAILED) {
6250      $this->savedPos = $p9;
6251      $r8 = $this->a57($r6, $r13);
6252      $r7[] = $r8;
6253    } else {
6254      break;
6255    }
6256    // free $p10
6257  }
6258  if (count($r7) === 0) {
6259    $r7 = self::$FAILED;
6260  }
6261  // rest <- $r7
6262  if ($r7===self::$FAILED) {
6263    $this->currPos = $p3;
6264    $r1 = self::$FAILED;
6265    goto seq_1;
6266  }
6267  // free $r8
6268  if (($this->input[$this->currPos] ?? null) === ")") {
6269    $this->currPos++;
6270    $r8 = ")";
6271  } else {
6272    if (!$silence) {$this->fail(26);}
6273    $r8 = self::$FAILED;
6274    $this->currPos = $p3;
6275    $r1 = self::$FAILED;
6276    goto seq_1;
6277  }
6278  $r14 = $this->discard_($silence);
6279  if ($r14===self::$FAILED) {
6280    $this->currPos = $p3;
6281    $r1 = self::$FAILED;
6282    goto seq_1;
6283  }
6284  $r1 = true;
6285  seq_1:
6286  if ($r1!==self::$FAILED) {
6287    $this->savedPos = $p2;
6288    $r1 = $this->a58($r6, $r7);
6289  }
6290  // free $p3
6291  return $r1;
6292}
6293private function parseNull($silence) {
6294  $p2 = $this->currPos;
6295  // start seq_1
6296  $p3 = $this->currPos;
6297  if (($this->input[$this->currPos] ?? null) === "?") {
6298    $this->currPos++;
6299    $r4 = "?";
6300  } else {
6301    if (!$silence) {$this->fail(100);}
6302    $r4 = self::$FAILED;
6303    $r1 = self::$FAILED;
6304    goto seq_1;
6305  }
6306  $r5 = $this->discard_($silence);
6307  if ($r5===self::$FAILED) {
6308    $this->currPos = $p3;
6309    $r1 = self::$FAILED;
6310    goto seq_1;
6311  }
6312  $r1 = true;
6313  seq_1:
6314  if ($r1!==self::$FAILED) {
6315    $this->savedPos = $p2;
6316    $r1 = $this->a59();
6317  } else {
6318    $r1 = null;
6319  }
6320  // free $p3
6321  return $r1;
6322}
6323private function parseArgumentRest($silence) {
6324  // start choice_1
6325  $p2 = $this->currPos;
6326  // start seq_1
6327  $p3 = $this->currPos;
6328  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "optional", $this->currPos, 8, false) === 0) {
6329    $r4 = "optional";
6330    $this->currPos += 8;
6331  } else {
6332    if (!$silence) {$this->fail(80);}
6333    $r4 = self::$FAILED;
6334    $r1 = self::$FAILED;
6335    goto seq_1;
6336  }
6337  $r5 = $this->discardi_($silence);
6338  if ($r5===self::$FAILED) {
6339    $this->currPos = $p3;
6340    $r1 = self::$FAILED;
6341    goto seq_1;
6342  }
6343  $r6 = $this->parseTypeWithExtendedAttributes($silence);
6344  // t <- $r6
6345  if ($r6===self::$FAILED) {
6346    $this->currPos = $p3;
6347    $r1 = self::$FAILED;
6348    goto seq_1;
6349  }
6350  $r7 = $this->parseArgumentName($silence);
6351  // name <- $r7
6352  if ($r7===self::$FAILED) {
6353    $this->currPos = $p3;
6354    $r1 = self::$FAILED;
6355    goto seq_1;
6356  }
6357  $r8 = $this->parseDefault($silence);
6358  // d <- $r8
6359  if ($r8===self::$FAILED) {
6360    $this->currPos = $p3;
6361    $r1 = self::$FAILED;
6362    goto seq_1;
6363  }
6364  $r1 = true;
6365  seq_1:
6366  if ($r1!==self::$FAILED) {
6367    $this->savedPos = $p2;
6368    $r1 = $this->a60($r6, $r7, $r8);
6369    goto choice_1;
6370  }
6371  // free $p3
6372  $p3 = $this->currPos;
6373  // start seq_2
6374  $p9 = $this->currPos;
6375  $r10 = $this->parseType($silence);
6376  // t <- $r10
6377  if ($r10===self::$FAILED) {
6378    $r1 = self::$FAILED;
6379    goto seq_2;
6380  }
6381  $r11 = $this->parseEllipsis($silence);
6382  // e <- $r11
6383  if ($r11===self::$FAILED) {
6384    $this->currPos = $p9;
6385    $r1 = self::$FAILED;
6386    goto seq_2;
6387  }
6388  $r12 = $this->parseArgumentName($silence);
6389  // name <- $r12
6390  if ($r12===self::$FAILED) {
6391    $this->currPos = $p9;
6392    $r1 = self::$FAILED;
6393    goto seq_2;
6394  }
6395  $r1 = true;
6396  seq_2:
6397  if ($r1!==self::$FAILED) {
6398    $this->savedPos = $p3;
6399    $r1 = $this->a61($r10, $r11, $r12);
6400  }
6401  // free $p9
6402  choice_1:
6403  return $r1;
6404}
6405private function parseopt_minus($silence) {
6406  // start choice_1
6407  $p2 = $this->currPos;
6408  if (($this->input[$this->currPos] ?? null) === "-") {
6409    $this->currPos++;
6410    $r1 = "-";
6411    $this->savedPos = $p2;
6412    $r1 = $this->a62();
6413    goto choice_1;
6414  } else {
6415    if (!$silence) {$this->fail(95);}
6416    $r1 = self::$FAILED;
6417  }
6418  $p3 = $this->currPos;
6419  $r1 = '';
6420  if ($r1!==self::$FAILED) {
6421    $this->savedPos = $p3;
6422    $r1 = $this->a63();
6423  }
6424  choice_1:
6425  return $r1;
6426}
6427private function parsedecimal_integer($silence) {
6428  $p2 = $this->currPos;
6429  $p4 = $this->currPos;
6430  // start seq_1
6431  $p5 = $this->currPos;
6432  $r6 = $this->input[$this->currPos] ?? '';
6433  if (preg_match("/^[1-9]/", $r6)) {
6434    $this->currPos++;
6435  } else {
6436    $r6 = self::$FAILED;
6437    if (!$silence) {$this->fail(102);}
6438    $r3 = self::$FAILED;
6439    goto seq_1;
6440  }
6441  for (;;) {
6442    $r8 = $this->input[$this->currPos] ?? '';
6443    if (preg_match("/^[0-9]/", $r8)) {
6444      $this->currPos++;
6445    } else {
6446      $r8 = self::$FAILED;
6447      if (!$silence) {$this->fail(90);}
6448      break;
6449    }
6450  }
6451  // free $r8
6452  $r7 = true;
6453  if ($r7===self::$FAILED) {
6454    $this->currPos = $p5;
6455    $r3 = self::$FAILED;
6456    goto seq_1;
6457  }
6458  // free $r7
6459  $r3 = true;
6460  seq_1:
6461  // s <- $r3
6462  if ($r3!==self::$FAILED) {
6463    $r3 = substr($this->input, $p4, $this->currPos - $p4);
6464  } else {
6465    $r3 = self::$FAILED;
6466  }
6467  // free $p5
6468  // free $p4
6469  $r1 = $r3;
6470  if ($r1!==self::$FAILED) {
6471    $this->savedPos = $p2;
6472    $r1 = $this->a64($r3);
6473  }
6474  return $r1;
6475}
6476private function parsehex_integer($silence) {
6477  $p2 = $this->currPos;
6478  // start seq_1
6479  $p3 = $this->currPos;
6480  // start choice_1
6481  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "0x", $this->currPos, 2, false) === 0) {
6482    $r4 = "0x";
6483    $this->currPos += 2;
6484    goto choice_1;
6485  } else {
6486    if (!$silence) {$this->fail(103);}
6487    $r4 = self::$FAILED;
6488  }
6489  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "0X", $this->currPos, 2, false) === 0) {
6490    $r4 = "0X";
6491    $this->currPos += 2;
6492  } else {
6493    if (!$silence) {$this->fail(104);}
6494    $r4 = self::$FAILED;
6495  }
6496  choice_1:
6497  if ($r4===self::$FAILED) {
6498    $r1 = self::$FAILED;
6499    goto seq_1;
6500  }
6501  $p6 = $this->currPos;
6502  $r5 = self::$FAILED;
6503  for (;;) {
6504    $r7 = $this->input[$this->currPos] ?? '';
6505    if (preg_match("/^[0-9A-Fa-f]/", $r7)) {
6506      $this->currPos++;
6507      $r5 = true;
6508    } else {
6509      $r7 = self::$FAILED;
6510      if (!$silence) {$this->fail(105);}
6511      break;
6512    }
6513  }
6514  // s <- $r5
6515  if ($r5!==self::$FAILED) {
6516    $r5 = substr($this->input, $p6, $this->currPos - $p6);
6517  } else {
6518    $r5 = self::$FAILED;
6519    $this->currPos = $p3;
6520    $r1 = self::$FAILED;
6521    goto seq_1;
6522  }
6523  // free $r7
6524  // free $p6
6525  $r1 = true;
6526  seq_1:
6527  if ($r1!==self::$FAILED) {
6528    $this->savedPos = $p2;
6529    $r1 = $this->a65($r5);
6530  }
6531  // free $p3
6532  return $r1;
6533}
6534private function parseoctal_integer($silence) {
6535  $p2 = $this->currPos;
6536  $p4 = $this->currPos;
6537  // start seq_1
6538  $p5 = $this->currPos;
6539  if (($this->input[$this->currPos] ?? null) === "0") {
6540    $this->currPos++;
6541    $r6 = "0";
6542  } else {
6543    if (!$silence) {$this->fail(106);}
6544    $r6 = self::$FAILED;
6545    $r3 = self::$FAILED;
6546    goto seq_1;
6547  }
6548  for (;;) {
6549    $r8 = $this->input[$this->currPos] ?? '';
6550    if (preg_match("/^[0-7]/", $r8)) {
6551      $this->currPos++;
6552    } else {
6553      $r8 = self::$FAILED;
6554      if (!$silence) {$this->fail(107);}
6555      break;
6556    }
6557  }
6558  // free $r8
6559  $r7 = true;
6560  if ($r7===self::$FAILED) {
6561    $this->currPos = $p5;
6562    $r3 = self::$FAILED;
6563    goto seq_1;
6564  }
6565  // free $r7
6566  $r3 = true;
6567  seq_1:
6568  // s <- $r3
6569  if ($r3!==self::$FAILED) {
6570    $r3 = substr($this->input, $p4, $this->currPos - $p4);
6571  } else {
6572    $r3 = self::$FAILED;
6573  }
6574  // free $p5
6575  // free $p4
6576  $r1 = $r3;
6577  if ($r1!==self::$FAILED) {
6578    $this->savedPos = $p2;
6579    $r1 = $this->a66($r3);
6580  }
6581  return $r1;
6582}
6583private function parseConst($silence) {
6584  $p2 = $this->currPos;
6585  // start seq_1
6586  $p3 = $this->currPos;
6587  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "const", $this->currPos, 5, false) === 0) {
6588    $r4 = "const";
6589    $this->currPos += 5;
6590  } else {
6591    if (!$silence) {$this->fail(35);}
6592    $r4 = self::$FAILED;
6593    $r1 = self::$FAILED;
6594    goto seq_1;
6595  }
6596  $r5 = $this->discardi_($silence);
6597  if ($r5===self::$FAILED) {
6598    $this->currPos = $p3;
6599    $r1 = self::$FAILED;
6600    goto seq_1;
6601  }
6602  $r6 = $this->parseConstType($silence);
6603  // t <- $r6
6604  if ($r6===self::$FAILED) {
6605    $this->currPos = $p3;
6606    $r1 = self::$FAILED;
6607    goto seq_1;
6608  }
6609  $r7 = $this->parseidentifier($silence);
6610  // name <- $r7
6611  if ($r7===self::$FAILED) {
6612    $this->currPos = $p3;
6613    $r1 = self::$FAILED;
6614    goto seq_1;
6615  }
6616  $r8 = $this->discard_($silence);
6617  if ($r8===self::$FAILED) {
6618    $this->currPos = $p3;
6619    $r1 = self::$FAILED;
6620    goto seq_1;
6621  }
6622  if (($this->input[$this->currPos] ?? null) === "=") {
6623    $this->currPos++;
6624    $r9 = "=";
6625  } else {
6626    if (!$silence) {$this->fail(27);}
6627    $r9 = self::$FAILED;
6628    $this->currPos = $p3;
6629    $r1 = self::$FAILED;
6630    goto seq_1;
6631  }
6632  $r10 = $this->discard_($silence);
6633  if ($r10===self::$FAILED) {
6634    $this->currPos = $p3;
6635    $r1 = self::$FAILED;
6636    goto seq_1;
6637  }
6638  $r11 = $this->parseConstValue($silence);
6639  // v <- $r11
6640  if ($r11===self::$FAILED) {
6641    $this->currPos = $p3;
6642    $r1 = self::$FAILED;
6643    goto seq_1;
6644  }
6645  if (($this->input[$this->currPos] ?? null) === ";") {
6646    $this->currPos++;
6647    $r12 = ";";
6648  } else {
6649    if (!$silence) {$this->fail(19);}
6650    $r12 = self::$FAILED;
6651    $this->currPos = $p3;
6652    $r1 = self::$FAILED;
6653    goto seq_1;
6654  }
6655  $r13 = $this->parsec_($silence);
6656  // c <- $r13
6657  if ($r13===self::$FAILED) {
6658    $this->currPos = $p3;
6659    $r1 = self::$FAILED;
6660    goto seq_1;
6661  }
6662  $r1 = true;
6663  seq_1:
6664  if ($r1!==self::$FAILED) {
6665    $this->savedPos = $p2;
6666    $r1 = $this->a67($r6, $r7, $r11, $r13);
6667  }
6668  // free $p3
6669  return $r1;
6670}
6671private function parseInterfaceMember($silence) {
6672  // start choice_1
6673  $r1 = $this->parsePartialInterfaceMember($silence);
6674  if ($r1!==self::$FAILED) {
6675    goto choice_1;
6676  }
6677  $r1 = $this->parseConstructor($silence);
6678  choice_1:
6679  return $r1;
6680}
6681private function parseMixinMember($silence) {
6682  // start choice_1
6683  $r1 = $this->parseConst($silence);
6684  if ($r1!==self::$FAILED) {
6685    goto choice_1;
6686  }
6687  $r1 = $this->parseRegularOperation($silence);
6688  if ($r1!==self::$FAILED) {
6689    goto choice_1;
6690  }
6691  $r1 = $this->parseStringifier($silence);
6692  if ($r1!==self::$FAILED) {
6693    goto choice_1;
6694  }
6695  $p2 = $this->currPos;
6696  // start seq_1
6697  $p3 = $this->currPos;
6698  $r4 = $this->parseOptionalReadOnly($silence);
6699  // ro <- $r4
6700  if ($r4===self::$FAILED) {
6701    $r1 = self::$FAILED;
6702    goto seq_1;
6703  }
6704  $r5 = $this->parseAttributeRest($silence);
6705  // a <- $r5
6706  if ($r5===self::$FAILED) {
6707    $this->currPos = $p3;
6708    $r1 = self::$FAILED;
6709    goto seq_1;
6710  }
6711  $r1 = true;
6712  seq_1:
6713  if ($r1!==self::$FAILED) {
6714    $this->savedPos = $p2;
6715    $r1 = $this->a68($r4, $r5);
6716  }
6717  // free $p3
6718  choice_1:
6719  return $r1;
6720}
6721private function parseOperationRest($silence) {
6722  $p2 = $this->currPos;
6723  // start seq_1
6724  $p3 = $this->currPos;
6725  $r4 = $this->parseOptionalOperationName($silence);
6726  // name <- $r4
6727  if ($r4===self::$FAILED) {
6728    $r1 = self::$FAILED;
6729    goto seq_1;
6730  }
6731  if (($this->input[$this->currPos] ?? null) === "(") {
6732    $this->currPos++;
6733    $r5 = "(";
6734  } else {
6735    if (!$silence) {$this->fail(25);}
6736    $r5 = self::$FAILED;
6737    $this->currPos = $p3;
6738    $r1 = self::$FAILED;
6739    goto seq_1;
6740  }
6741  $r6 = $this->discard_($silence);
6742  if ($r6===self::$FAILED) {
6743    $this->currPos = $p3;
6744    $r1 = self::$FAILED;
6745    goto seq_1;
6746  }
6747  $r7 = $this->parseArgumentList($silence);
6748  // args <- $r7
6749  if ($r7===self::$FAILED) {
6750    $this->currPos = $p3;
6751    $r1 = self::$FAILED;
6752    goto seq_1;
6753  }
6754  if (($this->input[$this->currPos] ?? null) === ")") {
6755    $this->currPos++;
6756    $r8 = ")";
6757  } else {
6758    if (!$silence) {$this->fail(26);}
6759    $r8 = self::$FAILED;
6760    $this->currPos = $p3;
6761    $r1 = self::$FAILED;
6762    goto seq_1;
6763  }
6764  $r9 = $this->discard_($silence);
6765  if ($r9===self::$FAILED) {
6766    $this->currPos = $p3;
6767    $r1 = self::$FAILED;
6768    goto seq_1;
6769  }
6770  if (($this->input[$this->currPos] ?? null) === ";") {
6771    $this->currPos++;
6772    $r10 = ";";
6773  } else {
6774    if (!$silence) {$this->fail(19);}
6775    $r10 = self::$FAILED;
6776    $this->currPos = $p3;
6777    $r1 = self::$FAILED;
6778    goto seq_1;
6779  }
6780  $r11 = $this->parsec_($silence);
6781  // c <- $r11
6782  if ($r11===self::$FAILED) {
6783    $this->currPos = $p3;
6784    $r1 = self::$FAILED;
6785    goto seq_1;
6786  }
6787  $r1 = true;
6788  seq_1:
6789  if ($r1!==self::$FAILED) {
6790    $this->savedPos = $p2;
6791    $r1 = $this->a69($r4, $r7, $r11);
6792  }
6793  // free $p3
6794  return $r1;
6795}
6796private function parseAttributeName($silence) {
6797  // start choice_1
6798  $r1 = $this->parseAttributeNameKeyword($silence);
6799  if ($r1!==self::$FAILED) {
6800    goto choice_1;
6801  }
6802  $p2 = $this->currPos;
6803  // start seq_1
6804  $p3 = $this->currPos;
6805  $r4 = $this->parseidentifier($silence);
6806  // id <- $r4
6807  if ($r4===self::$FAILED) {
6808    $r1 = self::$FAILED;
6809    goto seq_1;
6810  }
6811  $r5 = $this->discard_($silence);
6812  if ($r5===self::$FAILED) {
6813    $this->currPos = $p3;
6814    $r1 = self::$FAILED;
6815    goto seq_1;
6816  }
6817  $r1 = true;
6818  seq_1:
6819  if ($r1!==self::$FAILED) {
6820    $this->savedPos = $p2;
6821    $r1 = $this->a70($r4);
6822  }
6823  // free $p3
6824  choice_1:
6825  return $r1;
6826}
6827private function parsePartialInterfaceMembers($silence) {
6828  $r1 = [];
6829  for (;;) {
6830    $p3 = $this->currPos;
6831    // start seq_1
6832    $p4 = $this->currPos;
6833    $r5 = $this->parseleadingComments($silence);
6834    // c <- $r5
6835    if ($r5===self::$FAILED) {
6836      $r2 = self::$FAILED;
6837      goto seq_1;
6838    }
6839    $r6 = $this->parseExtendedAttributeList($silence);
6840    // e <- $r6
6841    if ($r6===self::$FAILED) {
6842      $this->currPos = $p4;
6843      $r2 = self::$FAILED;
6844      goto seq_1;
6845    }
6846    $r7 = $this->parsePartialInterfaceMember($silence);
6847    // m <- $r7
6848    if ($r7===self::$FAILED) {
6849      $this->currPos = $p4;
6850      $r2 = self::$FAILED;
6851      goto seq_1;
6852    }
6853    $r2 = true;
6854    seq_1:
6855    if ($r2!==self::$FAILED) {
6856      $this->savedPos = $p3;
6857      $r2 = $this->a21($r5, $r6, $r7);
6858      $r1[] = $r2;
6859    } else {
6860      break;
6861    }
6862    // free $p4
6863  }
6864  // free $r2
6865  return $r1;
6866}
6867private function parseDefaultValue($silence) {
6868  // start choice_1
6869  $r1 = $this->parseConstValue($silence);
6870  if ($r1!==self::$FAILED) {
6871    goto choice_1;
6872  }
6873  $p2 = $this->currPos;
6874  // start seq_1
6875  $p3 = $this->currPos;
6876  $r4 = $this->parsestring($silence);
6877  // s <- $r4
6878  if ($r4===self::$FAILED) {
6879    $r1 = self::$FAILED;
6880    goto seq_1;
6881  }
6882  $r5 = $this->discard_($silence);
6883  if ($r5===self::$FAILED) {
6884    $this->currPos = $p3;
6885    $r1 = self::$FAILED;
6886    goto seq_1;
6887  }
6888  $r1 = true;
6889  seq_1:
6890  if ($r1!==self::$FAILED) {
6891    $this->savedPos = $p2;
6892    $r1 = $this->a71($r4);
6893    goto choice_1;
6894  }
6895  // free $p3
6896  $p3 = $this->currPos;
6897  // start seq_2
6898  $p6 = $this->currPos;
6899  if (($this->input[$this->currPos] ?? null) === "[") {
6900    $this->currPos++;
6901    $r7 = "[";
6902  } else {
6903    if (!$silence) {$this->fail(8);}
6904    $r7 = self::$FAILED;
6905    $r1 = self::$FAILED;
6906    goto seq_2;
6907  }
6908  $r8 = $this->discard_($silence);
6909  if ($r8===self::$FAILED) {
6910    $this->currPos = $p6;
6911    $r1 = self::$FAILED;
6912    goto seq_2;
6913  }
6914  if (($this->input[$this->currPos] ?? null) === "]") {
6915    $this->currPos++;
6916    $r9 = "]";
6917  } else {
6918    if (!$silence) {$this->fail(9);}
6919    $r9 = self::$FAILED;
6920    $this->currPos = $p6;
6921    $r1 = self::$FAILED;
6922    goto seq_2;
6923  }
6924  $r10 = $this->discard_($silence);
6925  if ($r10===self::$FAILED) {
6926    $this->currPos = $p6;
6927    $r1 = self::$FAILED;
6928    goto seq_2;
6929  }
6930  $r1 = true;
6931  seq_2:
6932  if ($r1!==self::$FAILED) {
6933    $this->savedPos = $p3;
6934    $r1 = $this->a72();
6935    goto choice_1;
6936  }
6937  // free $p6
6938  $p6 = $this->currPos;
6939  // start seq_3
6940  $p11 = $this->currPos;
6941  if (($this->input[$this->currPos] ?? null) === "{") {
6942    $this->currPos++;
6943    $r12 = "{";
6944  } else {
6945    if (!$silence) {$this->fail(17);}
6946    $r12 = self::$FAILED;
6947    $r1 = self::$FAILED;
6948    goto seq_3;
6949  }
6950  $r13 = $this->discard_($silence);
6951  if ($r13===self::$FAILED) {
6952    $this->currPos = $p11;
6953    $r1 = self::$FAILED;
6954    goto seq_3;
6955  }
6956  if (($this->input[$this->currPos] ?? null) === "}") {
6957    $this->currPos++;
6958    $r14 = "}";
6959  } else {
6960    if (!$silence) {$this->fail(18);}
6961    $r14 = self::$FAILED;
6962    $this->currPos = $p11;
6963    $r1 = self::$FAILED;
6964    goto seq_3;
6965  }
6966  $r15 = $this->discard_($silence);
6967  if ($r15===self::$FAILED) {
6968    $this->currPos = $p11;
6969    $r1 = self::$FAILED;
6970    goto seq_3;
6971  }
6972  $r1 = true;
6973  seq_3:
6974  if ($r1!==self::$FAILED) {
6975    $this->savedPos = $p6;
6976    $r1 = $this->a73();
6977    goto choice_1;
6978  }
6979  // free $p11
6980  $p11 = $this->currPos;
6981  // start seq_4
6982  $p16 = $this->currPos;
6983  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "null", $this->currPos, 4, false) === 0) {
6984    $r17 = "null";
6985    $this->currPos += 4;
6986  } else {
6987    if (!$silence) {$this->fail(76);}
6988    $r17 = self::$FAILED;
6989    $r1 = self::$FAILED;
6990    goto seq_4;
6991  }
6992  $r18 = $this->discardi_($silence);
6993  if ($r18===self::$FAILED) {
6994    $this->currPos = $p16;
6995    $r1 = self::$FAILED;
6996    goto seq_4;
6997  }
6998  $r1 = true;
6999  seq_4:
7000  if ($r1!==self::$FAILED) {
7001    $this->savedPos = $p11;
7002    $r1 = $this->a74();
7003  }
7004  // free $p16
7005  choice_1:
7006  return $r1;
7007}
7008private function parseDistinguishableType($silence) {
7009  $p2 = $this->currPos;
7010  // start seq_1
7011  $p3 = $this->currPos;
7012  // start choice_1
7013  $p5 = $this->currPos;
7014  $r6 = $this->parsePrimitiveType($silence);
7015  // t <- $r6
7016  $r4 = $r6;
7017  if ($r4!==self::$FAILED) {
7018    $this->savedPos = $p5;
7019    $r4 = $this->a75($r6);
7020    goto choice_1;
7021  }
7022  $p7 = $this->currPos;
7023  $r8 = $this->parseStringType($silence);
7024  // t <- $r8
7025  $r4 = $r8;
7026  if ($r4!==self::$FAILED) {
7027    $this->savedPos = $p7;
7028    $r4 = $this->a75($r8);
7029    goto choice_1;
7030  }
7031  $p9 = $this->currPos;
7032  // start seq_2
7033  $p10 = $this->currPos;
7034  // start choice_2
7035  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "object", $this->currPos, 6, false) === 0) {
7036    $r11 = "object";
7037    $this->currPos += 6;
7038    goto choice_2;
7039  } else {
7040    if (!$silence) {$this->fail(77);}
7041    $r11 = self::$FAILED;
7042  }
7043  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "symbol", $this->currPos, 6, false) === 0) {
7044    $r11 = "symbol";
7045    $this->currPos += 6;
7046  } else {
7047    if (!$silence) {$this->fail(84);}
7048    $r11 = self::$FAILED;
7049  }
7050  choice_2:
7051  // t <- $r11
7052  if ($r11===self::$FAILED) {
7053    $r4 = self::$FAILED;
7054    goto seq_2;
7055  }
7056  $r12 = $this->discardi_($silence);
7057  if ($r12===self::$FAILED) {
7058    $this->currPos = $p10;
7059    $r4 = self::$FAILED;
7060    goto seq_2;
7061  }
7062  $r4 = true;
7063  seq_2:
7064  if ($r4!==self::$FAILED) {
7065    $this->savedPos = $p9;
7066    $r4 = $this->a75($r11);
7067    goto choice_1;
7068  }
7069  // free $p10
7070  $p10 = $this->currPos;
7071  $r13 = $this->parseBufferRelatedType($silence);
7072  // t <- $r13
7073  $r4 = $r13;
7074  if ($r4!==self::$FAILED) {
7075    $this->savedPos = $p10;
7076    $r4 = $this->a75($r13);
7077    goto choice_1;
7078  }
7079  $p14 = $this->currPos;
7080  // start seq_3
7081  $p15 = $this->currPos;
7082  // start choice_3
7083  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "sequence", $this->currPos, 8, false) === 0) {
7084    $r16 = "sequence";
7085    $this->currPos += 8;
7086    goto choice_3;
7087  } else {
7088    if (!$silence) {$this->fail(82);}
7089    $r16 = self::$FAILED;
7090  }
7091  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "FrozenArray", $this->currPos, 11, false) === 0) {
7092    $r16 = "FrozenArray";
7093    $this->currPos += 11;
7094    goto choice_3;
7095  } else {
7096    if (!$silence) {$this->fail(62);}
7097    $r16 = self::$FAILED;
7098  }
7099  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "ObservableArray", $this->currPos, 15, false) === 0) {
7100    $r16 = "ObservableArray";
7101    $this->currPos += 15;
7102  } else {
7103    if (!$silence) {$this->fail(65);}
7104    $r16 = self::$FAILED;
7105  }
7106  choice_3:
7107  // g <- $r16
7108  if ($r16===self::$FAILED) {
7109    $r4 = self::$FAILED;
7110    goto seq_3;
7111  }
7112  $r17 = $this->discardi_($silence);
7113  if ($r17===self::$FAILED) {
7114    $this->currPos = $p15;
7115    $r4 = self::$FAILED;
7116    goto seq_3;
7117  }
7118  if (($this->input[$this->currPos] ?? null) === "<") {
7119    $this->currPos++;
7120    $r18 = "<";
7121  } else {
7122    if (!$silence) {$this->fail(98);}
7123    $r18 = self::$FAILED;
7124    $this->currPos = $p15;
7125    $r4 = self::$FAILED;
7126    goto seq_3;
7127  }
7128  $r19 = $this->discard_($silence);
7129  if ($r19===self::$FAILED) {
7130    $this->currPos = $p15;
7131    $r4 = self::$FAILED;
7132    goto seq_3;
7133  }
7134  $r20 = $this->parseTypeWithExtendedAttributes($silence);
7135  // t <- $r20
7136  if ($r20===self::$FAILED) {
7137    $this->currPos = $p15;
7138    $r4 = self::$FAILED;
7139    goto seq_3;
7140  }
7141  if (($this->input[$this->currPos] ?? null) === ">") {
7142    $this->currPos++;
7143    $r21 = ">";
7144  } else {
7145    if (!$silence) {$this->fail(99);}
7146    $r21 = self::$FAILED;
7147    $this->currPos = $p15;
7148    $r4 = self::$FAILED;
7149    goto seq_3;
7150  }
7151  $r22 = $this->discard_($silence);
7152  if ($r22===self::$FAILED) {
7153    $this->currPos = $p15;
7154    $r4 = self::$FAILED;
7155    goto seq_3;
7156  }
7157  $r4 = true;
7158  seq_3:
7159  if ($r4!==self::$FAILED) {
7160    $this->savedPos = $p14;
7161    $r4 = $this->a76($r16, $r20);
7162    goto choice_1;
7163  }
7164  // free $p15
7165  $r4 = $this->parseRecordType($silence);
7166  if ($r4!==self::$FAILED) {
7167    goto choice_1;
7168  }
7169  $p15 = $this->currPos;
7170  // start seq_4
7171  $p23 = $this->currPos;
7172  $r24 = $this->parseidentifier($silence);
7173  // t <- $r24
7174  if ($r24===self::$FAILED) {
7175    $r4 = self::$FAILED;
7176    goto seq_4;
7177  }
7178  $r25 = $this->discard_($silence);
7179  if ($r25===self::$FAILED) {
7180    $this->currPos = $p23;
7181    $r4 = self::$FAILED;
7182    goto seq_4;
7183  }
7184  $r4 = true;
7185  seq_4:
7186  if ($r4!==self::$FAILED) {
7187    $this->savedPos = $p15;
7188    $r4 = $this->a77($r24);
7189  }
7190  // free $p23
7191  choice_1:
7192  // dt <- $r4
7193  if ($r4===self::$FAILED) {
7194    $r1 = self::$FAILED;
7195    goto seq_1;
7196  }
7197  $r26 = $this->parseNull($silence);
7198  // n <- $r26
7199  if ($r26===self::$FAILED) {
7200    $this->currPos = $p3;
7201    $r1 = self::$FAILED;
7202    goto seq_1;
7203  }
7204  $r1 = true;
7205  seq_1:
7206  if ($r1!==self::$FAILED) {
7207    $this->savedPos = $p2;
7208    $r1 = $this->a78($r4, $r26);
7209  }
7210  // free $p3
7211  return $r1;
7212}
7213private function parseAnyType($silence) {
7214  $p2 = $this->currPos;
7215  // start seq_1
7216  $p3 = $this->currPos;
7217  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "any", $this->currPos, 3, false) === 0) {
7218    $r4 = "any";
7219    $this->currPos += 3;
7220  } else {
7221    if (!$silence) {$this->fail(68);}
7222    $r4 = self::$FAILED;
7223    $r1 = self::$FAILED;
7224    goto seq_1;
7225  }
7226  $r5 = $this->discardi_($silence);
7227  if ($r5===self::$FAILED) {
7228    $this->currPos = $p3;
7229    $r1 = self::$FAILED;
7230    goto seq_1;
7231  }
7232  $r1 = true;
7233  seq_1:
7234  if ($r1!==self::$FAILED) {
7235    $this->savedPos = $p2;
7236    $r1 = $this->a79();
7237  }
7238  // free $p3
7239  return $r1;
7240}
7241private function parsePromiseType($silence) {
7242  $p2 = $this->currPos;
7243  // start seq_1
7244  $p3 = $this->currPos;
7245  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Promise", $this->currPos, 7, false) === 0) {
7246    $r4 = "Promise";
7247    $this->currPos += 7;
7248  } else {
7249    if (!$silence) {$this->fail(66);}
7250    $r4 = self::$FAILED;
7251    $r1 = self::$FAILED;
7252    goto seq_1;
7253  }
7254  $r5 = $this->discardi_($silence);
7255  if ($r5===self::$FAILED) {
7256    $this->currPos = $p3;
7257    $r1 = self::$FAILED;
7258    goto seq_1;
7259  }
7260  if (($this->input[$this->currPos] ?? null) === "<") {
7261    $this->currPos++;
7262    $r6 = "<";
7263  } else {
7264    if (!$silence) {$this->fail(98);}
7265    $r6 = self::$FAILED;
7266    $this->currPos = $p3;
7267    $r1 = self::$FAILED;
7268    goto seq_1;
7269  }
7270  $r7 = $this->discard_($silence);
7271  if ($r7===self::$FAILED) {
7272    $this->currPos = $p3;
7273    $r1 = self::$FAILED;
7274    goto seq_1;
7275  }
7276  $r8 = $this->parseType($silence);
7277  // t <- $r8
7278  if ($r8===self::$FAILED) {
7279    $this->currPos = $p3;
7280    $r1 = self::$FAILED;
7281    goto seq_1;
7282  }
7283  if (($this->input[$this->currPos] ?? null) === ">") {
7284    $this->currPos++;
7285    $r9 = ">";
7286  } else {
7287    if (!$silence) {$this->fail(99);}
7288    $r9 = self::$FAILED;
7289    $this->currPos = $p3;
7290    $r1 = self::$FAILED;
7291    goto seq_1;
7292  }
7293  $r10 = $this->discard_($silence);
7294  if ($r10===self::$FAILED) {
7295    $this->currPos = $p3;
7296    $r1 = self::$FAILED;
7297    goto seq_1;
7298  }
7299  $r1 = true;
7300  seq_1:
7301  if ($r1!==self::$FAILED) {
7302    $this->savedPos = $p2;
7303    $r1 = $this->a80($r8);
7304  }
7305  // free $p3
7306  return $r1;
7307}
7308private function parseUnionMemberType($silence) {
7309  // start choice_1
7310  $p2 = $this->currPos;
7311  // start seq_1
7312  $p3 = $this->currPos;
7313  $r4 = $this->parseExtendedAttributeList($silence);
7314  // e <- $r4
7315  if ($r4===self::$FAILED) {
7316    $r1 = self::$FAILED;
7317    goto seq_1;
7318  }
7319  $r5 = $this->parseDistinguishableType($silence);
7320  // t <- $r5
7321  if ($r5===self::$FAILED) {
7322    $this->currPos = $p3;
7323    $r1 = self::$FAILED;
7324    goto seq_1;
7325  }
7326  $r1 = true;
7327  seq_1:
7328  if ($r1!==self::$FAILED) {
7329    $this->savedPos = $p2;
7330    $r1 = $this->a25($r4, $r5);
7331    goto choice_1;
7332  }
7333  // free $p3
7334  $p3 = $this->currPos;
7335  // start seq_2
7336  $p6 = $this->currPos;
7337  $r7 = $this->parseUnionType($silence);
7338  // t <- $r7
7339  if ($r7===self::$FAILED) {
7340    $r1 = self::$FAILED;
7341    goto seq_2;
7342  }
7343  $r8 = $this->parseNull($silence);
7344  // n <- $r8
7345  if ($r8===self::$FAILED) {
7346    $this->currPos = $p6;
7347    $r1 = self::$FAILED;
7348    goto seq_2;
7349  }
7350  $r1 = true;
7351  seq_2:
7352  if ($r1!==self::$FAILED) {
7353    $this->savedPos = $p3;
7354    $r1 = $this->a81($r7, $r8);
7355  }
7356  // free $p6
7357  choice_1:
7358  return $r1;
7359}
7360private function parseArgumentName($silence) {
7361  // start choice_1
7362  $r1 = $this->parseArgumentNameKeyword($silence);
7363  if ($r1!==self::$FAILED) {
7364    goto choice_1;
7365  }
7366  $p2 = $this->currPos;
7367  // start seq_1
7368  $p3 = $this->currPos;
7369  $r4 = $this->parseidentifier($silence);
7370  // name <- $r4
7371  if ($r4===self::$FAILED) {
7372    $r1 = self::$FAILED;
7373    goto seq_1;
7374  }
7375  $r5 = $this->discard_($silence);
7376  if ($r5===self::$FAILED) {
7377    $this->currPos = $p3;
7378    $r1 = self::$FAILED;
7379    goto seq_1;
7380  }
7381  $r1 = true;
7382  seq_1:
7383  if ($r1!==self::$FAILED) {
7384    $this->savedPos = $p2;
7385    $r1 = $this->a82($r4);
7386  }
7387  // free $p3
7388  choice_1:
7389  return $r1;
7390}
7391private function parseEllipsis($silence) {
7392  // start seq_1
7393  $p2 = $this->currPos;
7394  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "...", $this->currPos, 3, false) === 0) {
7395    $r3 = "...";
7396    $this->currPos += 3;
7397  } else {
7398    if (!$silence) {$this->fail(97);}
7399    $r3 = self::$FAILED;
7400    $r1 = self::$FAILED;
7401    goto seq_1;
7402  }
7403  $r4 = $this->parse_($silence);
7404  if ($r4===self::$FAILED) {
7405    $this->currPos = $p2;
7406    $r1 = self::$FAILED;
7407    goto seq_1;
7408  }
7409  $r1 = [$r3,$r4];
7410  seq_1:
7411  if ($r1===self::$FAILED) {
7412    $r1 = null;
7413  }
7414  // free $p2
7415  return $r1;
7416}
7417private function parseConstType($silence) {
7418  // start choice_1
7419  $p2 = $this->currPos;
7420  $r3 = $this->parsePrimitiveType($silence);
7421  // t <- $r3
7422  $r1 = $r3;
7423  if ($r1!==self::$FAILED) {
7424    $this->savedPos = $p2;
7425    $r1 = $this->a83($r3);
7426    goto choice_1;
7427  }
7428  $p4 = $this->currPos;
7429  // start seq_1
7430  $p5 = $this->currPos;
7431  $r6 = $this->parseidentifier($silence);
7432  // t <- $r6
7433  if ($r6===self::$FAILED) {
7434    $r1 = self::$FAILED;
7435    goto seq_1;
7436  }
7437  $r7 = $this->discard_($silence);
7438  if ($r7===self::$FAILED) {
7439    $this->currPos = $p5;
7440    $r1 = self::$FAILED;
7441    goto seq_1;
7442  }
7443  $r1 = true;
7444  seq_1:
7445  if ($r1!==self::$FAILED) {
7446    $this->savedPos = $p4;
7447    $r1 = $this->a83($r6);
7448  }
7449  // free $p5
7450  choice_1:
7451  return $r1;
7452}
7453private function parseConstValue($silence) {
7454  // start choice_1
7455  $r1 = $this->parseBooleanLiteral($silence);
7456  if ($r1!==self::$FAILED) {
7457    goto choice_1;
7458  }
7459  $r1 = $this->parseFloatLiteral($silence);
7460  if ($r1!==self::$FAILED) {
7461    goto choice_1;
7462  }
7463  $r1 = $this->parseIntLiteral($silence);
7464  choice_1:
7465  return $r1;
7466}
7467private function parsePartialInterfaceMember($silence) {
7468  // start choice_1
7469  $r1 = $this->parseConst($silence);
7470  if ($r1!==self::$FAILED) {
7471    goto choice_1;
7472  }
7473  $r1 = $this->parseOperation($silence);
7474  if ($r1!==self::$FAILED) {
7475    goto choice_1;
7476  }
7477  $r1 = $this->parseStringifier($silence);
7478  if ($r1!==self::$FAILED) {
7479    goto choice_1;
7480  }
7481  $r1 = $this->parseStaticMember($silence);
7482  if ($r1!==self::$FAILED) {
7483    goto choice_1;
7484  }
7485  $r1 = $this->parseIterable($silence);
7486  if ($r1!==self::$FAILED) {
7487    goto choice_1;
7488  }
7489  $r1 = $this->parseAsyncIterable($silence);
7490  if ($r1!==self::$FAILED) {
7491    goto choice_1;
7492  }
7493  $r1 = $this->parseReadOnlyMember($silence);
7494  if ($r1!==self::$FAILED) {
7495    goto choice_1;
7496  }
7497  $r1 = $this->parseAttributeRest($silence);
7498  if ($r1!==self::$FAILED) {
7499    goto choice_1;
7500  }
7501  $r1 = $this->parseMaplikeRest($silence);
7502  if ($r1!==self::$FAILED) {
7503    goto choice_1;
7504  }
7505  $r1 = $this->parseSetlikeRest($silence);
7506  if ($r1!==self::$FAILED) {
7507    goto choice_1;
7508  }
7509  $r1 = $this->parseInheritAttribute($silence);
7510  choice_1:
7511  return $r1;
7512}
7513private function parseConstructor($silence) {
7514  $p2 = $this->currPos;
7515  // start seq_1
7516  $p3 = $this->currPos;
7517  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "constructor", $this->currPos, 11, false) === 0) {
7518    $r4 = "constructor";
7519    $this->currPos += 11;
7520  } else {
7521    if (!$silence) {$this->fail(36);}
7522    $r4 = self::$FAILED;
7523    $r1 = self::$FAILED;
7524    goto seq_1;
7525  }
7526  $r5 = $this->discardi_($silence);
7527  if ($r5===self::$FAILED) {
7528    $this->currPos = $p3;
7529    $r1 = self::$FAILED;
7530    goto seq_1;
7531  }
7532  if (($this->input[$this->currPos] ?? null) === "(") {
7533    $this->currPos++;
7534    $r6 = "(";
7535  } else {
7536    if (!$silence) {$this->fail(25);}
7537    $r6 = self::$FAILED;
7538    $this->currPos = $p3;
7539    $r1 = self::$FAILED;
7540    goto seq_1;
7541  }
7542  $r7 = $this->discard_($silence);
7543  if ($r7===self::$FAILED) {
7544    $this->currPos = $p3;
7545    $r1 = self::$FAILED;
7546    goto seq_1;
7547  }
7548  $r8 = $this->parseArgumentList($silence);
7549  // args <- $r8
7550  if ($r8===self::$FAILED) {
7551    $this->currPos = $p3;
7552    $r1 = self::$FAILED;
7553    goto seq_1;
7554  }
7555  if (($this->input[$this->currPos] ?? null) === ")") {
7556    $this->currPos++;
7557    $r9 = ")";
7558  } else {
7559    if (!$silence) {$this->fail(26);}
7560    $r9 = self::$FAILED;
7561    $this->currPos = $p3;
7562    $r1 = self::$FAILED;
7563    goto seq_1;
7564  }
7565  $r10 = $this->discard_($silence);
7566  if ($r10===self::$FAILED) {
7567    $this->currPos = $p3;
7568    $r1 = self::$FAILED;
7569    goto seq_1;
7570  }
7571  if (($this->input[$this->currPos] ?? null) === ";") {
7572    $this->currPos++;
7573    $r11 = ";";
7574  } else {
7575    if (!$silence) {$this->fail(19);}
7576    $r11 = self::$FAILED;
7577    $this->currPos = $p3;
7578    $r1 = self::$FAILED;
7579    goto seq_1;
7580  }
7581  $r12 = $this->parsec_($silence);
7582  // c <- $r12
7583  if ($r12===self::$FAILED) {
7584    $this->currPos = $p3;
7585    $r1 = self::$FAILED;
7586    goto seq_1;
7587  }
7588  $r1 = true;
7589  seq_1:
7590  if ($r1!==self::$FAILED) {
7591    $this->savedPos = $p2;
7592    $r1 = $this->a84($r8, $r12);
7593  }
7594  // free $p3
7595  return $r1;
7596}
7597private function parseStringifier($silence) {
7598  $p2 = $this->currPos;
7599  // start seq_1
7600  $p3 = $this->currPos;
7601  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "stringifier", $this->currPos, 11, false) === 0) {
7602    $r4 = "stringifier";
7603    $this->currPos += 11;
7604  } else {
7605    if (!$silence) {$this->fail(47);}
7606    $r4 = self::$FAILED;
7607    $r1 = self::$FAILED;
7608    goto seq_1;
7609  }
7610  $r5 = $this->discardi_($silence);
7611  if ($r5===self::$FAILED) {
7612    $this->currPos = $p3;
7613    $r1 = self::$FAILED;
7614    goto seq_1;
7615  }
7616  $r6 = $this->parseStringifierRest($silence);
7617  // rest <- $r6
7618  if ($r6===self::$FAILED) {
7619    $this->currPos = $p3;
7620    $r1 = self::$FAILED;
7621    goto seq_1;
7622  }
7623  $r1 = true;
7624  seq_1:
7625  if ($r1!==self::$FAILED) {
7626    $this->savedPos = $p2;
7627    $r1 = $this->a85($r6);
7628  }
7629  // free $p3
7630  return $r1;
7631}
7632private function parseOptionalReadOnly($silence) {
7633  $p2 = $this->currPos;
7634  // start seq_1
7635  $p3 = $this->currPos;
7636  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "readonly", $this->currPos, 8, false) === 0) {
7637    $r4 = "readonly";
7638    $this->currPos += 8;
7639  } else {
7640    if (!$silence) {$this->fail(42);}
7641    $r4 = self::$FAILED;
7642    $r1 = self::$FAILED;
7643    goto seq_1;
7644  }
7645  $r5 = $this->discardi_($silence);
7646  if ($r5===self::$FAILED) {
7647    $this->currPos = $p3;
7648    $r1 = self::$FAILED;
7649    goto seq_1;
7650  }
7651  $r1 = true;
7652  seq_1:
7653  if ($r1!==self::$FAILED) {
7654    $this->savedPos = $p2;
7655    $r1 = $this->a59();
7656  } else {
7657    $r1 = null;
7658  }
7659  // free $p3
7660  return $r1;
7661}
7662private function parseOptionalOperationName($silence) {
7663  $r1 = $this->parseOperationName($silence);
7664  if ($r1===self::$FAILED) {
7665    $r1 = null;
7666  }
7667  return $r1;
7668}
7669private function parseAttributeNameKeyword($silence) {
7670  $p2 = $this->currPos;
7671  // start seq_1
7672  $p3 = $this->currPos;
7673  $p5 = $this->currPos;
7674  // start choice_1
7675  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "async", $this->currPos, 5, false) === 0) {
7676    $r4 = "async";
7677    $this->currPos += 5;
7678    goto choice_1;
7679  } else {
7680    if (!$silence) {$this->fail(33);}
7681    $r4 = self::$FAILED;
7682  }
7683  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "required", $this->currPos, 8, false) === 0) {
7684    $r4 = "required";
7685    $this->currPos += 8;
7686  } else {
7687    if (!$silence) {$this->fail(43);}
7688    $r4 = self::$FAILED;
7689  }
7690  choice_1:
7691  // id <- $r4
7692  if ($r4!==self::$FAILED) {
7693    $r4 = substr($this->input, $p5, $this->currPos - $p5);
7694  } else {
7695    $r4 = self::$FAILED;
7696    $r1 = self::$FAILED;
7697    goto seq_1;
7698  }
7699  // free $p5
7700  $r6 = $this->discardi_($silence);
7701  if ($r6===self::$FAILED) {
7702    $this->currPos = $p3;
7703    $r1 = self::$FAILED;
7704    goto seq_1;
7705  }
7706  $r1 = true;
7707  seq_1:
7708  if ($r1!==self::$FAILED) {
7709    $this->savedPos = $p2;
7710    $r1 = $this->a70($r4);
7711  }
7712  // free $p3
7713  return $r1;
7714}
7715private function parsePrimitiveType($silence) {
7716  // start choice_1
7717  $r1 = $this->parseUnsignedIntegerType($silence);
7718  if ($r1!==self::$FAILED) {
7719    goto choice_1;
7720  }
7721  $r1 = $this->parseUnrestrictedFloatType($silence);
7722  if ($r1!==self::$FAILED) {
7723    goto choice_1;
7724  }
7725  $p2 = $this->currPos;
7726  // start seq_1
7727  $p3 = $this->currPos;
7728  $p5 = $this->currPos;
7729  // start choice_2
7730  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "undefined", $this->currPos, 9, false) === 0) {
7731    $r4 = "undefined";
7732    $this->currPos += 9;
7733    goto choice_2;
7734  } else {
7735    if (!$silence) {$this->fail(87);}
7736    $r4 = self::$FAILED;
7737  }
7738  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "boolean", $this->currPos, 7, false) === 0) {
7739    $r4 = "boolean";
7740    $this->currPos += 7;
7741    goto choice_2;
7742  } else {
7743    if (!$silence) {$this->fail(70);}
7744    $r4 = self::$FAILED;
7745  }
7746  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "byte", $this->currPos, 4, false) === 0) {
7747    $r4 = "byte";
7748    $this->currPos += 4;
7749    goto choice_2;
7750  } else {
7751    if (!$silence) {$this->fail(71);}
7752    $r4 = self::$FAILED;
7753  }
7754  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "octet", $this->currPos, 5, false) === 0) {
7755    $r4 = "octet";
7756    $this->currPos += 5;
7757    goto choice_2;
7758  } else {
7759    if (!$silence) {$this->fail(78);}
7760    $r4 = self::$FAILED;
7761  }
7762  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "bigint", $this->currPos, 6, false) === 0) {
7763    $r4 = "bigint";
7764    $this->currPos += 6;
7765  } else {
7766    if (!$silence) {$this->fail(69);}
7767    $r4 = self::$FAILED;
7768  }
7769  choice_2:
7770  // v <- $r4
7771  if ($r4!==self::$FAILED) {
7772    $r4 = substr($this->input, $p5, $this->currPos - $p5);
7773  } else {
7774    $r4 = self::$FAILED;
7775    $r1 = self::$FAILED;
7776    goto seq_1;
7777  }
7778  // free $p5
7779  $r6 = $this->discardi_($silence);
7780  if ($r6===self::$FAILED) {
7781    $this->currPos = $p3;
7782    $r1 = self::$FAILED;
7783    goto seq_1;
7784  }
7785  $r1 = true;
7786  seq_1:
7787  if ($r1!==self::$FAILED) {
7788    $this->savedPos = $p2;
7789    $r1 = $this->a86($r4);
7790  }
7791  // free $p3
7792  choice_1:
7793  return $r1;
7794}
7795private function parseStringType($silence) {
7796  $p2 = $this->currPos;
7797  // start seq_1
7798  $p3 = $this->currPos;
7799  $p5 = $this->currPos;
7800  // start choice_1
7801  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "ByteString", $this->currPos, 10, false) === 0) {
7802    $r4 = "ByteString";
7803    $this->currPos += 10;
7804    goto choice_1;
7805  } else {
7806    if (!$silence) {$this->fail(60);}
7807    $r4 = self::$FAILED;
7808  }
7809  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "DOMString", $this->currPos, 9, false) === 0) {
7810    $r4 = "DOMString";
7811    $this->currPos += 9;
7812    goto choice_1;
7813  } else {
7814    if (!$silence) {$this->fail(61);}
7815    $r4 = self::$FAILED;
7816  }
7817  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "USVString", $this->currPos, 9, false) === 0) {
7818    $r4 = "USVString";
7819    $this->currPos += 9;
7820  } else {
7821    if (!$silence) {$this->fail(67);}
7822    $r4 = self::$FAILED;
7823  }
7824  choice_1:
7825  // s <- $r4
7826  if ($r4!==self::$FAILED) {
7827    $r4 = substr($this->input, $p5, $this->currPos - $p5);
7828  } else {
7829    $r4 = self::$FAILED;
7830    $r1 = self::$FAILED;
7831    goto seq_1;
7832  }
7833  // free $p5
7834  $r6 = $this->discardi_($silence);
7835  if ($r6===self::$FAILED) {
7836    $this->currPos = $p3;
7837    $r1 = self::$FAILED;
7838    goto seq_1;
7839  }
7840  $r1 = true;
7841  seq_1:
7842  if ($r1!==self::$FAILED) {
7843    $this->savedPos = $p2;
7844    $r1 = $this->a40($r4);
7845  }
7846  // free $p3
7847  return $r1;
7848}
7849private function parseBufferRelatedType($silence) {
7850  $p2 = $this->currPos;
7851  // start seq_1
7852  $p3 = $this->currPos;
7853  $p5 = $this->currPos;
7854  // start choice_1
7855  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "ArrayBuffer", $this->currPos, 11, false) === 0) {
7856    $r4 = "ArrayBuffer";
7857    $this->currPos += 11;
7858    goto choice_1;
7859  } else {
7860    if (!$silence) {$this->fail(49);}
7861    $r4 = self::$FAILED;
7862  }
7863  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "DataView", $this->currPos, 8, false) === 0) {
7864    $r4 = "DataView";
7865    $this->currPos += 8;
7866    goto choice_1;
7867  } else {
7868    if (!$silence) {$this->fail(50);}
7869    $r4 = self::$FAILED;
7870  }
7871  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Int8Array", $this->currPos, 9, false) === 0) {
7872    $r4 = "Int8Array";
7873    $this->currPos += 9;
7874    goto choice_1;
7875  } else {
7876    if (!$silence) {$this->fail(51);}
7877    $r4 = self::$FAILED;
7878  }
7879  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Int16Array", $this->currPos, 10, false) === 0) {
7880    $r4 = "Int16Array";
7881    $this->currPos += 10;
7882    goto choice_1;
7883  } else {
7884    if (!$silence) {$this->fail(52);}
7885    $r4 = self::$FAILED;
7886  }
7887  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Int32Array", $this->currPos, 10, false) === 0) {
7888    $r4 = "Int32Array";
7889    $this->currPos += 10;
7890    goto choice_1;
7891  } else {
7892    if (!$silence) {$this->fail(53);}
7893    $r4 = self::$FAILED;
7894  }
7895  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Uint8Array", $this->currPos, 10, false) === 0) {
7896    $r4 = "Uint8Array";
7897    $this->currPos += 10;
7898    goto choice_1;
7899  } else {
7900    if (!$silence) {$this->fail(54);}
7901    $r4 = self::$FAILED;
7902  }
7903  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Uint16Array", $this->currPos, 11, false) === 0) {
7904    $r4 = "Uint16Array";
7905    $this->currPos += 11;
7906    goto choice_1;
7907  } else {
7908    if (!$silence) {$this->fail(55);}
7909    $r4 = self::$FAILED;
7910  }
7911  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Uint32Array", $this->currPos, 11, false) === 0) {
7912    $r4 = "Uint32Array";
7913    $this->currPos += 11;
7914    goto choice_1;
7915  } else {
7916    if (!$silence) {$this->fail(56);}
7917    $r4 = self::$FAILED;
7918  }
7919  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Uint8ClampedArray", $this->currPos, 17, false) === 0) {
7920    $r4 = "Uint8ClampedArray";
7921    $this->currPos += 17;
7922    goto choice_1;
7923  } else {
7924    if (!$silence) {$this->fail(57);}
7925    $r4 = self::$FAILED;
7926  }
7927  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Float32Array", $this->currPos, 12, false) === 0) {
7928    $r4 = "Float32Array";
7929    $this->currPos += 12;
7930    goto choice_1;
7931  } else {
7932    if (!$silence) {$this->fail(58);}
7933    $r4 = self::$FAILED;
7934  }
7935  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Float64Array", $this->currPos, 12, false) === 0) {
7936    $r4 = "Float64Array";
7937    $this->currPos += 12;
7938  } else {
7939    if (!$silence) {$this->fail(59);}
7940    $r4 = self::$FAILED;
7941  }
7942  choice_1:
7943  // s <- $r4
7944  if ($r4!==self::$FAILED) {
7945    $r4 = substr($this->input, $p5, $this->currPos - $p5);
7946  } else {
7947    $r4 = self::$FAILED;
7948    $r1 = self::$FAILED;
7949    goto seq_1;
7950  }
7951  // free $p5
7952  $r6 = $this->discardi_($silence);
7953  if ($r6===self::$FAILED) {
7954    $this->currPos = $p3;
7955    $r1 = self::$FAILED;
7956    goto seq_1;
7957  }
7958  $r1 = true;
7959  seq_1:
7960  if ($r1!==self::$FAILED) {
7961    $this->savedPos = $p2;
7962    $r1 = $this->a40($r4);
7963  }
7964  // free $p3
7965  return $r1;
7966}
7967private function parseRecordType($silence) {
7968  $p2 = $this->currPos;
7969  // start seq_1
7970  $p3 = $this->currPos;
7971  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "record", $this->currPos, 6, false) === 0) {
7972    $r4 = "record";
7973    $this->currPos += 6;
7974  } else {
7975    if (!$silence) {$this->fail(81);}
7976    $r4 = self::$FAILED;
7977    $r1 = self::$FAILED;
7978    goto seq_1;
7979  }
7980  $r5 = $this->discardi_($silence);
7981  if ($r5===self::$FAILED) {
7982    $this->currPos = $p3;
7983    $r1 = self::$FAILED;
7984    goto seq_1;
7985  }
7986  if (($this->input[$this->currPos] ?? null) === "<") {
7987    $this->currPos++;
7988    $r6 = "<";
7989  } else {
7990    if (!$silence) {$this->fail(98);}
7991    $r6 = self::$FAILED;
7992    $this->currPos = $p3;
7993    $r1 = self::$FAILED;
7994    goto seq_1;
7995  }
7996  $r7 = $this->discard_($silence);
7997  if ($r7===self::$FAILED) {
7998    $this->currPos = $p3;
7999    $r1 = self::$FAILED;
8000    goto seq_1;
8001  }
8002  $r8 = $this->parseStringType($silence);
8003  // t1 <- $r8
8004  if ($r8===self::$FAILED) {
8005    $this->currPos = $p3;
8006    $r1 = self::$FAILED;
8007    goto seq_1;
8008  }
8009  if (($this->input[$this->currPos] ?? null) === ",") {
8010    $this->currPos++;
8011    $r9 = ",";
8012  } else {
8013    if (!$silence) {$this->fail(13);}
8014    $r9 = self::$FAILED;
8015    $this->currPos = $p3;
8016    $r1 = self::$FAILED;
8017    goto seq_1;
8018  }
8019  $r10 = $this->discard_($silence);
8020  if ($r10===self::$FAILED) {
8021    $this->currPos = $p3;
8022    $r1 = self::$FAILED;
8023    goto seq_1;
8024  }
8025  $r11 = $this->parseTypeWithExtendedAttributes($silence);
8026  // t2 <- $r11
8027  if ($r11===self::$FAILED) {
8028    $this->currPos = $p3;
8029    $r1 = self::$FAILED;
8030    goto seq_1;
8031  }
8032  if (($this->input[$this->currPos] ?? null) === ">") {
8033    $this->currPos++;
8034    $r12 = ">";
8035  } else {
8036    if (!$silence) {$this->fail(99);}
8037    $r12 = self::$FAILED;
8038    $this->currPos = $p3;
8039    $r1 = self::$FAILED;
8040    goto seq_1;
8041  }
8042  $r13 = $this->discard_($silence);
8043  if ($r13===self::$FAILED) {
8044    $this->currPos = $p3;
8045    $r1 = self::$FAILED;
8046    goto seq_1;
8047  }
8048  $r1 = true;
8049  seq_1:
8050  if ($r1!==self::$FAILED) {
8051    $this->savedPos = $p2;
8052    $r1 = $this->a87($r8, $r11);
8053  }
8054  // free $p3
8055  return $r1;
8056}
8057private function parseArgumentNameKeyword($silence) {
8058  $p2 = $this->currPos;
8059  // start seq_1
8060  $p3 = $this->currPos;
8061  $p5 = $this->currPos;
8062  // start choice_1
8063  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "async", $this->currPos, 5, false) === 0) {
8064    $r4 = "async";
8065    $this->currPos += 5;
8066    goto choice_1;
8067  } else {
8068    if (!$silence) {$this->fail(33);}
8069    $r4 = self::$FAILED;
8070  }
8071  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "attribute", $this->currPos, 9, false) === 0) {
8072    $r4 = "attribute";
8073    $this->currPos += 9;
8074    goto choice_1;
8075  } else {
8076    if (!$silence) {$this->fail(34);}
8077    $r4 = self::$FAILED;
8078  }
8079  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "callback", $this->currPos, 8, false) === 0) {
8080    $r4 = "callback";
8081    $this->currPos += 8;
8082    goto choice_1;
8083  } else {
8084    if (!$silence) {$this->fail(14);}
8085    $r4 = self::$FAILED;
8086  }
8087  // start seq_2
8088  $p6 = $this->currPos;
8089  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "const", $this->currPos, 5, false) === 0) {
8090    $r7 = "const";
8091    $this->currPos += 5;
8092  } else {
8093    if (!$silence) {$this->fail(35);}
8094    $r7 = self::$FAILED;
8095    $r4 = self::$FAILED;
8096    goto seq_2;
8097  }
8098  $p8 = $this->currPos;
8099  $r9 = $this->input[$this->currPos] ?? '';
8100  if (preg_match("/^[\\-_0-9A-Za-z]/", $r9)) {
8101    $this->currPos++;
8102  } else {
8103    $r9 = self::$FAILED;
8104  }
8105  if ($r9 === self::$FAILED) {
8106    $r9 = false;
8107  } else {
8108    $r9 = self::$FAILED;
8109    $this->currPos = $p8;
8110    $this->currPos = $p6;
8111    $r4 = self::$FAILED;
8112    goto seq_2;
8113  }
8114  // free $p8
8115  $r4 = true;
8116  seq_2:
8117  if ($r4!==self::$FAILED) {
8118    goto choice_1;
8119  }
8120  // free $p6
8121  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "constructor", $this->currPos, 11, false) === 0) {
8122    $r4 = "constructor";
8123    $this->currPos += 11;
8124    goto choice_1;
8125  } else {
8126    if (!$silence) {$this->fail(36);}
8127    $r4 = self::$FAILED;
8128  }
8129  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "deleter", $this->currPos, 7, false) === 0) {
8130    $r4 = "deleter";
8131    $this->currPos += 7;
8132    goto choice_1;
8133  } else {
8134    if (!$silence) {$this->fail(37);}
8135    $r4 = self::$FAILED;
8136  }
8137  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "dictionary", $this->currPos, 10, false) === 0) {
8138    $r4 = "dictionary";
8139    $this->currPos += 10;
8140    goto choice_1;
8141  } else {
8142    if (!$silence) {$this->fail(21);}
8143    $r4 = self::$FAILED;
8144  }
8145  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "enum", $this->currPos, 4, false) === 0) {
8146    $r4 = "enum";
8147    $this->currPos += 4;
8148    goto choice_1;
8149  } else {
8150    if (!$silence) {$this->fail(22);}
8151    $r4 = self::$FAILED;
8152  }
8153  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "getter", $this->currPos, 6, false) === 0) {
8154    $r4 = "getter";
8155    $this->currPos += 6;
8156    goto choice_1;
8157  } else {
8158    if (!$silence) {$this->fail(38);}
8159    $r4 = self::$FAILED;
8160  }
8161  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "includes", $this->currPos, 8, false) === 0) {
8162    $r4 = "includes";
8163    $this->currPos += 8;
8164    goto choice_1;
8165  } else {
8166    if (!$silence) {$this->fail(24);}
8167    $r4 = self::$FAILED;
8168  }
8169  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "inherit", $this->currPos, 7, false) === 0) {
8170    $r4 = "inherit";
8171    $this->currPos += 7;
8172    goto choice_1;
8173  } else {
8174    if (!$silence) {$this->fail(39);}
8175    $r4 = self::$FAILED;
8176  }
8177  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "interface", $this->currPos, 9, false) === 0) {
8178    $r4 = "interface";
8179    $this->currPos += 9;
8180    goto choice_1;
8181  } else {
8182    if (!$silence) {$this->fail(15);}
8183    $r4 = self::$FAILED;
8184  }
8185  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "iterable", $this->currPos, 8, false) === 0) {
8186    $r4 = "iterable";
8187    $this->currPos += 8;
8188    goto choice_1;
8189  } else {
8190    if (!$silence) {$this->fail(40);}
8191    $r4 = self::$FAILED;
8192  }
8193  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "maplike", $this->currPos, 7, false) === 0) {
8194    $r4 = "maplike";
8195    $this->currPos += 7;
8196    goto choice_1;
8197  } else {
8198    if (!$silence) {$this->fail(41);}
8199    $r4 = self::$FAILED;
8200  }
8201  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "mixin", $this->currPos, 5, false) === 0) {
8202    $r4 = "mixin";
8203    $this->currPos += 5;
8204    goto choice_1;
8205  } else {
8206    if (!$silence) {$this->fail(32);}
8207    $r4 = self::$FAILED;
8208  }
8209  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "namespace", $this->currPos, 9, false) === 0) {
8210    $r4 = "namespace";
8211    $this->currPos += 9;
8212    goto choice_1;
8213  } else {
8214    if (!$silence) {$this->fail(16);}
8215    $r4 = self::$FAILED;
8216  }
8217  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "partial", $this->currPos, 7, false) === 0) {
8218    $r4 = "partial";
8219    $this->currPos += 7;
8220    goto choice_1;
8221  } else {
8222    if (!$silence) {$this->fail(20);}
8223    $r4 = self::$FAILED;
8224  }
8225  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "readonly", $this->currPos, 8, false) === 0) {
8226    $r4 = "readonly";
8227    $this->currPos += 8;
8228    goto choice_1;
8229  } else {
8230    if (!$silence) {$this->fail(42);}
8231    $r4 = self::$FAILED;
8232  }
8233  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "required", $this->currPos, 8, false) === 0) {
8234    $r4 = "required";
8235    $this->currPos += 8;
8236    goto choice_1;
8237  } else {
8238    if (!$silence) {$this->fail(43);}
8239    $r4 = self::$FAILED;
8240  }
8241  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "setlike", $this->currPos, 7, false) === 0) {
8242    $r4 = "setlike";
8243    $this->currPos += 7;
8244    goto choice_1;
8245  } else {
8246    if (!$silence) {$this->fail(44);}
8247    $r4 = self::$FAILED;
8248  }
8249  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "setter", $this->currPos, 6, false) === 0) {
8250    $r4 = "setter";
8251    $this->currPos += 6;
8252    goto choice_1;
8253  } else {
8254    if (!$silence) {$this->fail(45);}
8255    $r4 = self::$FAILED;
8256  }
8257  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "static", $this->currPos, 6, false) === 0) {
8258    $r4 = "static";
8259    $this->currPos += 6;
8260    goto choice_1;
8261  } else {
8262    if (!$silence) {$this->fail(46);}
8263    $r4 = self::$FAILED;
8264  }
8265  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "stringifier", $this->currPos, 11, false) === 0) {
8266    $r4 = "stringifier";
8267    $this->currPos += 11;
8268    goto choice_1;
8269  } else {
8270    if (!$silence) {$this->fail(47);}
8271    $r4 = self::$FAILED;
8272  }
8273  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "typedef", $this->currPos, 7, false) === 0) {
8274    $r4 = "typedef";
8275    $this->currPos += 7;
8276    goto choice_1;
8277  } else {
8278    if (!$silence) {$this->fail(23);}
8279    $r4 = self::$FAILED;
8280  }
8281  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "unrestricted", $this->currPos, 12, false) === 0) {
8282    $r4 = "unrestricted";
8283    $this->currPos += 12;
8284  } else {
8285    if (!$silence) {$this->fail(48);}
8286    $r4 = self::$FAILED;
8287  }
8288  choice_1:
8289  // k <- $r4
8290  if ($r4!==self::$FAILED) {
8291    $r4 = substr($this->input, $p5, $this->currPos - $p5);
8292  } else {
8293    $r4 = self::$FAILED;
8294    $r1 = self::$FAILED;
8295    goto seq_1;
8296  }
8297  // free $p5
8298  $r10 = $this->discardi_($silence);
8299  if ($r10===self::$FAILED) {
8300    $this->currPos = $p3;
8301    $r1 = self::$FAILED;
8302    goto seq_1;
8303  }
8304  $r1 = true;
8305  seq_1:
8306  if ($r1!==self::$FAILED) {
8307    $this->savedPos = $p2;
8308    $r1 = $this->a39($r4);
8309  }
8310  // free $p3
8311  return $r1;
8312}
8313private function parseBooleanLiteral($silence) {
8314  $p2 = $this->currPos;
8315  // start seq_1
8316  $p3 = $this->currPos;
8317  $p5 = $this->currPos;
8318  // start choice_1
8319  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "true", $this->currPos, 4, false) === 0) {
8320    $r4 = "true";
8321    $this->currPos += 4;
8322    goto choice_1;
8323  } else {
8324    if (!$silence) {$this->fail(85);}
8325    $r4 = self::$FAILED;
8326  }
8327  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "false", $this->currPos, 5, false) === 0) {
8328    $r4 = "false";
8329    $this->currPos += 5;
8330  } else {
8331    if (!$silence) {$this->fail(73);}
8332    $r4 = self::$FAILED;
8333  }
8334  choice_1:
8335  // v <- $r4
8336  if ($r4!==self::$FAILED) {
8337    $r4 = substr($this->input, $p5, $this->currPos - $p5);
8338  } else {
8339    $r4 = self::$FAILED;
8340    $r1 = self::$FAILED;
8341    goto seq_1;
8342  }
8343  // free $p5
8344  $r6 = $this->discardi_($silence);
8345  if ($r6===self::$FAILED) {
8346    $this->currPos = $p3;
8347    $r1 = self::$FAILED;
8348    goto seq_1;
8349  }
8350  $r1 = true;
8351  seq_1:
8352  if ($r1!==self::$FAILED) {
8353    $this->savedPos = $p2;
8354    $r1 = $this->a88($r4);
8355  }
8356  // free $p3
8357  return $r1;
8358}
8359private function parseFloatLiteral($silence) {
8360  // start choice_1
8361  $p2 = $this->currPos;
8362  // start seq_1
8363  $p3 = $this->currPos;
8364  $p5 = $this->currPos;
8365  $r4 = $this->discarddecimal($silence);
8366  // s <- $r4
8367  if ($r4!==self::$FAILED) {
8368    $r4 = substr($this->input, $p5, $this->currPos - $p5);
8369  } else {
8370    $r4 = self::$FAILED;
8371    $r1 = self::$FAILED;
8372    goto seq_1;
8373  }
8374  // free $p5
8375  $r6 = $this->discard_($silence);
8376  if ($r6===self::$FAILED) {
8377    $this->currPos = $p3;
8378    $r1 = self::$FAILED;
8379    goto seq_1;
8380  }
8381  $r1 = true;
8382  seq_1:
8383  if ($r1!==self::$FAILED) {
8384    $this->savedPos = $p2;
8385    $r1 = $this->a89($r4);
8386    goto choice_1;
8387  }
8388  // free $p3
8389  $p3 = $this->currPos;
8390  // start seq_2
8391  $p5 = $this->currPos;
8392  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "-Infinity", $this->currPos, 9, false) === 0) {
8393    $r7 = "-Infinity";
8394    $this->currPos += 9;
8395  } else {
8396    if (!$silence) {$this->fail(96);}
8397    $r7 = self::$FAILED;
8398    $r1 = self::$FAILED;
8399    goto seq_2;
8400  }
8401  $r8 = $this->discardi_($silence);
8402  if ($r8===self::$FAILED) {
8403    $this->currPos = $p5;
8404    $r1 = self::$FAILED;
8405    goto seq_2;
8406  }
8407  $r1 = true;
8408  seq_2:
8409  if ($r1!==self::$FAILED) {
8410    $this->savedPos = $p3;
8411    $r1 = $this->a90();
8412    goto choice_1;
8413  }
8414  // free $p5
8415  $p5 = $this->currPos;
8416  // start seq_3
8417  $p9 = $this->currPos;
8418  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "Infinity", $this->currPos, 8, false) === 0) {
8419    $r10 = "Infinity";
8420    $this->currPos += 8;
8421  } else {
8422    if (!$silence) {$this->fail(63);}
8423    $r10 = self::$FAILED;
8424    $r1 = self::$FAILED;
8425    goto seq_3;
8426  }
8427  $r11 = $this->discardi_($silence);
8428  if ($r11===self::$FAILED) {
8429    $this->currPos = $p9;
8430    $r1 = self::$FAILED;
8431    goto seq_3;
8432  }
8433  $r1 = true;
8434  seq_3:
8435  if ($r1!==self::$FAILED) {
8436    $this->savedPos = $p5;
8437    $r1 = $this->a91();
8438    goto choice_1;
8439  }
8440  // free $p9
8441  $p9 = $this->currPos;
8442  // start seq_4
8443  $p12 = $this->currPos;
8444  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "NaN", $this->currPos, 3, false) === 0) {
8445    $r13 = "NaN";
8446    $this->currPos += 3;
8447  } else {
8448    if (!$silence) {$this->fail(64);}
8449    $r13 = self::$FAILED;
8450    $r1 = self::$FAILED;
8451    goto seq_4;
8452  }
8453  $r14 = $this->discardi_($silence);
8454  if ($r14===self::$FAILED) {
8455    $this->currPos = $p12;
8456    $r1 = self::$FAILED;
8457    goto seq_4;
8458  }
8459  $r1 = true;
8460  seq_4:
8461  if ($r1!==self::$FAILED) {
8462    $this->savedPos = $p9;
8463    $r1 = $this->a92();
8464  }
8465  // free $p12
8466  choice_1:
8467  return $r1;
8468}
8469private function parseIntLiteral($silence) {
8470  $p2 = $this->currPos;
8471  // start seq_1
8472  $p3 = $this->currPos;
8473  $p5 = $this->currPos;
8474  $r6 = $this->parseinteger($silence);
8475  // i <- $r6
8476  $r4 = $r6;
8477  // s <- $r4
8478  if ($r4!==self::$FAILED) {
8479    $r4 = substr($this->input, $p5, $this->currPos - $p5);
8480  } else {
8481    $r4 = self::$FAILED;
8482    $r1 = self::$FAILED;
8483    goto seq_1;
8484  }
8485  // free $p5
8486  $r7 = $this->discard_($silence);
8487  if ($r7===self::$FAILED) {
8488    $this->currPos = $p3;
8489    $r1 = self::$FAILED;
8490    goto seq_1;
8491  }
8492  $r1 = true;
8493  seq_1:
8494  if ($r1!==self::$FAILED) {
8495    $this->savedPos = $p2;
8496    $r1 = $this->a89($r4);
8497  }
8498  // free $p3
8499  return $r1;
8500}
8501private function parseOperation($silence) {
8502  // start choice_1
8503  $r1 = $this->parseRegularOperation($silence);
8504  if ($r1!==self::$FAILED) {
8505    goto choice_1;
8506  }
8507  $r1 = $this->parseSpecialOperation($silence);
8508  choice_1:
8509  return $r1;
8510}
8511private function parseStaticMember($silence) {
8512  $p2 = $this->currPos;
8513  // start seq_1
8514  $p3 = $this->currPos;
8515  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "static", $this->currPos, 6, false) === 0) {
8516    $r4 = "static";
8517    $this->currPos += 6;
8518  } else {
8519    if (!$silence) {$this->fail(46);}
8520    $r4 = self::$FAILED;
8521    $r1 = self::$FAILED;
8522    goto seq_1;
8523  }
8524  $r5 = $this->discardi_($silence);
8525  if ($r5===self::$FAILED) {
8526    $this->currPos = $p3;
8527    $r1 = self::$FAILED;
8528    goto seq_1;
8529  }
8530  $r6 = $this->parseStaticMemberRest($silence);
8531  // rest <- $r6
8532  if ($r6===self::$FAILED) {
8533    $this->currPos = $p3;
8534    $r1 = self::$FAILED;
8535    goto seq_1;
8536  }
8537  $r1 = true;
8538  seq_1:
8539  if ($r1!==self::$FAILED) {
8540    $this->savedPos = $p2;
8541    $r1 = $this->a93($r6);
8542  }
8543  // free $p3
8544  return $r1;
8545}
8546private function parseIterable($silence) {
8547  $p2 = $this->currPos;
8548  // start seq_1
8549  $p3 = $this->currPos;
8550  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "iterable", $this->currPos, 8, false) === 0) {
8551    $r4 = "iterable";
8552    $this->currPos += 8;
8553  } else {
8554    if (!$silence) {$this->fail(40);}
8555    $r4 = self::$FAILED;
8556    $r1 = self::$FAILED;
8557    goto seq_1;
8558  }
8559  $r5 = $this->discardi_($silence);
8560  if ($r5===self::$FAILED) {
8561    $this->currPos = $p3;
8562    $r1 = self::$FAILED;
8563    goto seq_1;
8564  }
8565  if (($this->input[$this->currPos] ?? null) === "<") {
8566    $this->currPos++;
8567    $r6 = "<";
8568  } else {
8569    if (!$silence) {$this->fail(98);}
8570    $r6 = self::$FAILED;
8571    $this->currPos = $p3;
8572    $r1 = self::$FAILED;
8573    goto seq_1;
8574  }
8575  $r7 = $this->discard_($silence);
8576  if ($r7===self::$FAILED) {
8577    $this->currPos = $p3;
8578    $r1 = self::$FAILED;
8579    goto seq_1;
8580  }
8581  $r8 = $this->parseTypeWithExtendedAttributes($silence);
8582  // t1 <- $r8
8583  if ($r8===self::$FAILED) {
8584    $this->currPos = $p3;
8585    $r1 = self::$FAILED;
8586    goto seq_1;
8587  }
8588  $r9 = $this->parseOptionalType($silence);
8589  // t2 <- $r9
8590  if ($r9===self::$FAILED) {
8591    $this->currPos = $p3;
8592    $r1 = self::$FAILED;
8593    goto seq_1;
8594  }
8595  if (($this->input[$this->currPos] ?? null) === ">") {
8596    $this->currPos++;
8597    $r10 = ">";
8598  } else {
8599    if (!$silence) {$this->fail(99);}
8600    $r10 = self::$FAILED;
8601    $this->currPos = $p3;
8602    $r1 = self::$FAILED;
8603    goto seq_1;
8604  }
8605  $r11 = $this->discard_($silence);
8606  if ($r11===self::$FAILED) {
8607    $this->currPos = $p3;
8608    $r1 = self::$FAILED;
8609    goto seq_1;
8610  }
8611  if (($this->input[$this->currPos] ?? null) === ";") {
8612    $this->currPos++;
8613    $r12 = ";";
8614  } else {
8615    if (!$silence) {$this->fail(19);}
8616    $r12 = self::$FAILED;
8617    $this->currPos = $p3;
8618    $r1 = self::$FAILED;
8619    goto seq_1;
8620  }
8621  $r13 = $this->parsec_($silence);
8622  // c <- $r13
8623  if ($r13===self::$FAILED) {
8624    $this->currPos = $p3;
8625    $r1 = self::$FAILED;
8626    goto seq_1;
8627  }
8628  $r1 = true;
8629  seq_1:
8630  if ($r1!==self::$FAILED) {
8631    $this->savedPos = $p2;
8632    $r1 = $this->a94($r8, $r9, $r13);
8633  }
8634  // free $p3
8635  return $r1;
8636}
8637private function parseAsyncIterable($silence) {
8638  $p2 = $this->currPos;
8639  // start seq_1
8640  $p3 = $this->currPos;
8641  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "async", $this->currPos, 5, false) === 0) {
8642    $r4 = "async";
8643    $this->currPos += 5;
8644  } else {
8645    if (!$silence) {$this->fail(33);}
8646    $r4 = self::$FAILED;
8647    $r1 = self::$FAILED;
8648    goto seq_1;
8649  }
8650  $r5 = $this->discardi_($silence);
8651  if ($r5===self::$FAILED) {
8652    $this->currPos = $p3;
8653    $r1 = self::$FAILED;
8654    goto seq_1;
8655  }
8656  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "iterable", $this->currPos, 8, false) === 0) {
8657    $r6 = "iterable";
8658    $this->currPos += 8;
8659  } else {
8660    if (!$silence) {$this->fail(40);}
8661    $r6 = self::$FAILED;
8662    $this->currPos = $p3;
8663    $r1 = self::$FAILED;
8664    goto seq_1;
8665  }
8666  $r7 = $this->discardi_($silence);
8667  if ($r7===self::$FAILED) {
8668    $this->currPos = $p3;
8669    $r1 = self::$FAILED;
8670    goto seq_1;
8671  }
8672  if (($this->input[$this->currPos] ?? null) === "<") {
8673    $this->currPos++;
8674    $r8 = "<";
8675  } else {
8676    if (!$silence) {$this->fail(98);}
8677    $r8 = self::$FAILED;
8678    $this->currPos = $p3;
8679    $r1 = self::$FAILED;
8680    goto seq_1;
8681  }
8682  $r9 = $this->discard_($silence);
8683  if ($r9===self::$FAILED) {
8684    $this->currPos = $p3;
8685    $r1 = self::$FAILED;
8686    goto seq_1;
8687  }
8688  $r10 = $this->parseTypeWithExtendedAttributes($silence);
8689  // t1 <- $r10
8690  if ($r10===self::$FAILED) {
8691    $this->currPos = $p3;
8692    $r1 = self::$FAILED;
8693    goto seq_1;
8694  }
8695  $r11 = $this->parseOptionalType($silence);
8696  // t2 <- $r11
8697  if ($r11===self::$FAILED) {
8698    $this->currPos = $p3;
8699    $r1 = self::$FAILED;
8700    goto seq_1;
8701  }
8702  if (($this->input[$this->currPos] ?? null) === ">") {
8703    $this->currPos++;
8704    $r12 = ">";
8705  } else {
8706    if (!$silence) {$this->fail(99);}
8707    $r12 = self::$FAILED;
8708    $this->currPos = $p3;
8709    $r1 = self::$FAILED;
8710    goto seq_1;
8711  }
8712  $r13 = $this->discard_($silence);
8713  if ($r13===self::$FAILED) {
8714    $this->currPos = $p3;
8715    $r1 = self::$FAILED;
8716    goto seq_1;
8717  }
8718  $r14 = $this->parseOptionalArgumentList($silence);
8719  // args <- $r14
8720  if ($r14===self::$FAILED) {
8721    $this->currPos = $p3;
8722    $r1 = self::$FAILED;
8723    goto seq_1;
8724  }
8725  if (($this->input[$this->currPos] ?? null) === ";") {
8726    $this->currPos++;
8727    $r15 = ";";
8728  } else {
8729    if (!$silence) {$this->fail(19);}
8730    $r15 = self::$FAILED;
8731    $this->currPos = $p3;
8732    $r1 = self::$FAILED;
8733    goto seq_1;
8734  }
8735  $r16 = $this->parsec_($silence);
8736  // c <- $r16
8737  if ($r16===self::$FAILED) {
8738    $this->currPos = $p3;
8739    $r1 = self::$FAILED;
8740    goto seq_1;
8741  }
8742  $r1 = true;
8743  seq_1:
8744  if ($r1!==self::$FAILED) {
8745    $this->savedPos = $p2;
8746    $r1 = $this->a95($r10, $r11, $r14, $r16);
8747  }
8748  // free $p3
8749  return $r1;
8750}
8751private function parseReadOnlyMember($silence) {
8752  $p2 = $this->currPos;
8753  // start seq_1
8754  $p3 = $this->currPos;
8755  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "readonly", $this->currPos, 8, false) === 0) {
8756    $r4 = "readonly";
8757    $this->currPos += 8;
8758  } else {
8759    if (!$silence) {$this->fail(42);}
8760    $r4 = self::$FAILED;
8761    $r1 = self::$FAILED;
8762    goto seq_1;
8763  }
8764  $r5 = $this->discardi_($silence);
8765  if ($r5===self::$FAILED) {
8766    $this->currPos = $p3;
8767    $r1 = self::$FAILED;
8768    goto seq_1;
8769  }
8770  $r6 = $this->parseReadOnlyMemberRest($silence);
8771  // m <- $r6
8772  if ($r6===self::$FAILED) {
8773    $this->currPos = $p3;
8774    $r1 = self::$FAILED;
8775    goto seq_1;
8776  }
8777  $r1 = true;
8778  seq_1:
8779  if ($r1!==self::$FAILED) {
8780    $this->savedPos = $p2;
8781    $r1 = $this->a96($r6);
8782  }
8783  // free $p3
8784  return $r1;
8785}
8786private function parseMaplikeRest($silence) {
8787  $p2 = $this->currPos;
8788  // start seq_1
8789  $p3 = $this->currPos;
8790  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "maplike", $this->currPos, 7, false) === 0) {
8791    $r4 = "maplike";
8792    $this->currPos += 7;
8793  } else {
8794    if (!$silence) {$this->fail(41);}
8795    $r4 = self::$FAILED;
8796    $r1 = self::$FAILED;
8797    goto seq_1;
8798  }
8799  $r5 = $this->discardi_($silence);
8800  if ($r5===self::$FAILED) {
8801    $this->currPos = $p3;
8802    $r1 = self::$FAILED;
8803    goto seq_1;
8804  }
8805  if (($this->input[$this->currPos] ?? null) === "<") {
8806    $this->currPos++;
8807    $r6 = "<";
8808  } else {
8809    if (!$silence) {$this->fail(98);}
8810    $r6 = self::$FAILED;
8811    $this->currPos = $p3;
8812    $r1 = self::$FAILED;
8813    goto seq_1;
8814  }
8815  $r7 = $this->discard_($silence);
8816  if ($r7===self::$FAILED) {
8817    $this->currPos = $p3;
8818    $r1 = self::$FAILED;
8819    goto seq_1;
8820  }
8821  $r8 = $this->parseTypeWithExtendedAttributes($silence);
8822  // t1 <- $r8
8823  if ($r8===self::$FAILED) {
8824    $this->currPos = $p3;
8825    $r1 = self::$FAILED;
8826    goto seq_1;
8827  }
8828  if (($this->input[$this->currPos] ?? null) === ",") {
8829    $this->currPos++;
8830    $r9 = ",";
8831  } else {
8832    if (!$silence) {$this->fail(13);}
8833    $r9 = self::$FAILED;
8834    $this->currPos = $p3;
8835    $r1 = self::$FAILED;
8836    goto seq_1;
8837  }
8838  $r10 = $this->discard_($silence);
8839  if ($r10===self::$FAILED) {
8840    $this->currPos = $p3;
8841    $r1 = self::$FAILED;
8842    goto seq_1;
8843  }
8844  $r11 = $this->parseTypeWithExtendedAttributes($silence);
8845  // t2 <- $r11
8846  if ($r11===self::$FAILED) {
8847    $this->currPos = $p3;
8848    $r1 = self::$FAILED;
8849    goto seq_1;
8850  }
8851  if (($this->input[$this->currPos] ?? null) === ">") {
8852    $this->currPos++;
8853    $r12 = ">";
8854  } else {
8855    if (!$silence) {$this->fail(99);}
8856    $r12 = self::$FAILED;
8857    $this->currPos = $p3;
8858    $r1 = self::$FAILED;
8859    goto seq_1;
8860  }
8861  $r13 = $this->discard_($silence);
8862  if ($r13===self::$FAILED) {
8863    $this->currPos = $p3;
8864    $r1 = self::$FAILED;
8865    goto seq_1;
8866  }
8867  if (($this->input[$this->currPos] ?? null) === ";") {
8868    $this->currPos++;
8869    $r14 = ";";
8870  } else {
8871    if (!$silence) {$this->fail(19);}
8872    $r14 = self::$FAILED;
8873    $this->currPos = $p3;
8874    $r1 = self::$FAILED;
8875    goto seq_1;
8876  }
8877  $r15 = $this->parsec_($silence);
8878  // c <- $r15
8879  if ($r15===self::$FAILED) {
8880    $this->currPos = $p3;
8881    $r1 = self::$FAILED;
8882    goto seq_1;
8883  }
8884  $r1 = true;
8885  seq_1:
8886  if ($r1!==self::$FAILED) {
8887    $this->savedPos = $p2;
8888    $r1 = $this->a97($r8, $r11, $r15);
8889  }
8890  // free $p3
8891  return $r1;
8892}
8893private function parseSetlikeRest($silence) {
8894  $p2 = $this->currPos;
8895  // start seq_1
8896  $p3 = $this->currPos;
8897  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "setlike", $this->currPos, 7, false) === 0) {
8898    $r4 = "setlike";
8899    $this->currPos += 7;
8900  } else {
8901    if (!$silence) {$this->fail(44);}
8902    $r4 = self::$FAILED;
8903    $r1 = self::$FAILED;
8904    goto seq_1;
8905  }
8906  $r5 = $this->discardi_($silence);
8907  if ($r5===self::$FAILED) {
8908    $this->currPos = $p3;
8909    $r1 = self::$FAILED;
8910    goto seq_1;
8911  }
8912  if (($this->input[$this->currPos] ?? null) === "<") {
8913    $this->currPos++;
8914    $r6 = "<";
8915  } else {
8916    if (!$silence) {$this->fail(98);}
8917    $r6 = self::$FAILED;
8918    $this->currPos = $p3;
8919    $r1 = self::$FAILED;
8920    goto seq_1;
8921  }
8922  $r7 = $this->discard_($silence);
8923  if ($r7===self::$FAILED) {
8924    $this->currPos = $p3;
8925    $r1 = self::$FAILED;
8926    goto seq_1;
8927  }
8928  $r8 = $this->parseTypeWithExtendedAttributes($silence);
8929  // t <- $r8
8930  if ($r8===self::$FAILED) {
8931    $this->currPos = $p3;
8932    $r1 = self::$FAILED;
8933    goto seq_1;
8934  }
8935  if (($this->input[$this->currPos] ?? null) === ">") {
8936    $this->currPos++;
8937    $r9 = ">";
8938  } else {
8939    if (!$silence) {$this->fail(99);}
8940    $r9 = self::$FAILED;
8941    $this->currPos = $p3;
8942    $r1 = self::$FAILED;
8943    goto seq_1;
8944  }
8945  $r10 = $this->discard_($silence);
8946  if ($r10===self::$FAILED) {
8947    $this->currPos = $p3;
8948    $r1 = self::$FAILED;
8949    goto seq_1;
8950  }
8951  if (($this->input[$this->currPos] ?? null) === ";") {
8952    $this->currPos++;
8953    $r11 = ";";
8954  } else {
8955    if (!$silence) {$this->fail(19);}
8956    $r11 = self::$FAILED;
8957    $this->currPos = $p3;
8958    $r1 = self::$FAILED;
8959    goto seq_1;
8960  }
8961  $r12 = $this->parsec_($silence);
8962  // c <- $r12
8963  if ($r12===self::$FAILED) {
8964    $this->currPos = $p3;
8965    $r1 = self::$FAILED;
8966    goto seq_1;
8967  }
8968  $r1 = true;
8969  seq_1:
8970  if ($r1!==self::$FAILED) {
8971    $this->savedPos = $p2;
8972    $r1 = $this->a98($r8, $r12);
8973  }
8974  // free $p3
8975  return $r1;
8976}
8977private function parseInheritAttribute($silence) {
8978  $p2 = $this->currPos;
8979  // start seq_1
8980  $p3 = $this->currPos;
8981  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "inherit", $this->currPos, 7, false) === 0) {
8982    $r4 = "inherit";
8983    $this->currPos += 7;
8984  } else {
8985    if (!$silence) {$this->fail(39);}
8986    $r4 = self::$FAILED;
8987    $r1 = self::$FAILED;
8988    goto seq_1;
8989  }
8990  $r5 = $this->discardi_($silence);
8991  if ($r5===self::$FAILED) {
8992    $this->currPos = $p3;
8993    $r1 = self::$FAILED;
8994    goto seq_1;
8995  }
8996  $r6 = $this->parseAttributeRest($silence);
8997  // a <- $r6
8998  if ($r6===self::$FAILED) {
8999    $this->currPos = $p3;
9000    $r1 = self::$FAILED;
9001    goto seq_1;
9002  }
9003  $r1 = true;
9004  seq_1:
9005  if ($r1!==self::$FAILED) {
9006    $this->savedPos = $p2;
9007    $r1 = $this->a99($r6);
9008  }
9009  // free $p3
9010  return $r1;
9011}
9012private function parseStringifierRest($silence) {
9013  // start choice_1
9014  $p2 = $this->currPos;
9015  // start seq_1
9016  $p3 = $this->currPos;
9017  $r4 = $this->parseOptionalReadOnly($silence);
9018  // ro <- $r4
9019  if ($r4===self::$FAILED) {
9020    $r1 = self::$FAILED;
9021    goto seq_1;
9022  }
9023  $r5 = $this->parseAttributeRest($silence);
9024  // a <- $r5
9025  if ($r5===self::$FAILED) {
9026    $this->currPos = $p3;
9027    $r1 = self::$FAILED;
9028    goto seq_1;
9029  }
9030  $r1 = true;
9031  seq_1:
9032  if ($r1!==self::$FAILED) {
9033    $this->savedPos = $p2;
9034    $r1 = $this->a100($r4, $r5);
9035    goto choice_1;
9036  }
9037  // free $p3
9038  $r1 = $this->parseRegularOperation($silence);
9039  if ($r1!==self::$FAILED) {
9040    goto choice_1;
9041  }
9042  $p3 = $this->currPos;
9043  // start seq_2
9044  $p6 = $this->currPos;
9045  if (($this->input[$this->currPos] ?? null) === ";") {
9046    $this->currPos++;
9047    $r7 = ";";
9048  } else {
9049    if (!$silence) {$this->fail(19);}
9050    $r7 = self::$FAILED;
9051    $r1 = self::$FAILED;
9052    goto seq_2;
9053  }
9054  $r8 = $this->parsec_($silence);
9055  // c <- $r8
9056  if ($r8===self::$FAILED) {
9057    $this->currPos = $p6;
9058    $r1 = self::$FAILED;
9059    goto seq_2;
9060  }
9061  $r1 = true;
9062  seq_2:
9063  if ($r1!==self::$FAILED) {
9064    $this->savedPos = $p3;
9065    $r1 = $this->a101($r8);
9066  }
9067  // free $p6
9068  choice_1:
9069  return $r1;
9070}
9071private function parseOperationName($silence) {
9072  // start choice_1
9073  $r1 = $this->parseOperationNameKeyword($silence);
9074  if ($r1!==self::$FAILED) {
9075    goto choice_1;
9076  }
9077  $p2 = $this->currPos;
9078  // start seq_1
9079  $p3 = $this->currPos;
9080  $r4 = $this->parseidentifier($silence);
9081  // name <- $r4
9082  if ($r4===self::$FAILED) {
9083    $r1 = self::$FAILED;
9084    goto seq_1;
9085  }
9086  $r5 = $this->discard_($silence);
9087  if ($r5===self::$FAILED) {
9088    $this->currPos = $p3;
9089    $r1 = self::$FAILED;
9090    goto seq_1;
9091  }
9092  $r1 = true;
9093  seq_1:
9094  if ($r1!==self::$FAILED) {
9095    $this->savedPos = $p2;
9096    $r1 = $this->a82($r4);
9097  }
9098  // free $p3
9099  choice_1:
9100  return $r1;
9101}
9102private function parseUnsignedIntegerType($silence) {
9103  // start choice_1
9104  $p2 = $this->currPos;
9105  // start seq_1
9106  $p3 = $this->currPos;
9107  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "unsigned", $this->currPos, 8, false) === 0) {
9108    $r4 = "unsigned";
9109    $this->currPos += 8;
9110  } else {
9111    if (!$silence) {$this->fail(86);}
9112    $r4 = self::$FAILED;
9113    $r1 = self::$FAILED;
9114    goto seq_1;
9115  }
9116  $r5 = $this->discardi_($silence);
9117  if ($r5===self::$FAILED) {
9118    $this->currPos = $p3;
9119    $r1 = self::$FAILED;
9120    goto seq_1;
9121  }
9122  $r6 = $this->parseIntegerType($silence);
9123  // t <- $r6
9124  if ($r6===self::$FAILED) {
9125    $this->currPos = $p3;
9126    $r1 = self::$FAILED;
9127    goto seq_1;
9128  }
9129  $r1 = true;
9130  seq_1:
9131  if ($r1!==self::$FAILED) {
9132    $this->savedPos = $p2;
9133    $r1 = $this->a102($r6);
9134    goto choice_1;
9135  }
9136  // free $p3
9137  $r1 = $this->parseIntegerType($silence);
9138  choice_1:
9139  return $r1;
9140}
9141private function parseUnrestrictedFloatType($silence) {
9142  // start choice_1
9143  $p2 = $this->currPos;
9144  // start seq_1
9145  $p3 = $this->currPos;
9146  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "unrestricted", $this->currPos, 12, false) === 0) {
9147    $r4 = "unrestricted";
9148    $this->currPos += 12;
9149  } else {
9150    if (!$silence) {$this->fail(48);}
9151    $r4 = self::$FAILED;
9152    $r1 = self::$FAILED;
9153    goto seq_1;
9154  }
9155  $r5 = $this->discardi_($silence);
9156  if ($r5===self::$FAILED) {
9157    $this->currPos = $p3;
9158    $r1 = self::$FAILED;
9159    goto seq_1;
9160  }
9161  $r6 = $this->parseFloatType($silence);
9162  // t <- $r6
9163  if ($r6===self::$FAILED) {
9164    $this->currPos = $p3;
9165    $r1 = self::$FAILED;
9166    goto seq_1;
9167  }
9168  $r1 = true;
9169  seq_1:
9170  if ($r1!==self::$FAILED) {
9171    $this->savedPos = $p2;
9172    $r1 = $this->a103($r6);
9173    goto choice_1;
9174  }
9175  // free $p3
9176  $r1 = $this->parseFloatType($silence);
9177  choice_1:
9178  return $r1;
9179}
9180private function parseinteger($silence) {
9181  $p2 = $this->currPos;
9182  // start seq_1
9183  $p3 = $this->currPos;
9184  $r4 = $this->parseopt_minus($silence);
9185  // m <- $r4
9186  if ($r4===self::$FAILED) {
9187    $r1 = self::$FAILED;
9188    goto seq_1;
9189  }
9190  // start choice_1
9191  $r5 = $this->parsedecimal_integer($silence);
9192  if ($r5!==self::$FAILED) {
9193    goto choice_1;
9194  }
9195  $r5 = $this->parsehex_integer($silence);
9196  if ($r5!==self::$FAILED) {
9197    goto choice_1;
9198  }
9199  $r5 = $this->parseoctal_integer($silence);
9200  choice_1:
9201  // n <- $r5
9202  if ($r5===self::$FAILED) {
9203    $this->currPos = $p3;
9204    $r1 = self::$FAILED;
9205    goto seq_1;
9206  }
9207  $r1 = true;
9208  seq_1:
9209  if ($r1!==self::$FAILED) {
9210    $this->savedPos = $p2;
9211    $r1 = $this->a48($r4, $r5);
9212  }
9213  // free $p3
9214  return $r1;
9215}
9216private function parseSpecialOperation($silence) {
9217  $p2 = $this->currPos;
9218  // start seq_1
9219  $p3 = $this->currPos;
9220  $r4 = $this->parseSpecial($silence);
9221  // s <- $r4
9222  if ($r4===self::$FAILED) {
9223    $r1 = self::$FAILED;
9224    goto seq_1;
9225  }
9226  $r5 = $this->parseRegularOperation($silence);
9227  // o <- $r5
9228  if ($r5===self::$FAILED) {
9229    $this->currPos = $p3;
9230    $r1 = self::$FAILED;
9231    goto seq_1;
9232  }
9233  $r1 = true;
9234  seq_1:
9235  if ($r1!==self::$FAILED) {
9236    $this->savedPos = $p2;
9237    $r1 = $this->a104($r4, $r5);
9238  }
9239  // free $p3
9240  return $r1;
9241}
9242private function parseStaticMemberRest($silence) {
9243  // start choice_1
9244  $p2 = $this->currPos;
9245  // start seq_1
9246  $p3 = $this->currPos;
9247  $r4 = $this->parseOptionalReadOnly($silence);
9248  // ro <- $r4
9249  if ($r4===self::$FAILED) {
9250    $r1 = self::$FAILED;
9251    goto seq_1;
9252  }
9253  $r5 = $this->parseAttributeRest($silence);
9254  // a <- $r5
9255  if ($r5===self::$FAILED) {
9256    $this->currPos = $p3;
9257    $r1 = self::$FAILED;
9258    goto seq_1;
9259  }
9260  $r1 = true;
9261  seq_1:
9262  if ($r1!==self::$FAILED) {
9263    $this->savedPos = $p2;
9264    $r1 = $this->a100($r4, $r5);
9265    goto choice_1;
9266  }
9267  // free $p3
9268  $r1 = $this->parseRegularOperation($silence);
9269  choice_1:
9270  return $r1;
9271}
9272private function parseOptionalType($silence) {
9273  $p2 = $this->currPos;
9274  // start seq_1
9275  $p3 = $this->currPos;
9276  if (($this->input[$this->currPos] ?? null) === ",") {
9277    $this->currPos++;
9278    $r4 = ",";
9279  } else {
9280    if (!$silence) {$this->fail(13);}
9281    $r4 = self::$FAILED;
9282    $r1 = self::$FAILED;
9283    goto seq_1;
9284  }
9285  $r5 = $this->discard_($silence);
9286  if ($r5===self::$FAILED) {
9287    $this->currPos = $p3;
9288    $r1 = self::$FAILED;
9289    goto seq_1;
9290  }
9291  $r6 = $this->parseTypeWithExtendedAttributes($silence);
9292  // t <- $r6
9293  if ($r6===self::$FAILED) {
9294    $this->currPos = $p3;
9295    $r1 = self::$FAILED;
9296    goto seq_1;
9297  }
9298  $r1 = true;
9299  seq_1:
9300  if ($r1!==self::$FAILED) {
9301    $this->savedPos = $p2;
9302    $r1 = $this->a105($r6);
9303  } else {
9304    $r1 = null;
9305  }
9306  // free $p3
9307  return $r1;
9308}
9309private function parseOptionalArgumentList($silence) {
9310  $p2 = $this->currPos;
9311  // start seq_1
9312  $p3 = $this->currPos;
9313  if (($this->input[$this->currPos] ?? null) === "(") {
9314    $this->currPos++;
9315    $r4 = "(";
9316  } else {
9317    if (!$silence) {$this->fail(25);}
9318    $r4 = self::$FAILED;
9319    $r1 = self::$FAILED;
9320    goto seq_1;
9321  }
9322  $r5 = $this->discard_($silence);
9323  if ($r5===self::$FAILED) {
9324    $this->currPos = $p3;
9325    $r1 = self::$FAILED;
9326    goto seq_1;
9327  }
9328  $r6 = $this->parseArgumentList($silence);
9329  // args <- $r6
9330  if ($r6===self::$FAILED) {
9331    $this->currPos = $p3;
9332    $r1 = self::$FAILED;
9333    goto seq_1;
9334  }
9335  if (($this->input[$this->currPos] ?? null) === ")") {
9336    $this->currPos++;
9337    $r7 = ")";
9338  } else {
9339    if (!$silence) {$this->fail(26);}
9340    $r7 = self::$FAILED;
9341    $this->currPos = $p3;
9342    $r1 = self::$FAILED;
9343    goto seq_1;
9344  }
9345  $r8 = $this->discard_($silence);
9346  if ($r8===self::$FAILED) {
9347    $this->currPos = $p3;
9348    $r1 = self::$FAILED;
9349    goto seq_1;
9350  }
9351  $r1 = true;
9352  seq_1:
9353  if ($r1!==self::$FAILED) {
9354    $this->savedPos = $p2;
9355    $r1 = $this->a106($r6);
9356  } else {
9357    $r1 = null;
9358  }
9359  // free $p3
9360  return $r1;
9361}
9362private function parseReadOnlyMemberRest($silence) {
9363  // start choice_1
9364  $r1 = $this->parseAttributeRest($silence);
9365  if ($r1!==self::$FAILED) {
9366    goto choice_1;
9367  }
9368  $r1 = $this->parseMaplikeRest($silence);
9369  if ($r1!==self::$FAILED) {
9370    goto choice_1;
9371  }
9372  $r1 = $this->parseSetlikeRest($silence);
9373  choice_1:
9374  return $r1;
9375}
9376private function parseOperationNameKeyword($silence) {
9377  $p2 = $this->currPos;
9378  // start seq_1
9379  $p3 = $this->currPos;
9380  // s <- $r4
9381  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "includes", $this->currPos, 8, false) === 0) {
9382    $r4 = "includes";
9383    $this->currPos += 8;
9384  } else {
9385    if (!$silence) {$this->fail(24);}
9386    $r4 = self::$FAILED;
9387    $r1 = self::$FAILED;
9388    goto seq_1;
9389  }
9390  $r5 = $this->discardi_($silence);
9391  if ($r5===self::$FAILED) {
9392    $this->currPos = $p3;
9393    $r1 = self::$FAILED;
9394    goto seq_1;
9395  }
9396  $r1 = true;
9397  seq_1:
9398  if ($r1!==self::$FAILED) {
9399    $this->savedPos = $p2;
9400    $r1 = $this->a40($r4);
9401  }
9402  // free $p3
9403  return $r1;
9404}
9405private function parseIntegerType($silence) {
9406  // start choice_1
9407  $p2 = $this->currPos;
9408  // start seq_1
9409  $p3 = $this->currPos;
9410  $p5 = $this->currPos;
9411  // s <- $r4
9412  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "short", $this->currPos, 5, false) === 0) {
9413    $r4 = "short";
9414    $this->currPos += 5;
9415    $r4 = substr($this->input, $p5, $this->currPos - $p5);
9416  } else {
9417    if (!$silence) {$this->fail(83);}
9418    $r4 = self::$FAILED;
9419    $r4 = self::$FAILED;
9420    $r1 = self::$FAILED;
9421    goto seq_1;
9422  }
9423  // free $p5
9424  $r6 = $this->discardi_($silence);
9425  if ($r6===self::$FAILED) {
9426    $this->currPos = $p3;
9427    $r1 = self::$FAILED;
9428    goto seq_1;
9429  }
9430  $r1 = true;
9431  seq_1:
9432  if ($r1!==self::$FAILED) {
9433    $this->savedPos = $p2;
9434    $r1 = $this->a40($r4);
9435    goto choice_1;
9436  }
9437  // free $p3
9438  $p3 = $this->currPos;
9439  // start seq_2
9440  $p5 = $this->currPos;
9441  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "long", $this->currPos, 4, false) === 0) {
9442    $r7 = "long";
9443    $this->currPos += 4;
9444  } else {
9445    if (!$silence) {$this->fail(75);}
9446    $r7 = self::$FAILED;
9447    $r1 = self::$FAILED;
9448    goto seq_2;
9449  }
9450  $r8 = $this->discardi_($silence);
9451  if ($r8===self::$FAILED) {
9452    $this->currPos = $p5;
9453    $r1 = self::$FAILED;
9454    goto seq_2;
9455  }
9456  // start seq_3
9457  $p10 = $this->currPos;
9458  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "long", $this->currPos, 4, false) === 0) {
9459    $r11 = "long";
9460    $this->currPos += 4;
9461  } else {
9462    if (!$silence) {$this->fail(75);}
9463    $r11 = self::$FAILED;
9464    $r9 = self::$FAILED;
9465    goto seq_3;
9466  }
9467  $r12 = $this->parsei_($silence);
9468  if ($r12===self::$FAILED) {
9469    $this->currPos = $p10;
9470    $r9 = self::$FAILED;
9471    goto seq_3;
9472  }
9473  $r9 = [$r11,$r12];
9474  seq_3:
9475  if ($r9===self::$FAILED) {
9476    $r9 = null;
9477  }
9478  // free $p10
9479  // l <- $r9
9480  $r1 = true;
9481  seq_2:
9482  if ($r1!==self::$FAILED) {
9483    $this->savedPos = $p3;
9484    $r1 = $this->a107($r9);
9485  }
9486  // free $p5
9487  choice_1:
9488  return $r1;
9489}
9490private function parseFloatType($silence) {
9491  $p2 = $this->currPos;
9492  // start seq_1
9493  $p3 = $this->currPos;
9494  $p5 = $this->currPos;
9495  // start choice_1
9496  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "float", $this->currPos, 5, false) === 0) {
9497    $r4 = "float";
9498    $this->currPos += 5;
9499    goto choice_1;
9500  } else {
9501    if (!$silence) {$this->fail(74);}
9502    $r4 = self::$FAILED;
9503  }
9504  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "double", $this->currPos, 6, false) === 0) {
9505    $r4 = "double";
9506    $this->currPos += 6;
9507  } else {
9508    if (!$silence) {$this->fail(72);}
9509    $r4 = self::$FAILED;
9510  }
9511  choice_1:
9512  // v <- $r4
9513  if ($r4!==self::$FAILED) {
9514    $r4 = substr($this->input, $p5, $this->currPos - $p5);
9515  } else {
9516    $r4 = self::$FAILED;
9517    $r1 = self::$FAILED;
9518    goto seq_1;
9519  }
9520  // free $p5
9521  $r6 = $this->discardi_($silence);
9522  if ($r6===self::$FAILED) {
9523    $this->currPos = $p3;
9524    $r1 = self::$FAILED;
9525    goto seq_1;
9526  }
9527  $r1 = true;
9528  seq_1:
9529  if ($r1!==self::$FAILED) {
9530    $this->savedPos = $p2;
9531    $r1 = $this->a86($r4);
9532  }
9533  // free $p3
9534  return $r1;
9535}
9536private function parseSpecial($silence) {
9537  $p2 = $this->currPos;
9538  // start seq_1
9539  $p3 = $this->currPos;
9540  $p5 = $this->currPos;
9541  // start choice_1
9542  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "getter", $this->currPos, 6, false) === 0) {
9543    $r4 = "getter";
9544    $this->currPos += 6;
9545    goto choice_1;
9546  } else {
9547    if (!$silence) {$this->fail(38);}
9548    $r4 = self::$FAILED;
9549  }
9550  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "setter", $this->currPos, 6, false) === 0) {
9551    $r4 = "setter";
9552    $this->currPos += 6;
9553    goto choice_1;
9554  } else {
9555    if (!$silence) {$this->fail(45);}
9556    $r4 = self::$FAILED;
9557  }
9558  if ($this->currPos >= $this->inputLength ? false : substr_compare($this->input, "deleter", $this->currPos, 7, false) === 0) {
9559    $r4 = "deleter";
9560    $this->currPos += 7;
9561  } else {
9562    if (!$silence) {$this->fail(37);}
9563    $r4 = self::$FAILED;
9564  }
9565  choice_1:
9566  // s <- $r4
9567  if ($r4!==self::$FAILED) {
9568    $r4 = substr($this->input, $p5, $this->currPos - $p5);
9569  } else {
9570    $r4 = self::$FAILED;
9571    $r1 = self::$FAILED;
9572    goto seq_1;
9573  }
9574  // free $p5
9575  $r6 = $this->discardi_($silence);
9576  if ($r6===self::$FAILED) {
9577    $this->currPos = $p3;
9578    $r1 = self::$FAILED;
9579    goto seq_1;
9580  }
9581  $r1 = true;
9582  seq_1:
9583  if ($r1!==self::$FAILED) {
9584    $this->savedPos = $p2;
9585    $r1 = $this->a40($r4);
9586  }
9587  // free $p3
9588  return $r1;
9589}
9590private function parsei_($silence) {
9591  $p2 = $this->currPos;
9592  // start seq_1
9593  $p3 = $this->currPos;
9594  $p4 = $this->currPos;
9595  $r5 = $this->input[$this->currPos] ?? '';
9596  if (preg_match("/^[\\-_0-9A-Za-z]/", $r5)) {
9597    $this->currPos++;
9598  } else {
9599    $r5 = self::$FAILED;
9600  }
9601  if ($r5 === self::$FAILED) {
9602    $r5 = false;
9603  } else {
9604    $r5 = self::$FAILED;
9605    $this->currPos = $p4;
9606    $r1 = self::$FAILED;
9607    goto seq_1;
9608  }
9609  // free $p4
9610  $r6 = $this->parse_($silence);
9611  // c <- $r6
9612  if ($r6===self::$FAILED) {
9613    $this->currPos = $p3;
9614    $r1 = self::$FAILED;
9615    goto seq_1;
9616  }
9617  $r1 = true;
9618  seq_1:
9619  if ($r1!==self::$FAILED) {
9620    $this->savedPos = $p2;
9621    $r1 = $this->a7($r6);
9622  }
9623  // free $p3
9624  return $r1;
9625}
9626
9627    public function parse( $input, $options = [] ) {
9628        $this->initInternal( $input, $options );
9629        $startRule = $options['startRule'] ?? '(DEFAULT)';
9630        $result = null;
9631
9632        if ( !empty( $options['stream'] ) ) {
9633            switch ( $startRule ) {
9634                
9635            default:
9636                throw new \Wikimedia\WikiPEG\InternalError( "Can't stream rule $startRule." );
9637            }
9638        } else {
9639            switch ( $startRule ) {
9640                case '(DEFAULT)':
9641case "start":
9642  $result = $this->parsestart(false);
9643  break;
9644            default:
9645                throw new \Wikimedia\WikiPEG\InternalError( "Can't start parsing from rule $startRule." );
9646            }
9647        }
9648
9649        if ( $result !== self::$FAILED && $this->currPos === $this->inputLength ) {
9650            return $result;
9651        } else {
9652            if ( $result !== self::$FAILED && $this->currPos < $this->inputLength ) {
9653                $this->fail( 0 );
9654            }
9655            throw $this->buildParseException();
9656        }
9657    }
9658}
9659