line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Guacamole; |
2
|
|
|
|
|
|
|
our $AUTHORITY = 'cpan:XSAWYERX'; |
3
|
|
|
|
|
|
|
# ABSTRACT: A parser toolkit for Standard Perl |
4
|
|
|
|
|
|
|
$Guacamole::VERSION = '0.008'; |
5
|
38
|
|
|
38
|
|
234
|
use strict; |
|
38
|
|
|
|
|
63
|
|
|
38
|
|
|
|
|
1023
|
|
6
|
38
|
|
|
38
|
|
174
|
use warnings; |
|
38
|
|
|
|
|
63
|
|
|
38
|
|
|
|
|
1089
|
|
7
|
38
|
|
|
38
|
|
174
|
use feature qw< state >; |
|
38
|
|
|
|
|
64
|
|
|
38
|
|
|
|
|
4082
|
|
8
|
|
|
|
|
|
|
use constant { |
9
|
38
|
|
|
|
|
2197
|
'DEBUG' => 0, |
10
|
38
|
|
|
38
|
|
210
|
}; |
|
38
|
|
|
|
|
62
|
|
11
|
|
|
|
|
|
|
|
12
|
38
|
|
|
38
|
|
14335
|
use Marpa::R2; |
|
38
|
|
|
|
|
4478774
|
|
|
38
|
|
|
|
|
58004
|
|
13
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
our $grammar_source = q{ |
15
|
|
|
|
|
|
|
lexeme default = latm => 1 |
16
|
|
|
|
|
|
|
:default ::= action => [ name, start, length, values ] |
17
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
Program ::= StatementSeq |
19
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
StatementSeq ::= Statement |
21
|
|
|
|
|
|
|
| Statement Semicolon |
22
|
|
|
|
|
|
|
| Statement Semicolon StatementSeq |
23
|
|
|
|
|
|
|
| BlockStatement |
24
|
|
|
|
|
|
|
| BlockStatement StatementSeq |
25
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
# Statements that end with a block and do not need a semicolon terminator. |
27
|
|
|
|
|
|
|
BlockStatement ::= LoopStatement |
28
|
|
|
|
|
|
|
| PackageStatement |
29
|
|
|
|
|
|
|
| SubStatement |
30
|
|
|
|
|
|
|
| Condition |
31
|
|
|
|
|
|
|
| BlockNonEmpty |
32
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
Statement ::= BlockLevelExpression StatementModifier |
34
|
|
|
|
|
|
|
| BlockLevelExpression |
35
|
|
|
|
|
|
|
| EllipsisStatement |
36
|
|
|
|
|
|
|
| UseStatement |
37
|
|
|
|
|
|
|
| NoStatement |
38
|
|
|
|
|
|
|
| RequireStatement |
39
|
|
|
|
|
|
|
| PackageDeclaration |
40
|
|
|
|
|
|
|
| SubDeclaration |
41
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
LoopStatement ::= ForStatement |
43
|
|
|
|
|
|
|
| WhileStatement |
44
|
|
|
|
|
|
|
| UntilStatement |
45
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
ForStatement ::= ForStatementOp LParen Statement Semicolon Statement Semicolon Statement RParen Block ContinueExpr |
47
|
|
|
|
|
|
|
| ForStatementOp LParen Statement Semicolon Statement Semicolon Statement RParen Block |
48
|
|
|
|
|
|
|
| ForStatementOp LParen Semicolon Statement Semicolon Statement RParen Block ContinueExpr |
49
|
|
|
|
|
|
|
| ForStatementOp LParen Semicolon Statement Semicolon Statement RParen Block |
50
|
|
|
|
|
|
|
| ForStatementOp LParen Statement Semicolon Semicolon Statement RParen Block ContinueExpr |
51
|
|
|
|
|
|
|
| ForStatementOp LParen Statement Semicolon Semicolon Statement RParen Block |
52
|
|
|
|
|
|
|
| ForStatementOp LParen Statement Semicolon Statement Semicolon RParen Block ContinueExpr |
53
|
|
|
|
|
|
|
| ForStatementOp LParen Statement Semicolon Statement Semicolon RParen Block |
54
|
|
|
|
|
|
|
| ForStatementOp LParen Semicolon Semicolon Statement RParen Block ContinueExpr |
55
|
|
|
|
|
|
|
| ForStatementOp LParen Semicolon Semicolon Statement RParen Block |
56
|
|
|
|
|
|
|
| ForStatementOp LParen Statement Semicolon Semicolon RParen Block ContinueExpr |
57
|
|
|
|
|
|
|
| ForStatementOp LParen Statement Semicolon Semicolon RParen Block |
58
|
|
|
|
|
|
|
| ForStatementOp OpKeywordMy VarScalar LParen Expression RParen Block ContinueExpr |
59
|
|
|
|
|
|
|
| ForStatementOp OpKeywordMy VarScalar LParen Expression RParen Block |
60
|
|
|
|
|
|
|
| ForStatementOp VarScalar LParen Expression RParen Block ContinueExpr |
61
|
|
|
|
|
|
|
| ForStatementOp VarScalar LParen Expression RParen Block |
62
|
|
|
|
|
|
|
| ForStatementOp LParen Semicolon Semicolon RParen Block ContinueExpr |
63
|
|
|
|
|
|
|
| ForStatementOp LParen Semicolon Semicolon RParen Block |
64
|
|
|
|
|
|
|
| ForStatementOp LParen Expression RParen Block ContinueExpr |
65
|
|
|
|
|
|
|
| ForStatementOp LParen Expression RParen Block |
66
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
ContinueExpr ::= OpKeywordContinue Block |
68
|
|
|
|
|
|
|
|
69
|
|
|
|
|
|
|
ForStatementOp ::= OpKeywordFor |
70
|
|
|
|
|
|
|
| OpKeywordForeach |
71
|
|
|
|
|
|
|
|
72
|
|
|
|
|
|
|
WhileStatement ::= ConditionWhile LParen Expression RParen Block OpKeywordContinue Block |
73
|
|
|
|
|
|
|
| ConditionWhile LParen Expression RParen Block |
74
|
|
|
|
|
|
|
| ConditionWhile LParen RParen Block OpKeywordContinue Block |
75
|
|
|
|
|
|
|
| ConditionWhile LParen RParen Block |
76
|
|
|
|
|
|
|
|
77
|
|
|
|
|
|
|
UntilStatement ::= ConditionUntil LParen Expression RParen Block OpKeywordContinue Block |
78
|
|
|
|
|
|
|
| ConditionUntil LParen Expression RParen Block |
79
|
|
|
|
|
|
|
|
80
|
|
|
|
|
|
|
StatementModifier ::= ConditionIfPostfixExpr |
81
|
|
|
|
|
|
|
| ConditionUnlessPostfixExpr |
82
|
|
|
|
|
|
|
| ConditionWhilePostfixExpr |
83
|
|
|
|
|
|
|
| ConditionUntilPostfixExpr |
84
|
|
|
|
|
|
|
| ConditionForPostfixExpr |
85
|
|
|
|
|
|
|
| ConditionForeachPostfixExpr |
86
|
|
|
|
|
|
|
|
87
|
|
|
|
|
|
|
EllipsisStatement ::= Ellipsis |
88
|
|
|
|
|
|
|
|
89
|
|
|
|
|
|
|
UseStatement ::= OpKeywordUse ClassIdent VersionExpr Expression |
90
|
|
|
|
|
|
|
| OpKeywordUse ClassIdent VersionExpr |
91
|
|
|
|
|
|
|
| OpKeywordUse ClassIdent Expression |
92
|
|
|
|
|
|
|
| OpKeywordUse VersionExpr |
93
|
|
|
|
|
|
|
| OpKeywordUse ClassIdent |
94
|
|
|
|
|
|
|
|
95
|
|
|
|
|
|
|
NoStatement ::= OpKeywordNo ClassIdent VersionExpr Expression |
96
|
|
|
|
|
|
|
| OpKeywordNo ClassIdent VersionExpr |
97
|
|
|
|
|
|
|
| OpKeywordNo ClassIdent Expression |
98
|
|
|
|
|
|
|
| OpKeywordNo VersionExpr |
99
|
|
|
|
|
|
|
| OpKeywordNo ClassIdent |
100
|
|
|
|
|
|
|
|
101
|
|
|
|
|
|
|
RequireStatement ::= OpKeywordRequire VersionExpr |
102
|
|
|
|
|
|
|
| OpKeywordRequire ClassIdent |
103
|
|
|
|
|
|
|
| OpKeywordRequire Expression |
104
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
PackageStatement ::= OpKeywordPackage ClassIdent VersionExpr Block |
106
|
|
|
|
|
|
|
| OpKeywordPackage ClassIdent Block |
107
|
|
|
|
|
|
|
|
108
|
|
|
|
|
|
|
PackageDeclaration ::= OpKeywordPackage ClassIdent VersionExpr |
109
|
|
|
|
|
|
|
| OpKeywordPackage ClassIdent |
110
|
|
|
|
|
|
|
|
111
|
|
|
|
|
|
|
SubStatement ::= PhaseStatement Block |
112
|
|
|
|
|
|
|
| OpKeywordSub PhaseStatement Block |
113
|
|
|
|
|
|
|
| OpKeywordSub SubNameExpr SubDefinition |
114
|
|
|
|
|
|
|
|
115
|
|
|
|
|
|
|
SubDeclaration ::= OpKeywordSub SubNameExpr |
116
|
|
|
|
|
|
|
|
117
|
|
|
|
|
|
|
SubDefinition ::= SubAttrsDefinitionSeq SubSigsDefinition Block |
118
|
|
|
|
|
|
|
| SubAttrsDefinitionSeq Block |
119
|
|
|
|
|
|
|
| SubSigsDefinition Block |
120
|
|
|
|
|
|
|
| Block |
121
|
|
|
|
|
|
|
|
122
|
|
|
|
|
|
|
SubAttrsDefinitionSeq ::= SubAttrsDefinition SubAttrsDefinitionSeq |
123
|
|
|
|
|
|
|
| SubAttrsDefinition |
124
|
|
|
|
|
|
|
|
125
|
|
|
|
|
|
|
SubAttrsDefinition ::= Colon IdentComp SubAttrArgs |
126
|
|
|
|
|
|
|
| Colon IdentComp |
127
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
SubSigsDefinition ::= ParenExpr |
129
|
|
|
|
|
|
|
|
130
|
|
|
|
|
|
|
PhaseStatement ::= PhaseName |
131
|
|
|
|
|
|
|
|
132
|
|
|
|
|
|
|
Condition ::= ConditionIfExpr ConditionElsifExpr ConditionElseExpr |
133
|
|
|
|
|
|
|
| ConditionIfExpr ConditionElseExpr |
134
|
|
|
|
|
|
|
| ConditionIfExpr ConditionElsifExpr |
135
|
|
|
|
|
|
|
| ConditionIfExpr |
136
|
|
|
|
|
|
|
| ConditionUnlessExpr |
137
|
|
|
|
|
|
|
|
138
|
|
|
|
|
|
|
ConditionUnlessExpr ::= ConditionUnless LParen Expression RParen Block |
139
|
|
|
|
|
|
|
ConditionIfExpr ::= ConditionIf LParen Expression RParen Block |
140
|
|
|
|
|
|
|
ConditionElsifExpr ::= ConditionElsif LParen Expression RParen Block ConditionElsifExpr |
141
|
|
|
|
|
|
|
| ConditionElsif LParen Expression RParen Block |
142
|
|
|
|
|
|
|
ConditionElseExpr ::= ConditionElse Block |
143
|
|
|
|
|
|
|
ConditionIfPostfixExpr ::= ConditionIf Expression |
144
|
|
|
|
|
|
|
ConditionUnlessPostfixExpr ::= ConditionUnless Expression |
145
|
|
|
|
|
|
|
ConditionWhilePostfixExpr ::= ConditionWhile Expression |
146
|
|
|
|
|
|
|
ConditionUntilPostfixExpr ::= ConditionUntil Expression |
147
|
|
|
|
|
|
|
ConditionForPostfixExpr ::= ConditionFor Expression |
148
|
|
|
|
|
|
|
ConditionForeachPostfixExpr ::= ConditionForeach Expression |
149
|
|
|
|
|
|
|
|
150
|
|
|
|
|
|
|
Label ::= IdentComp Colon |
151
|
|
|
|
|
|
|
|
152
|
|
|
|
|
|
|
# this is based on the order of ops in `perldoc perlop` |
153
|
|
|
|
|
|
|
# U can be LHS of shift and up (value) << >> |
154
|
|
|
|
|
|
|
# 0 can be LHS of assignment and up (value or unary) = += -= *= |
155
|
|
|
|
|
|
|
# L can be LHS of comma and up (value, assign, unary) , => |
156
|
|
|
|
|
|
|
# R can be LHS of anything (value, list, assign, unary) (anything) |
157
|
|
|
|
|
|
|
|
158
|
|
|
|
|
|
|
# There are four types of keywords: |
159
|
|
|
|
|
|
|
# * Nullary (This is "OpNullaryKeywordExpr" -> Value") |
160
|
|
|
|
|
|
|
# * Unary (This is "OpUnaryKeywordExpr") |
161
|
|
|
|
|
|
|
# * Assign (This is "OpAssignKeywordExpr") |
162
|
|
|
|
|
|
|
# * List (This is "OpListKeywordExpr") |
163
|
|
|
|
|
|
|
|
164
|
|
|
|
|
|
|
# Hence, there are four types of expressions: |
165
|
|
|
|
|
|
|
# ExprValueU: Those that are just values |
166
|
|
|
|
|
|
|
# ExprValue0: Those that are values, and unary keywords |
167
|
|
|
|
|
|
|
# ExprValueL: Those that are values, assignment keywords (+ goto,last,next,redo,dump), or unary keywords |
168
|
|
|
|
|
|
|
# ExprValueR: Those that are values, list, assigment, or unary |
169
|
|
|
|
|
|
|
|
170
|
|
|
|
|
|
|
ExprValueU ::= Value |
171
|
|
|
|
|
|
|
ExprValue0 ::= Value | OpUnaryKeywordExpr |
172
|
|
|
|
|
|
|
ExprValueL ::= Value | OpAssignKeywordExpr | OpUnaryKeywordExpr |
173
|
|
|
|
|
|
|
ExprValueR ::= Value | OpListKeywordExpr | OpAssignKeywordExpr | OpUnaryKeywordExpr |
174
|
|
|
|
|
|
|
ExprArrowU ::= ExprArrowU OpArrow ArrowRHS | ExprValueU action => ::first |
175
|
|
|
|
|
|
|
ExprArrow0 ::= ExprArrowU OpArrow ArrowRHS | ExprValue0 action => ::first |
176
|
|
|
|
|
|
|
ExprArrowL ::= ExprArrowU OpArrow ArrowRHS | ExprValueL action => ::first |
177
|
|
|
|
|
|
|
ExprArrowR ::= ExprArrowU OpArrow ArrowRHS | ExprValueR action => ::first |
178
|
|
|
|
|
|
|
ExprIncU ::= OpInc ExprArrowU | ExprArrowR OpInc | ExprArrowU action => ::first |
179
|
|
|
|
|
|
|
ExprInc0 ::= OpInc ExprArrow0 | ExprArrowR OpInc | ExprArrow0 action => ::first |
180
|
|
|
|
|
|
|
ExprIncL ::= OpInc ExprArrowL | ExprArrowR OpInc | ExprArrowL action => ::first |
181
|
|
|
|
|
|
|
ExprIncR ::= OpInc ExprArrowR | ExprArrowL OpInc | ExprArrowR action => ::first |
182
|
|
|
|
|
|
|
ExprPowerU ::= ExprIncU OpPower ExprUnaryU | ExprIncU action => ::first |
183
|
|
|
|
|
|
|
ExprPower0 ::= ExprIncU OpPower ExprUnary0 | ExprInc0 action => ::first |
184
|
|
|
|
|
|
|
ExprPowerL ::= ExprIncU OpPower ExprUnaryL | ExprIncL action => ::first |
185
|
|
|
|
|
|
|
ExprPowerR ::= ExprIncU OpPower ExprUnaryR | ExprIncR action => ::first |
186
|
|
|
|
|
|
|
ExprUnaryU ::= OpUnary ExprUnaryU | ExprPowerU action => ::first |
187
|
|
|
|
|
|
|
ExprUnary0 ::= OpUnary ExprUnary0 | ExprPower0 action => ::first |
188
|
|
|
|
|
|
|
ExprUnaryL ::= OpUnary ExprUnaryL | ExprPowerL action => ::first |
189
|
|
|
|
|
|
|
ExprUnaryR ::= OpUnary ExprUnaryR | ExprPowerR action => ::first |
190
|
|
|
|
|
|
|
ExprRegexU ::= ExprRegexU OpRegex ExprUnaryU | ExprUnaryU action => ::first |
191
|
|
|
|
|
|
|
ExprRegex0 ::= ExprRegexU OpRegex ExprUnary0 | ExprUnary0 action => ::first |
192
|
|
|
|
|
|
|
ExprRegexL ::= ExprRegexU OpRegex ExprUnaryL | ExprUnaryL action => ::first |
193
|
|
|
|
|
|
|
ExprRegexR ::= ExprRegexU OpRegex ExprUnaryR | ExprUnaryR action => ::first |
194
|
|
|
|
|
|
|
ExprMulU ::= ExprMulU OpMulti ExprRegexU | ExprRegexU action => ::first |
195
|
|
|
|
|
|
|
ExprMul0 ::= ExprMulU OpMulti ExprRegex0 | ExprRegex0 action => ::first |
196
|
|
|
|
|
|
|
ExprMulL ::= ExprMulU OpMulti ExprRegexL | ExprRegexL action => ::first |
197
|
|
|
|
|
|
|
ExprMulR ::= ExprMulU OpMulti ExprRegexR | ExprRegexR action => ::first |
198
|
|
|
|
|
|
|
ExprAddU ::= ExprAddU OpAdd ExprMulU | ExprMulU action => ::first |
199
|
|
|
|
|
|
|
ExprAdd0 ::= ExprAddU OpAdd ExprMul0 | ExprMul0 action => ::first |
200
|
|
|
|
|
|
|
ExprAddL ::= ExprAddU OpAdd ExprMulL | ExprMulL action => ::first |
201
|
|
|
|
|
|
|
ExprAddR ::= ExprAddU OpAdd ExprMulR | ExprMulR action => ::first |
202
|
|
|
|
|
|
|
ExprShiftU ::= ExprShiftU OpShift ExprAddU | ExprAddU action => ::first |
203
|
|
|
|
|
|
|
ExprShift0 ::= ExprShiftU OpShift ExprAdd0 | ExprAdd0 action => ::first |
204
|
|
|
|
|
|
|
ExprShiftL ::= ExprShiftU OpShift ExprAddL | ExprAddL action => ::first |
205
|
|
|
|
|
|
|
ExprShiftR ::= ExprShiftU OpShift ExprAddR | ExprAddR action => ::first |
206
|
|
|
|
|
|
|
ExprNeq0 ::= ExprShift0 OpInequal ExprShift0 | ExprShift0 action => ::first |
207
|
|
|
|
|
|
|
ExprNeqL ::= ExprShift0 OpInequal ExprShiftL | ExprShiftL action => ::first |
208
|
|
|
|
|
|
|
ExprNeqR ::= ExprShift0 OpInequal ExprShiftR | ExprShiftR action => ::first |
209
|
|
|
|
|
|
|
ExprEq0 ::= ExprNeq0 OpEqual ExprNeq0 | ExprNeq0 action => ::first |
210
|
|
|
|
|
|
|
ExprEqL ::= ExprNeq0 OpEqual ExprNeqL | ExprNeqL action => ::first |
211
|
|
|
|
|
|
|
ExprEqR ::= ExprNeq0 OpEqual ExprNeqR | ExprNeqR action => ::first |
212
|
|
|
|
|
|
|
ExprBinAnd0 ::= ExprBinAnd0 OpBinAnd ExprEq0 | ExprEq0 action => ::first |
213
|
|
|
|
|
|
|
ExprBinAndL ::= ExprBinAnd0 OpBinAnd ExprEqL | ExprEqL action => ::first |
214
|
|
|
|
|
|
|
ExprBinAndR ::= ExprBinAnd0 OpBinAnd ExprEqR | ExprEqR action => ::first |
215
|
|
|
|
|
|
|
ExprBinOr0 ::= ExprBinOr0 OpBinOr ExprBinAnd0 | ExprBinAnd0 action => ::first |
216
|
|
|
|
|
|
|
ExprBinOrL ::= ExprBinOr0 OpBinOr ExprBinAndL | ExprBinAndL action => ::first |
217
|
|
|
|
|
|
|
ExprBinOrR ::= ExprBinOr0 OpBinOr ExprBinAndR | ExprBinAndR action => ::first |
218
|
|
|
|
|
|
|
ExprLogAnd0 ::= ExprLogAnd0 OpLogAnd ExprBinOr0 | ExprBinOr0 action => ::first |
219
|
|
|
|
|
|
|
ExprLogAndL ::= ExprLogAnd0 OpLogAnd ExprBinOrL | ExprBinOrL action => ::first |
220
|
|
|
|
|
|
|
ExprLogAndR ::= ExprLogAnd0 OpLogAnd ExprBinOrR | ExprBinOrR action => ::first |
221
|
|
|
|
|
|
|
ExprLogOr0 ::= ExprLogOr0 OpLogOr ExprLogAnd0 | ExprLogAnd0 action => ::first |
222
|
|
|
|
|
|
|
ExprLogOrL ::= ExprLogOr0 OpLogOr ExprLogAndL | ExprLogAndL action => ::first |
223
|
|
|
|
|
|
|
ExprLogOrR ::= ExprLogOr0 OpLogOr ExprLogAndR | ExprLogAndR action => ::first |
224
|
|
|
|
|
|
|
ExprRange0 ::= ExprLogOr0 OpRange ExprLogOr0 | ExprLogOr0 action => ::first |
225
|
|
|
|
|
|
|
ExprRangeL ::= ExprLogOr0 OpRange ExprLogOrL | ExprLogOrL action => ::first |
226
|
|
|
|
|
|
|
ExprRangeR ::= ExprLogOr0 OpRange ExprLogOrR | ExprLogOrR action => ::first |
227
|
|
|
|
|
|
|
ExprCond0 ::= ExprRange0 OpTriThen ExprRange0 OpTriElse ExprCond0 | ExprRange0 action => ::first |
228
|
|
|
|
|
|
|
ExprCondL ::= ExprRange0 OpTriThen ExprRangeL OpTriElse ExprCondL | ExprRangeL action => ::first |
229
|
|
|
|
|
|
|
ExprCondR ::= ExprRange0 OpTriThen ExprRangeR OpTriElse ExprCondR | ExprRangeR action => ::first |
230
|
|
|
|
|
|
|
ExprAssignL ::= ExprCond0 OpAssign ExprAssignL | OpAssignKeywordExpr |
231
|
|
|
|
|
|
|
| ExprCondL action => ::first |
232
|
|
|
|
|
|
|
ExprAssignR ::= ExprCond0 OpAssign ExprAssignR | ExprCondR action => ::first |
233
|
|
|
|
|
|
|
ExprComma ::= ExprAssignL OpComma ExprComma | ExprAssignL OpComma | ExprAssignR action => ::first |
234
|
|
|
|
|
|
|
ExprNameNot ::= OpNameNot ExprNameNot | ExprComma action => ::first |
235
|
|
|
|
|
|
|
ExprNameAnd ::= ExprNameAnd OpNameAnd ExprNameNot | ExprNameNot action => ::first |
236
|
|
|
|
|
|
|
ExprNameOr ::= ExprNameOr OpNameOr ExprNameAnd | ExprNameAnd action => ::first |
237
|
|
|
|
|
|
|
Expression ::= ExprNameOr action => ::first |
238
|
|
|
|
|
|
|
|
239
|
|
|
|
|
|
|
# Hashrefs (LiteralHash) are not allowed to be top-level so they aren't confused with block |
240
|
|
|
|
|
|
|
# However, "+{...}" or "return {...}" means they aren't top level because of the preceding op |
241
|
|
|
|
|
|
|
# which are themselves top-level tokens ("+", "return") |
242
|
|
|
|
|
|
|
NonBraceExprValueU ::= NonBraceValue |
243
|
|
|
|
|
|
|
NonBraceExprValue0 ::= NonBraceValue | OpUnaryKeywordExpr |
244
|
|
|
|
|
|
|
NonBraceExprValueL ::= NonBraceValue | OpAssignKeywordExpr | OpUnaryKeywordExpr |
245
|
|
|
|
|
|
|
NonBraceExprValueR ::= NonBraceValue | OpListKeywordExpr | OpAssignKeywordExpr | OpUnaryKeywordExpr |
246
|
|
|
|
|
|
|
NonBraceExprArrowU ::= NonBraceExprArrowU OpArrow ArrowRHS | NonBraceExprValueU action => ::first |
247
|
|
|
|
|
|
|
NonBraceExprArrow0 ::= NonBraceExprArrowU OpArrow ArrowRHS | NonBraceExprValue0 action => ::first |
248
|
|
|
|
|
|
|
NonBraceExprArrowL ::= NonBraceExprArrowU OpArrow ArrowRHS | NonBraceExprValueL action => ::first |
249
|
|
|
|
|
|
|
NonBraceExprArrowR ::= NonBraceExprArrowU OpArrow ArrowRHS | NonBraceExprValueR action => ::first |
250
|
|
|
|
|
|
|
NonBraceExprIncU ::= OpInc ExprArrowU | NonBraceExprArrowR OpInc | NonBraceExprArrowU action => ::first |
251
|
|
|
|
|
|
|
NonBraceExprInc0 ::= OpInc ExprArrow0 | NonBraceExprArrowR OpInc | NonBraceExprArrow0 action => ::first |
252
|
|
|
|
|
|
|
NonBraceExprIncL ::= OpInc ExprArrowL | NonBraceExprArrowR OpInc | NonBraceExprArrowL action => ::first |
253
|
|
|
|
|
|
|
NonBraceExprIncR ::= OpInc ExprArrowR | NonBraceExprArrowL OpInc | NonBraceExprArrowR action => ::first |
254
|
|
|
|
|
|
|
NonBraceExprPowerU ::= NonBraceExprIncU OpPower ExprUnaryU | NonBraceExprIncU action => ::first |
255
|
|
|
|
|
|
|
NonBraceExprPower0 ::= NonBraceExprIncU OpPower ExprUnary0 | NonBraceExprInc0 action => ::first |
256
|
|
|
|
|
|
|
NonBraceExprPowerL ::= NonBraceExprIncU OpPower ExprUnaryL | NonBraceExprIncL action => ::first |
257
|
|
|
|
|
|
|
NonBraceExprPowerR ::= NonBraceExprIncU OpPower ExprUnaryR | NonBraceExprIncR action => ::first |
258
|
|
|
|
|
|
|
NonBraceExprUnaryU ::= OpUnary ExprUnaryU | NonBraceExprPowerU action => ::first |
259
|
|
|
|
|
|
|
NonBraceExprUnary0 ::= OpUnary ExprUnary0 | NonBraceExprPower0 action => ::first |
260
|
|
|
|
|
|
|
NonBraceExprUnaryL ::= OpUnary ExprUnaryL | NonBraceExprPowerL action => ::first |
261
|
|
|
|
|
|
|
NonBraceExprUnaryR ::= OpUnary ExprUnaryR | NonBraceExprPowerR action => ::first |
262
|
|
|
|
|
|
|
NonBraceExprRegexU ::= NonBraceExprRegexU OpRegex ExprUnaryU | NonBraceExprUnaryU action => ::first |
263
|
|
|
|
|
|
|
NonBraceExprRegex0 ::= NonBraceExprRegexU OpRegex ExprUnary0 | NonBraceExprUnary0 action => ::first |
264
|
|
|
|
|
|
|
NonBraceExprRegexL ::= NonBraceExprRegexU OpRegex ExprUnaryL | NonBraceExprUnaryL action => ::first |
265
|
|
|
|
|
|
|
NonBraceExprRegexR ::= NonBraceExprRegexU OpRegex ExprUnaryR | NonBraceExprUnaryR action => ::first |
266
|
|
|
|
|
|
|
NonBraceExprMulU ::= NonBraceExprMulU OpMulti ExprRegexU | NonBraceExprRegexU action => ::first |
267
|
|
|
|
|
|
|
NonBraceExprMul0 ::= NonBraceExprMulU OpMulti ExprRegex0 | NonBraceExprRegex0 action => ::first |
268
|
|
|
|
|
|
|
NonBraceExprMulL ::= NonBraceExprMulU OpMulti ExprRegexL | NonBraceExprRegexL action => ::first |
269
|
|
|
|
|
|
|
NonBraceExprMulR ::= NonBraceExprMulU OpMulti ExprRegexR | NonBraceExprRegexR action => ::first |
270
|
|
|
|
|
|
|
NonBraceExprAddU ::= NonBraceExprAddU OpAdd ExprMulU | NonBraceExprMulU action => ::first |
271
|
|
|
|
|
|
|
NonBraceExprAdd0 ::= NonBraceExprAddU OpAdd ExprMul0 | NonBraceExprMul0 action => ::first |
272
|
|
|
|
|
|
|
NonBraceExprAddL ::= NonBraceExprAddU OpAdd ExprMulL | NonBraceExprMulL action => ::first |
273
|
|
|
|
|
|
|
NonBraceExprAddR ::= NonBraceExprAddU OpAdd ExprMulR | NonBraceExprMulR action => ::first |
274
|
|
|
|
|
|
|
NonBraceExprShiftU ::= NonBraceExprShiftU OpShift ExprAddU | NonBraceExprAddU action => ::first |
275
|
|
|
|
|
|
|
NonBraceExprShift0 ::= NonBraceExprShiftU OpShift ExprAdd0 | NonBraceExprAdd0 action => ::first |
276
|
|
|
|
|
|
|
NonBraceExprShiftL ::= NonBraceExprShiftU OpShift ExprAddL | NonBraceExprAddL action => ::first |
277
|
|
|
|
|
|
|
NonBraceExprShiftR ::= NonBraceExprShiftU OpShift ExprAddR | NonBraceExprAddR action => ::first |
278
|
|
|
|
|
|
|
NonBraceExprNeq0 ::= NonBraceExprShift0 OpInequal ExprShift0 | NonBraceExprShift0 action => ::first |
279
|
|
|
|
|
|
|
NonBraceExprNeqL ::= NonBraceExprShift0 OpInequal ExprShiftL | NonBraceExprShiftL action => ::first |
280
|
|
|
|
|
|
|
NonBraceExprNeqR ::= NonBraceExprShift0 OpInequal ExprShiftR | NonBraceExprShiftR action => ::first |
281
|
|
|
|
|
|
|
NonBraceExprEq0 ::= NonBraceExprNeq0 OpEqual ExprNeq0 | NonBraceExprNeq0 action => ::first |
282
|
|
|
|
|
|
|
NonBraceExprEqL ::= NonBraceExprNeq0 OpEqual ExprNeqL | NonBraceExprNeqL action => ::first |
283
|
|
|
|
|
|
|
NonBraceExprEqR ::= NonBraceExprNeq0 OpEqual ExprNeqR | NonBraceExprNeqR action => ::first |
284
|
|
|
|
|
|
|
NonBraceExprBinAnd0 ::= NonBraceExprBinAnd0 OpBinAnd ExprEq0 | NonBraceExprEq0 action => ::first |
285
|
|
|
|
|
|
|
NonBraceExprBinAndL ::= NonBraceExprBinAnd0 OpBinAnd ExprEqL | NonBraceExprEqL action => ::first |
286
|
|
|
|
|
|
|
NonBraceExprBinAndR ::= NonBraceExprBinAnd0 OpBinAnd ExprEqR | NonBraceExprEqR action => ::first |
287
|
|
|
|
|
|
|
NonBraceExprBinOr0 ::= NonBraceExprBinOr0 OpBinOr ExprBinAnd0 | NonBraceExprBinAnd0 action => ::first |
288
|
|
|
|
|
|
|
NonBraceExprBinOrL ::= NonBraceExprBinOr0 OpBinOr ExprBinAndL | NonBraceExprBinAndL action => ::first |
289
|
|
|
|
|
|
|
NonBraceExprBinOrR ::= NonBraceExprBinOr0 OpBinOr ExprBinAndR | NonBraceExprBinAndR action => ::first |
290
|
|
|
|
|
|
|
NonBraceExprLogAnd0 ::= NonBraceExprLogAnd0 OpLogAnd ExprBinOr0 | NonBraceExprBinOr0 action => ::first |
291
|
|
|
|
|
|
|
NonBraceExprLogAndL ::= NonBraceExprLogAnd0 OpLogAnd ExprBinOrL | NonBraceExprBinOrL action => ::first |
292
|
|
|
|
|
|
|
NonBraceExprLogAndR ::= NonBraceExprLogAnd0 OpLogAnd ExprBinOrR | NonBraceExprBinOrR action => ::first |
293
|
|
|
|
|
|
|
NonBraceExprLogOr0 ::= NonBraceExprLogOr0 OpLogOr ExprLogAnd0 | NonBraceExprLogAnd0 action => ::first |
294
|
|
|
|
|
|
|
NonBraceExprLogOrL ::= NonBraceExprLogOr0 OpLogOr ExprLogAndL | NonBraceExprLogAndL action => ::first |
295
|
|
|
|
|
|
|
NonBraceExprLogOrR ::= NonBraceExprLogOr0 OpLogOr ExprLogAndR | NonBraceExprLogAndR action => ::first |
296
|
|
|
|
|
|
|
NonBraceExprRange0 ::= NonBraceExprLogOr0 OpRange ExprLogOr0 | NonBraceExprLogOr0 action => ::first |
297
|
|
|
|
|
|
|
NonBraceExprRangeL ::= NonBraceExprLogOr0 OpRange ExprLogOrL | NonBraceExprLogOrL action => ::first |
298
|
|
|
|
|
|
|
NonBraceExprRangeR ::= NonBraceExprLogOr0 OpRange ExprLogOrR | NonBraceExprLogOrR action => ::first |
299
|
|
|
|
|
|
|
NonBraceExprCond0 ::= NonBraceExprRange0 OpTriThen ExprRange0 OpTriElse ExprCond0 | NonBraceExprRange0 action => ::first |
300
|
|
|
|
|
|
|
NonBraceExprCondL ::= NonBraceExprRange0 OpTriThen ExprRangeL OpTriElse ExprCondL | NonBraceExprRangeL action => ::first |
301
|
|
|
|
|
|
|
NonBraceExprCondR ::= NonBraceExprRange0 OpTriThen ExprRangeR OpTriElse ExprCondR | NonBraceExprRangeR action => ::first |
302
|
|
|
|
|
|
|
NonBraceExprAssignL ::= NonBraceExprCond0 OpAssign ExprAssignL | OpAssignKeywordExpr |
303
|
|
|
|
|
|
|
| NonBraceExprCondL action => ::first |
304
|
|
|
|
|
|
|
NonBraceExprAssignR ::= NonBraceExprCond0 OpAssign ExprAssignR | NonBraceExprCondR action => ::first |
305
|
|
|
|
|
|
|
|
306
|
|
|
|
|
|
|
|
307
|
|
|
|
|
|
|
NonBraceExprComma ::= NonBraceExprAssignL OpComma ExprComma | NonBraceExprAssignR action => ::first |
308
|
|
|
|
|
|
|
|
309
|
|
|
|
|
|
|
# Comma is only allowed if it follows a keyword operator, to avoid block/hash disambiguation in perl. |
310
|
|
|
|
|
|
|
BlockLevelExprNameNot ::= OpNameNot ExprNameNot | NonBraceExprAssignR action => ::first |
311
|
|
|
|
|
|
|
BlockLevelExprNameAnd ::= BlockLevelExprNameAnd OpNameAnd ExprNameNot | BlockLevelExprNameNot action => ::first |
312
|
|
|
|
|
|
|
BlockLevelExprNameOr ::= BlockLevelExprNameOr OpNameOr ExprNameAnd | BlockLevelExprNameAnd action => ::first |
313
|
|
|
|
|
|
|
BlockLevelExpression ::= BlockLevelExprNameOr action => ::first |
314
|
|
|
|
|
|
|
|
315
|
|
|
|
|
|
|
Value ::= Literal | NonLiteral | QLikeValue |
316
|
|
|
|
|
|
|
|
317
|
|
|
|
|
|
|
# Arguments of operators according to the operator precedence |
318
|
|
|
|
|
|
|
OpUnaryKeywordArg ::= ExprShiftR |
319
|
|
|
|
|
|
|
OpUnaryKeywordArgNonBrace ::= NonBraceExprShiftR |
320
|
|
|
|
|
|
|
OpAssignKeywordArg ::= ExprAssignR |
321
|
|
|
|
|
|
|
OpListKeywordArg ::= ExprComma |
322
|
|
|
|
|
|
|
OpListKeywordArgNonBrace ::= NonBraceExprComma |
323
|
|
|
|
|
|
|
|
324
|
|
|
|
|
|
|
# Same as Value above, but with a NonBraceLiteral |
325
|
|
|
|
|
|
|
NonBraceValue ::= NonBraceLiteral | NonLiteral | QLikeValue |
326
|
|
|
|
|
|
|
|
327
|
|
|
|
|
|
|
NonLiteral ::= Variable |
328
|
|
|
|
|
|
|
| DerefVariable |
329
|
|
|
|
|
|
|
| Modifier Variable |
330
|
|
|
|
|
|
|
| Modifier ParenExpr |
331
|
|
|
|
|
|
|
| UnderscoreValues |
332
|
|
|
|
|
|
|
| SubCall |
333
|
|
|
|
|
|
|
| PackageArrow |
334
|
|
|
|
|
|
|
| ParenExpr ElemSeq0 |
335
|
|
|
|
|
|
|
| OpNullaryKeywordExpr |
336
|
|
|
|
|
|
|
| DiamondExpr |
337
|
|
|
|
|
|
|
|
338
|
|
|
|
|
|
|
DiamondExpr ::= Diamond |
339
|
|
|
|
|
|
|
| DoubleDiamond |
340
|
|
|
|
|
|
|
|
341
|
|
|
|
|
|
|
# This is written this way because of whitespace rules |
342
|
|
|
|
|
|
|
Diamond ::= '<' VarScalar '>' |
343
|
|
|
|
|
|
|
| '<' BuiltinFilehandle '>' |
344
|
|
|
|
|
|
|
| '<>' |
345
|
|
|
|
|
|
|
|
346
|
|
|
|
|
|
|
# This is written this way because of whitespace rules |
347
|
|
|
|
|
|
|
DoubleDiamond ::= '<<' VarScalar '>>' |
348
|
|
|
|
|
|
|
| '<<' BuiltinFilehandle '>>' |
349
|
|
|
|
|
|
|
| '<<>>' |
350
|
|
|
|
|
|
|
|
351
|
|
|
|
|
|
|
ParenExpr ::= LParen Expression RParen |
352
|
|
|
|
|
|
|
| LParen RParen # support () |
353
|
|
|
|
|
|
|
|
354
|
|
|
|
|
|
|
Modifier ::= OpKeywordMy | OpKeywordOur | OpKeywordLocal | OpKeywordState |
355
|
|
|
|
|
|
|
|
356
|
|
|
|
|
|
|
ElemSeq0 ::= Element* |
357
|
|
|
|
|
|
|
ElemSeq1 ::= Element+ |
358
|
|
|
|
|
|
|
Element ::= ArrayElem | HashElem |
359
|
|
|
|
|
|
|
|
360
|
|
|
|
|
|
|
# UnderscoreData and UnderscoreEnd are not values |
361
|
|
|
|
|
|
|
UnderscoreValues ::= UnderscorePackage |
362
|
|
|
|
|
|
|
| UnderscoreFile |
363
|
|
|
|
|
|
|
| UnderscoreLine |
364
|
|
|
|
|
|
|
| UnderscoreSub |
365
|
|
|
|
|
|
|
|
366
|
|
|
|
|
|
|
# Silence these until they are supported |
367
|
|
|
|
|
|
|
#UnderscoreTokens ::= UnderscoreValues |
368
|
|
|
|
|
|
|
# | UnderscoreData |
369
|
|
|
|
|
|
|
# | UnderscoreEnd |
370
|
|
|
|
|
|
|
|
371
|
|
|
|
|
|
|
Variable ::= GlobalVarExpr |
372
|
|
|
|
|
|
|
| VarScalar |
373
|
|
|
|
|
|
|
| VarArray |
374
|
|
|
|
|
|
|
| VarHash |
375
|
|
|
|
|
|
|
| VarCode |
376
|
|
|
|
|
|
|
| VarGlob |
377
|
|
|
|
|
|
|
| VarArrayTop |
378
|
|
|
|
|
|
|
|
379
|
|
|
|
|
|
|
GlobalVarExpr ::= '$#' |
380
|
|
|
|
|
|
|
| SigilScalar GlobalVariables ElemSeq0 |
381
|
|
|
|
|
|
|
| SigilArray GlobalVariables ElemSeq0 |
382
|
|
|
|
|
|
|
| SigilHash GlobalVariables ElemSeq0 |
383
|
|
|
|
|
|
|
| SigilGlob GlobalVariables ElemSeq0 |
384
|
|
|
|
|
|
|
|
385
|
|
|
|
|
|
|
VarScalar ::= SigilScalar VarIdentExpr ElemSeq0 |
386
|
|
|
|
|
|
|
VarArray ::= SigilArray VarIdentExpr ElemSeq0 |
387
|
|
|
|
|
|
|
VarHash ::= SigilHash VarIdentExpr ElemSeq0 |
388
|
|
|
|
|
|
|
VarCode ::= SigilCode VarIdentExpr |
389
|
|
|
|
|
|
|
VarGlob ::= SigilGlob VarIdentExpr |
390
|
|
|
|
|
|
|
VarArrayTop ::= SigilArrayTop VarIdentExpr |
391
|
|
|
|
|
|
|
| '$#_' |
392
|
|
|
|
|
|
|
|
393
|
|
|
|
|
|
|
SubCall ::= SubNameCallExpr CallArgs |
394
|
|
|
|
|
|
|
| VarCode CallArgs |
395
|
|
|
|
|
|
|
|
396
|
|
|
|
|
|
|
PackageArrow ::= SubNameExpr OpArrow PackageArrowRHS |
397
|
|
|
|
|
|
|
|
398
|
|
|
|
|
|
|
PackageArrowRHS ::= ArrowMethodCall |
399
|
|
|
|
|
|
|
| ArrowIndirectCall |
400
|
|
|
|
|
|
|
|
401
|
|
|
|
|
|
|
# Used for function calls (Non-QLikeValue string) |
402
|
|
|
|
|
|
|
SubNameCallExpr ::= SubNameNonQLike |
403
|
|
|
|
|
|
|
| SubNameCallExpr PackageSep SubNameNonQLike |
404
|
|
|
|
|
|
|
|
405
|
|
|
|
|
|
|
# Used for defining subs (no limits) |
406
|
|
|
|
|
|
|
SubNameExpr ::= SubName |
407
|
|
|
|
|
|
|
| SubNameExpr PackageSep SubName |
408
|
|
|
|
|
|
|
|
409
|
|
|
|
|
|
|
# SubName is used for methods and subroutine definitions |
410
|
|
|
|
|
|
|
# They are not limited in any regard (other than no-digits in first char) |
411
|
|
|
|
|
|
|
SubName ~ LeadingSubLetter CoreSubLetters |
412
|
|
|
|
|
|
|
LeadingSubLetter ~ [a-zA-Z_] |
413
|
|
|
|
|
|
|
CoreSubLetters ~ [a-zA-Z0-9_]* |
414
|
|
|
|
|
|
|
|
415
|
|
|
|
|
|
|
# SubNameNonQLike is for function calls |
416
|
|
|
|
|
|
|
# They are not allowed to be: |
417
|
|
|
|
|
|
|
# q / qq / qw / qr / qx |
418
|
|
|
|
|
|
|
# s / m / y / tr |
419
|
|
|
|
|
|
|
SubNameNonQLike ~ |
420
|
|
|
|
|
|
|
NonQLikeLetters # [non-qlike] |
421
|
|
|
|
|
|
|
| NonQLikeLetters AllSubLetters # [non-qlike][*] |
422
|
|
|
|
|
|
|
| 'q' NonQRWXLetters # q[non-qrwx] |
423
|
|
|
|
|
|
|
| 'q' NonQRWXLetters AllSubLetters # q[non-qrwx][*] |
424
|
|
|
|
|
|
|
| 'qq' AllSubLetters # qq[*] |
425
|
|
|
|
|
|
|
| 'qr' AllSubLetters # qr[*] |
426
|
|
|
|
|
|
|
| 'qw' AllSubLetters # qw[*] |
427
|
|
|
|
|
|
|
| 'qx' AllSubLetters # qx[*] |
428
|
|
|
|
|
|
|
| 't' # t |
429
|
|
|
|
|
|
|
| 't' NonRLetter # t[non-r] |
430
|
|
|
|
|
|
|
| 't' NonRLetter AllSubLetters # t[non-r][*] |
431
|
|
|
|
|
|
|
| 'tr' AllSubLetters # tr[*] |
432
|
|
|
|
|
|
|
| 's' AllSubLetters # s[*] |
433
|
|
|
|
|
|
|
| 'm' AllSubLetters # m[*] |
434
|
|
|
|
|
|
|
| 'y' AllSubLetters # y[*] |
435
|
|
|
|
|
|
|
|
436
|
|
|
|
|
|
|
# Variables are defined using a different ident |
437
|
|
|
|
|
|
|
# Namespaced variables ($x::y) might have a different ident |
438
|
|
|
|
|
|
|
VarIdentExpr ::= VarIdent |
439
|
|
|
|
|
|
|
| VarIdentExpr PackageSep VarIdent |
440
|
|
|
|
|
|
|
|
441
|
|
|
|
|
|
|
VarIdent ~ NonGlobalVarLetters |
442
|
|
|
|
|
|
|
| NonGlobalVarLetters AllVarLetters |
443
|
|
|
|
|
|
|
| '_' AllVarLetters |
444
|
|
|
|
|
|
|
|
445
|
|
|
|
|
|
|
NonGlobalVarLetters ~ [a-zA-Z]+ |
446
|
|
|
|
|
|
|
AllVarLetters ~ [a-zA-Z0-9_]+ |
447
|
|
|
|
|
|
|
|
448
|
|
|
|
|
|
|
GlobalVariables ~ '!' |
449
|
|
|
|
|
|
|
| '"' |
450
|
|
|
|
|
|
|
| '%' |
451
|
|
|
|
|
|
|
| '&' |
452
|
|
|
|
|
|
|
| ['] |
453
|
|
|
|
|
|
|
| '(' |
454
|
|
|
|
|
|
|
| ')' |
455
|
|
|
|
|
|
|
| '*' |
456
|
|
|
|
|
|
|
| '+' |
457
|
|
|
|
|
|
|
| ',' |
458
|
|
|
|
|
|
|
| '-' |
459
|
|
|
|
|
|
|
| '.' |
460
|
|
|
|
|
|
|
| '/' |
461
|
|
|
|
|
|
|
| ':' |
462
|
|
|
|
|
|
|
| ';' |
463
|
|
|
|
|
|
|
| '<' |
464
|
|
|
|
|
|
|
| '=' |
465
|
|
|
|
|
|
|
| '>' |
466
|
|
|
|
|
|
|
| '?' |
467
|
|
|
|
|
|
|
| '@' |
468
|
|
|
|
|
|
|
| '[' |
469
|
|
|
|
|
|
|
| '\\' |
470
|
|
|
|
|
|
|
| ']' |
471
|
|
|
|
|
|
|
| '^' |
472
|
|
|
|
|
|
|
| '_' |
473
|
|
|
|
|
|
|
| '`' |
474
|
|
|
|
|
|
|
| '|' |
475
|
|
|
|
|
|
|
| '~' |
476
|
|
|
|
|
|
|
| '$' |
477
|
|
|
|
|
|
|
| '^A' |
478
|
|
|
|
|
|
|
| '^C' |
479
|
|
|
|
|
|
|
| '{^CHILD_ERROR_NATIVE}' |
480
|
|
|
|
|
|
|
| '^D' |
481
|
|
|
|
|
|
|
| '^E' |
482
|
|
|
|
|
|
|
| '{^ENCODING}' |
483
|
|
|
|
|
|
|
| '^F' |
484
|
|
|
|
|
|
|
| '{^GLOBAL_PHASE}' |
485
|
|
|
|
|
|
|
| '^H' |
486
|
|
|
|
|
|
|
| '^I' |
487
|
|
|
|
|
|
|
| '^L' |
488
|
|
|
|
|
|
|
| '{^LAST_FH}' |
489
|
|
|
|
|
|
|
| '^M' |
490
|
|
|
|
|
|
|
| '{^MATCH}' |
491
|
|
|
|
|
|
|
| '^N' |
492
|
|
|
|
|
|
|
| '^O' |
493
|
|
|
|
|
|
|
| '{^OPEN}' |
494
|
|
|
|
|
|
|
| '^P' |
495
|
|
|
|
|
|
|
| '{^POSTMATCH}' |
496
|
|
|
|
|
|
|
| '{^PREMATCH}' |
497
|
|
|
|
|
|
|
| '^R' |
498
|
|
|
|
|
|
|
| '{^RE_COMPILE_RECURSION_LIMIT}' |
499
|
|
|
|
|
|
|
| '{^RE_DEBUG_FLAGS}' |
500
|
|
|
|
|
|
|
| '{^RE_TRIE_MAXBUF}' |
501
|
|
|
|
|
|
|
| '^S' |
502
|
|
|
|
|
|
|
| '{^SAFE_LOCALES}' |
503
|
|
|
|
|
|
|
| '^T' |
504
|
|
|
|
|
|
|
| '{^TAINT}' |
505
|
|
|
|
|
|
|
| '{^UNICODE}' |
506
|
|
|
|
|
|
|
| '{^UTF8CACHE}' |
507
|
|
|
|
|
|
|
| '{^UTF8LOCALE}' |
508
|
|
|
|
|
|
|
| '^V' |
509
|
|
|
|
|
|
|
| '^W' |
510
|
|
|
|
|
|
|
| '{^WARNING_BITS}' |
511
|
|
|
|
|
|
|
| '{^WIN32_SLOPPY_STAT}' |
512
|
|
|
|
|
|
|
| '^X' |
513
|
|
|
|
|
|
|
| '{^CAPTURE}' |
514
|
|
|
|
|
|
|
| '{^CAPTURE_ALL}' |
515
|
|
|
|
|
|
|
| Digits |
516
|
|
|
|
|
|
|
|
517
|
|
|
|
|
|
|
VarDefaultArg ::= '$_' |
518
|
|
|
|
|
|
|
|
519
|
|
|
|
|
|
|
# This uses the same definition as subroutine names |
520
|
|
|
|
|
|
|
# In the future, we might want to split those |
521
|
|
|
|
|
|
|
# but they are basically the same |
522
|
|
|
|
|
|
|
ClassIdent ::= SubNameExpr |
523
|
|
|
|
|
|
|
|
524
|
|
|
|
|
|
|
CallArgs ::= ParenExpr |
525
|
|
|
|
|
|
|
|
526
|
|
|
|
|
|
|
# Depending on context, "{}" may be interpreted as an empty block or a hash literal. |
527
|
|
|
|
|
|
|
Block ::= BlockEmpty action => ::first |
528
|
|
|
|
|
|
|
| BlockNonEmpty action => ::first |
529
|
|
|
|
|
|
|
BlockEmpty ::= LBrace RBrace name => Block |
530
|
|
|
|
|
|
|
BlockNonEmpty ::= LBrace StatementSeq RBrace name => Block |
531
|
|
|
|
|
|
|
|
532
|
|
|
|
|
|
|
ArrayElem ::= LBracket Expression RBracket |
533
|
|
|
|
|
|
|
|
534
|
|
|
|
|
|
|
HashElem ::= LBrace Expression RBrace |
535
|
|
|
|
|
|
|
|
536
|
|
|
|
|
|
|
NonBraceLiteral ::= LitNumber |
537
|
|
|
|
|
|
|
| LitArray |
538
|
|
|
|
|
|
|
| LitString |
539
|
|
|
|
|
|
|
| InterpolString |
540
|
|
|
|
|
|
|
| LitHashEmpty |
541
|
|
|
|
|
|
|
|
542
|
|
|
|
|
|
|
Literal ::= NonBraceLiteral |
543
|
|
|
|
|
|
|
| LitHashNonEmpty |
544
|
|
|
|
|
|
|
|
545
|
|
|
|
|
|
|
LitArray ::= LBracket Expression RBracket |
546
|
|
|
|
|
|
|
| LBracket RBracket |
547
|
|
|
|
|
|
|
|
548
|
|
|
|
|
|
|
# Depending on context, "{}" may be interpreted as an empty block or a hash literal. |
549
|
|
|
|
|
|
|
LitHashEmpty ::= LBrace RBrace name => LitHash |
550
|
|
|
|
|
|
|
LitHashNonEmpty ::= LBrace Expression RBrace name => LitHash |
551
|
|
|
|
|
|
|
|
552
|
|
|
|
|
|
|
LitString ::= SingleQuote NonSingleOrEscapedQuote_Many SingleQuote |
553
|
|
|
|
|
|
|
| SingleQuote SingleQuote |
554
|
|
|
|
|
|
|
|
555
|
|
|
|
|
|
|
InterpolString ::= DoubleQuote NonDoubleOrEscapedQuote_Many DoubleQuote |
556
|
|
|
|
|
|
|
| DoubleQuote DoubleQuote |
557
|
|
|
|
|
|
|
|
558
|
|
|
|
|
|
|
ArrowRHS ::= ArrowDerefCall |
559
|
|
|
|
|
|
|
| ArrowDerefVariable |
560
|
|
|
|
|
|
|
| ArrowMethodCall |
561
|
|
|
|
|
|
|
| ArrowIndirectCall |
562
|
|
|
|
|
|
|
| ElemSeq1 |
563
|
|
|
|
|
|
|
| VarScalar |
564
|
|
|
|
|
|
|
| VarDefaultArg |
565
|
|
|
|
|
|
|
|
566
|
|
|
|
|
|
|
ArrowDerefCall ::= CallArgs |
567
|
|
|
|
|
|
|
ArrowDerefVariable ::= DerefVariableArgsAll |
568
|
|
|
|
|
|
|
| DerefVariableSlice |
569
|
|
|
|
|
|
|
ArrowMethodCall ::= SubNameExpr CallArgs |
570
|
|
|
|
|
|
|
| SubNameExpr |
571
|
|
|
|
|
|
|
ArrowIndirectCall ::= SigilScalar VarIdentExpr CallArgs |
572
|
|
|
|
|
|
|
|
573
|
|
|
|
|
|
|
DerefVariableArgsAll ::= '$*' | '@*' | '%*' | '&*' | '**' | '$#*' |
574
|
|
|
|
|
|
|
|
575
|
|
|
|
|
|
|
DerefVariableSlice ::= '@[' Expression ']' |
576
|
|
|
|
|
|
|
| '@{' Expression '}' |
577
|
|
|
|
|
|
|
| '%[' Expression ']' |
578
|
|
|
|
|
|
|
| '%{' Expression '}' |
579
|
|
|
|
|
|
|
|
580
|
|
|
|
|
|
|
DerefVariable ::= SigilScalar BlockNonEmpty |
581
|
|
|
|
|
|
|
| SigilArray BlockNonEmpty ElemSeq0 |
582
|
|
|
|
|
|
|
| SigilHash BlockNonEmpty ElemSeq0 |
583
|
|
|
|
|
|
|
| SigilGlob BlockNonEmpty |
584
|
|
|
|
|
|
|
| SigilArrayTop BlockNonEmpty |
585
|
|
|
|
|
|
|
|
586
|
|
|
|
|
|
|
OpNullaryKeywordExpr ::= |
587
|
|
|
|
|
|
|
OpKeywordBreakExpr |
588
|
|
|
|
|
|
|
| OpKeywordForkExpr |
589
|
|
|
|
|
|
|
| OpKeywordGetloginExpr |
590
|
|
|
|
|
|
|
| OpKeywordGetppidExpr |
591
|
|
|
|
|
|
|
| OpKeywordGetpwentExpr |
592
|
|
|
|
|
|
|
| OpKeywordGetgrentExpr |
593
|
|
|
|
|
|
|
| OpKeywordGethostentExpr |
594
|
|
|
|
|
|
|
| OpKeywordGetnetentExpr |
595
|
|
|
|
|
|
|
| OpKeywordGetprotoentExpr |
596
|
|
|
|
|
|
|
| OpKeywordGetserventExpr |
597
|
|
|
|
|
|
|
| OpKeywordSetpwentExpr |
598
|
|
|
|
|
|
|
| OpKeywordSetgrentExpr |
599
|
|
|
|
|
|
|
| OpKeywordEndpwentExpr |
600
|
|
|
|
|
|
|
| OpKeywordEndgrentExpr |
601
|
|
|
|
|
|
|
| OpKeywordEndhostentExpr |
602
|
|
|
|
|
|
|
| OpKeywordEndnetentExpr |
603
|
|
|
|
|
|
|
| OpKeywordEndprotoentExpr |
604
|
|
|
|
|
|
|
| OpKeywordEndserventExpr |
605
|
|
|
|
|
|
|
| OpKeywordEvalExpr |
606
|
|
|
|
|
|
|
| OpKeywordSubExpr |
607
|
|
|
|
|
|
|
| OpKeywordTimeExpr |
608
|
|
|
|
|
|
|
| OpKeywordTimesExpr |
609
|
|
|
|
|
|
|
| OpKeywordWaitExpr |
610
|
|
|
|
|
|
|
| OpKeywordWantarrayExpr |
611
|
|
|
|
|
|
|
|
612
|
|
|
|
|
|
|
# Unary keyword operators: |
613
|
|
|
|
|
|
|
# abs $a, $b => ((abs $a), $b) |
614
|
|
|
|
|
|
|
# abs $a = $b => ((abs $a) = $b) |
615
|
|
|
|
|
|
|
# List keyword operators: |
616
|
|
|
|
|
|
|
# push $a, $b => (push ($a, $b)) |
617
|
|
|
|
|
|
|
# push $a = $b => (push ($a = $b)) |
618
|
|
|
|
|
|
|
# Assign keyword operators: |
619
|
|
|
|
|
|
|
# goto $a, $b => ((goto $a), $b) |
620
|
|
|
|
|
|
|
# goto $a = $b => (goto ($a = $b)) |
621
|
|
|
|
|
|
|
|
622
|
|
|
|
|
|
|
OpUnaryKeywordExpr ::= |
623
|
|
|
|
|
|
|
OpKeywordAbsExpr |
624
|
|
|
|
|
|
|
| OpKeywordAlarmExpr |
625
|
|
|
|
|
|
|
| OpKeywordCallerExpr |
626
|
|
|
|
|
|
|
| OpKeywordChdirExpr |
627
|
|
|
|
|
|
|
| OpKeywordChompExpr |
628
|
|
|
|
|
|
|
| OpKeywordChopExpr |
629
|
|
|
|
|
|
|
| OpKeywordChrExpr |
630
|
|
|
|
|
|
|
| OpKeywordChrootExpr |
631
|
|
|
|
|
|
|
| OpKeywordCloseExpr |
632
|
|
|
|
|
|
|
| OpKeywordClosedirExpr |
633
|
|
|
|
|
|
|
| OpKeywordCosExpr |
634
|
|
|
|
|
|
|
| OpKeywordDbmcloseExpr |
635
|
|
|
|
|
|
|
| OpKeywordDefinedExpr |
636
|
|
|
|
|
|
|
| OpKeywordDeleteExpr |
637
|
|
|
|
|
|
|
| OpKeywordDoExpr |
638
|
|
|
|
|
|
|
| OpKeywordEachExpr |
639
|
|
|
|
|
|
|
| OpKeywordEofExpr |
640
|
|
|
|
|
|
|
| OpKeywordEvalbytesExpr |
641
|
|
|
|
|
|
|
| OpKeywordExistsExpr |
642
|
|
|
|
|
|
|
| OpKeywordExitExpr |
643
|
|
|
|
|
|
|
| OpKeywordExpExpr |
644
|
|
|
|
|
|
|
| OpKeywordFcExpr |
645
|
|
|
|
|
|
|
| OpKeywordFilenoExpr |
646
|
|
|
|
|
|
|
| OpKeywordGetcExpr |
647
|
|
|
|
|
|
|
| OpKeywordGetpeernameExpr |
648
|
|
|
|
|
|
|
| OpKeywordGetpgrpExpr |
649
|
|
|
|
|
|
|
| OpKeywordGetpwnamExpr |
650
|
|
|
|
|
|
|
| OpKeywordGetgrnamExpr |
651
|
|
|
|
|
|
|
| OpKeywordGethostbynameExpr |
652
|
|
|
|
|
|
|
| OpKeywordGetnetbynameExpr |
653
|
|
|
|
|
|
|
| OpKeywordGetprotobynameExpr |
654
|
|
|
|
|
|
|
| OpKeywordGetpwuidExpr |
655
|
|
|
|
|
|
|
| OpKeywordGetgrgidExpr |
656
|
|
|
|
|
|
|
| OpKeywordGetprotobynumberExpr |
657
|
|
|
|
|
|
|
| OpKeywordSethostentExpr |
658
|
|
|
|
|
|
|
| OpKeywordSetnetentExpr |
659
|
|
|
|
|
|
|
| OpKeywordSetprotoentExpr |
660
|
|
|
|
|
|
|
| OpKeywordSetserventExpr |
661
|
|
|
|
|
|
|
| OpKeywordGetsocknameExpr |
662
|
|
|
|
|
|
|
| OpKeywordGmtimeExpr |
663
|
|
|
|
|
|
|
| OpKeywordHexExpr |
664
|
|
|
|
|
|
|
| OpKeywordIntExpr |
665
|
|
|
|
|
|
|
| OpKeywordKeysExpr |
666
|
|
|
|
|
|
|
| OpKeywordLcExpr |
667
|
|
|
|
|
|
|
| OpKeywordLcfirstExpr |
668
|
|
|
|
|
|
|
| OpKeywordLengthExpr |
669
|
|
|
|
|
|
|
| OpKeywordLocaltimeExpr |
670
|
|
|
|
|
|
|
| OpKeywordLockExpr |
671
|
|
|
|
|
|
|
| OpKeywordLogExpr |
672
|
|
|
|
|
|
|
| OpKeywordLstatExpr |
673
|
|
|
|
|
|
|
| OpKeywordOctExpr |
674
|
|
|
|
|
|
|
| OpKeywordOrdExpr |
675
|
|
|
|
|
|
|
| OpKeywordPopExpr |
676
|
|
|
|
|
|
|
| OpKeywordPosExpr |
677
|
|
|
|
|
|
|
| OpKeywordPrototypeExpr |
678
|
|
|
|
|
|
|
| OpKeywordQuotemetaExpr |
679
|
|
|
|
|
|
|
| OpKeywordRandExpr |
680
|
|
|
|
|
|
|
| OpKeywordReaddirExpr |
681
|
|
|
|
|
|
|
| OpKeywordReadlineExpr |
682
|
|
|
|
|
|
|
| OpKeywordReadlinkExpr |
683
|
|
|
|
|
|
|
| OpKeywordReadpipeExpr |
684
|
|
|
|
|
|
|
| OpKeywordRefExpr |
685
|
|
|
|
|
|
|
| OpKeywordResetExpr |
686
|
|
|
|
|
|
|
| OpKeywordRewinddirExpr |
687
|
|
|
|
|
|
|
| OpKeywordRmdirExpr |
688
|
|
|
|
|
|
|
| OpKeywordScalarExpr |
689
|
|
|
|
|
|
|
| OpKeywordShiftExpr |
690
|
|
|
|
|
|
|
| OpKeywordSinExpr |
691
|
|
|
|
|
|
|
| OpKeywordSleepExpr |
692
|
|
|
|
|
|
|
| OpKeywordSqrtExpr |
693
|
|
|
|
|
|
|
| OpKeywordSrandExpr |
694
|
|
|
|
|
|
|
| OpKeywordStatExpr |
695
|
|
|
|
|
|
|
| OpKeywordStudyExpr |
696
|
|
|
|
|
|
|
| OpKeywordTellExpr |
697
|
|
|
|
|
|
|
| OpKeywordTelldirExpr |
698
|
|
|
|
|
|
|
| OpKeywordTiedExpr |
699
|
|
|
|
|
|
|
| OpKeywordUcExpr |
700
|
|
|
|
|
|
|
| OpKeywordUcfirstExpr |
701
|
|
|
|
|
|
|
| OpKeywordUmaskExpr |
702
|
|
|
|
|
|
|
| OpKeywordUndefExpr |
703
|
|
|
|
|
|
|
| OpKeywordUnlinkExpr |
704
|
|
|
|
|
|
|
| OpKeywordUntieExpr |
705
|
|
|
|
|
|
|
| OpKeywordUtimeExpr |
706
|
|
|
|
|
|
|
| OpKeywordValuesExpr |
707
|
|
|
|
|
|
|
| OpFileExpr |
708
|
|
|
|
|
|
|
|
709
|
|
|
|
|
|
|
OpListKeywordExpr ::= |
710
|
|
|
|
|
|
|
OpKeywordAcceptExpr |
711
|
|
|
|
|
|
|
| OpKeywordAtan2Expr |
712
|
|
|
|
|
|
|
| OpKeywordBindExpr |
713
|
|
|
|
|
|
|
| OpKeywordBinmodeExpr |
714
|
|
|
|
|
|
|
| OpKeywordBlessExpr |
715
|
|
|
|
|
|
|
| OpKeywordChmodExpr |
716
|
|
|
|
|
|
|
| OpKeywordChownExpr |
717
|
|
|
|
|
|
|
| OpKeywordConnectExpr |
718
|
|
|
|
|
|
|
| OpKeywordCryptExpr |
719
|
|
|
|
|
|
|
| OpKeywordDbmopenExpr |
720
|
|
|
|
|
|
|
| OpKeywordDieExpr |
721
|
|
|
|
|
|
|
| OpKeywordFcntlExpr |
722
|
|
|
|
|
|
|
| OpKeywordFlockExpr |
723
|
|
|
|
|
|
|
| OpKeywordGetpriorityExpr |
724
|
|
|
|
|
|
|
| OpKeywordGetservbynameExpr |
725
|
|
|
|
|
|
|
| OpKeywordGethostbyaddrExpr |
726
|
|
|
|
|
|
|
| OpKeywordGetnetbyaddrExpr |
727
|
|
|
|
|
|
|
| OpKeywordGetservbyportExpr |
728
|
|
|
|
|
|
|
| OpKeywordExecExpr |
729
|
|
|
|
|
|
|
| OpKeywordGetsockoptExpr |
730
|
|
|
|
|
|
|
| OpKeywordGlobExpr |
731
|
|
|
|
|
|
|
| OpKeywordGrepExpr |
732
|
|
|
|
|
|
|
| OpKeywordIndexExpr |
733
|
|
|
|
|
|
|
| OpKeywordIoctlExpr |
734
|
|
|
|
|
|
|
| OpKeywordJoinExpr |
735
|
|
|
|
|
|
|
| OpKeywordKillExpr |
736
|
|
|
|
|
|
|
| OpKeywordLinkExpr |
737
|
|
|
|
|
|
|
| OpKeywordListenExpr |
738
|
|
|
|
|
|
|
| OpKeywordMapExpr |
739
|
|
|
|
|
|
|
| OpKeywordMkdirExpr |
740
|
|
|
|
|
|
|
| OpKeywordMsgctlExpr |
741
|
|
|
|
|
|
|
| OpKeywordMsggetExpr |
742
|
|
|
|
|
|
|
| OpKeywordMsgrcvExpr |
743
|
|
|
|
|
|
|
| OpKeywordMsgsndExpr |
744
|
|
|
|
|
|
|
| OpKeywordOpenExpr |
745
|
|
|
|
|
|
|
| OpKeywordOpendirExpr |
746
|
|
|
|
|
|
|
| OpKeywordPackExpr |
747
|
|
|
|
|
|
|
| OpKeywordPipeExpr |
748
|
|
|
|
|
|
|
| OpKeywordPrintExpr |
749
|
|
|
|
|
|
|
| OpKeywordPrintfExpr |
750
|
|
|
|
|
|
|
| OpKeywordPushExpr |
751
|
|
|
|
|
|
|
| OpKeywordReadExpr |
752
|
|
|
|
|
|
|
| OpKeywordRecvExpr |
753
|
|
|
|
|
|
|
| OpKeywordRenameExpr |
754
|
|
|
|
|
|
|
| OpKeywordReturnExpr |
755
|
|
|
|
|
|
|
| OpKeywordReverseExpr |
756
|
|
|
|
|
|
|
| OpKeywordRindexExpr |
757
|
|
|
|
|
|
|
| OpKeywordSayExpr |
758
|
|
|
|
|
|
|
| OpKeywordSeekExpr |
759
|
|
|
|
|
|
|
| OpKeywordSeekdirExpr |
760
|
|
|
|
|
|
|
| OpKeywordSelectExpr |
761
|
|
|
|
|
|
|
| OpKeywordSemctlExpr |
762
|
|
|
|
|
|
|
| OpKeywordSemgetExpr |
763
|
|
|
|
|
|
|
| OpKeywordSemopExpr |
764
|
|
|
|
|
|
|
| OpKeywordSendExpr |
765
|
|
|
|
|
|
|
| OpKeywordSetpgrpExpr |
766
|
|
|
|
|
|
|
| OpKeywordSetpriorityExpr |
767
|
|
|
|
|
|
|
| OpKeywordSetsockoptExpr |
768
|
|
|
|
|
|
|
| OpKeywordShmctlExpr |
769
|
|
|
|
|
|
|
| OpKeywordShmgetExpr |
770
|
|
|
|
|
|
|
| OpKeywordShmreadExpr |
771
|
|
|
|
|
|
|
| OpKeywordShmwriteExpr |
772
|
|
|
|
|
|
|
| OpKeywordShutdownExpr |
773
|
|
|
|
|
|
|
| OpKeywordSocketExpr |
774
|
|
|
|
|
|
|
| OpKeywordSocketpairExpr |
775
|
|
|
|
|
|
|
| OpKeywordSortExpr |
776
|
|
|
|
|
|
|
| OpKeywordSpliceExpr |
777
|
|
|
|
|
|
|
| OpKeywordSplitExpr |
778
|
|
|
|
|
|
|
| OpKeywordSprintfExpr |
779
|
|
|
|
|
|
|
| OpKeywordSubstrExpr |
780
|
|
|
|
|
|
|
| OpKeywordSymlinkExpr |
781
|
|
|
|
|
|
|
| OpKeywordSyscallExpr |
782
|
|
|
|
|
|
|
| OpKeywordSysopenExpr |
783
|
|
|
|
|
|
|
| OpKeywordSysreadExpr |
784
|
|
|
|
|
|
|
| OpKeywordSysseekExpr |
785
|
|
|
|
|
|
|
| OpKeywordSyswriteExpr |
786
|
|
|
|
|
|
|
| OpKeywordSystemExpr |
787
|
|
|
|
|
|
|
| OpKeywordTieExpr |
788
|
|
|
|
|
|
|
| OpKeywordTruncateExpr |
789
|
|
|
|
|
|
|
| OpKeywordUnpackExpr |
790
|
|
|
|
|
|
|
| OpKeywordUnshiftExpr |
791
|
|
|
|
|
|
|
| OpKeywordVecExpr |
792
|
|
|
|
|
|
|
| OpKeywordWaitpidExpr |
793
|
|
|
|
|
|
|
| OpKeywordWarnExpr |
794
|
|
|
|
|
|
|
| OpKeywordWriteExpr |
795
|
|
|
|
|
|
|
|
796
|
|
|
|
|
|
|
OpAssignKeywordExpr ::= |
797
|
|
|
|
|
|
|
OpKeywordDumpExpr |
798
|
|
|
|
|
|
|
| OpKeywordGotoExpr |
799
|
|
|
|
|
|
|
| OpKeywordLastExpr |
800
|
|
|
|
|
|
|
| OpKeywordNextExpr |
801
|
|
|
|
|
|
|
| OpKeywordRedoExpr |
802
|
|
|
|
|
|
|
|
803
|
|
|
|
|
|
|
OpKeywordAbsExpr ::= OpKeywordAbs OpUnaryKeywordArg |
804
|
|
|
|
|
|
|
| OpKeywordAbs |
805
|
|
|
|
|
|
|
|
806
|
|
|
|
|
|
|
OpKeywordAcceptExpr ::= OpKeywordAccept OpListKeywordArg |
807
|
|
|
|
|
|
|
|
808
|
|
|
|
|
|
|
OpKeywordAlarmExpr ::= OpKeywordAlarm OpUnaryKeywordArg |
809
|
|
|
|
|
|
|
| OpKeywordAlarm |
810
|
|
|
|
|
|
|
|
811
|
|
|
|
|
|
|
OpKeywordAtan2Expr ::= OpKeywordAtan2 OpListKeywordArg |
812
|
|
|
|
|
|
|
|
813
|
|
|
|
|
|
|
OpKeywordBindExpr ::= OpKeywordBind OpListKeywordArg |
814
|
|
|
|
|
|
|
|
815
|
|
|
|
|
|
|
OpKeywordBinmodeExpr ::= OpKeywordBinmode OpListKeywordArg |
816
|
|
|
|
|
|
|
| OpKeywordBinmode LParen BuiltinFilehandle RParen |
817
|
|
|
|
|
|
|
| OpKeywordBinmode BuiltinFilehandle |
818
|
|
|
|
|
|
|
| OpKeywordBinmode LParen BuiltinFilehandle OpComma ExprAssignR RParen |
819
|
|
|
|
|
|
|
| OpKeywordBinmode BuiltinFilehandle OpComma ExprAssignR |
820
|
|
|
|
|
|
|
|
821
|
|
|
|
|
|
|
OpKeywordBlessExpr ::= OpKeywordBless OpListKeywordArg |
822
|
|
|
|
|
|
|
|
823
|
|
|
|
|
|
|
OpKeywordBreakExpr ::= OpKeywordBreak Label |
824
|
|
|
|
|
|
|
| OpKeywordBreak |
825
|
|
|
|
|
|
|
|
826
|
|
|
|
|
|
|
OpKeywordCallerExpr ::= OpKeywordCaller OpUnaryKeywordArg |
827
|
|
|
|
|
|
|
| OpKeywordCaller |
828
|
|
|
|
|
|
|
|
829
|
|
|
|
|
|
|
OpKeywordChdirExpr ::= OpKeywordChdir OpUnaryKeywordArg |
830
|
|
|
|
|
|
|
| OpKeywordChdir |
831
|
|
|
|
|
|
|
|
832
|
|
|
|
|
|
|
OpKeywordChmodExpr ::= OpKeywordChmod OpListKeywordArg |
833
|
|
|
|
|
|
|
|
834
|
|
|
|
|
|
|
OpKeywordChompExpr ::= OpKeywordChomp OpUnaryKeywordArg |
835
|
|
|
|
|
|
|
| OpKeywordChomp |
836
|
|
|
|
|
|
|
|
837
|
|
|
|
|
|
|
OpKeywordChopExpr ::= OpKeywordChop OpUnaryKeywordArg |
838
|
|
|
|
|
|
|
| OpKeywordChop |
839
|
|
|
|
|
|
|
|
840
|
|
|
|
|
|
|
OpKeywordChownExpr ::= OpKeywordChown OpListKeywordArg |
841
|
|
|
|
|
|
|
|
842
|
|
|
|
|
|
|
OpKeywordChrExpr ::= OpKeywordChr OpUnaryKeywordArg |
843
|
|
|
|
|
|
|
| OpKeywordChr |
844
|
|
|
|
|
|
|
|
845
|
|
|
|
|
|
|
OpKeywordChrootExpr ::= OpKeywordChroot OpUnaryKeywordArg |
846
|
|
|
|
|
|
|
| OpKeywordChroot |
847
|
|
|
|
|
|
|
|
848
|
|
|
|
|
|
|
OpKeywordCloseExpr ::= OpKeywordClose OpUnaryKeywordArg |
849
|
|
|
|
|
|
|
| OpKeywordClose |
850
|
|
|
|
|
|
|
|
851
|
|
|
|
|
|
|
OpKeywordClosedirExpr ::= OpKeywordClosedir OpUnaryKeywordArg |
852
|
|
|
|
|
|
|
|
853
|
|
|
|
|
|
|
OpKeywordConnectExpr ::= OpKeywordConnect OpListKeywordArg |
854
|
|
|
|
|
|
|
|
855
|
|
|
|
|
|
|
OpKeywordCosExpr ::= OpKeywordCos OpUnaryKeywordArg |
856
|
|
|
|
|
|
|
|
857
|
|
|
|
|
|
|
OpKeywordCryptExpr ::= OpKeywordCrypt OpListKeywordArg |
858
|
|
|
|
|
|
|
|
859
|
|
|
|
|
|
|
OpKeywordDbmcloseExpr ::= OpKeywordDbmclose OpUnaryKeywordArg |
860
|
|
|
|
|
|
|
|
861
|
|
|
|
|
|
|
OpKeywordDbmopenExpr ::= OpKeywordDbmopen OpListKeywordArg |
862
|
|
|
|
|
|
|
|
863
|
|
|
|
|
|
|
OpKeywordDefinedExpr ::= OpKeywordDefined OpUnaryKeywordArg |
864
|
|
|
|
|
|
|
| OpKeywordDefined |
865
|
|
|
|
|
|
|
|
866
|
|
|
|
|
|
|
OpKeywordDeleteExpr ::= OpKeywordDelete OpUnaryKeywordArg |
867
|
|
|
|
|
|
|
|
868
|
|
|
|
|
|
|
OpKeywordDieExpr ::= OpKeywordDie OpListKeywordArg |
869
|
|
|
|
|
|
|
| OpKeywordDie |
870
|
|
|
|
|
|
|
|
871
|
|
|
|
|
|
|
OpKeywordDoExpr ::= OpKeywordDo BlockNonEmpty |
872
|
|
|
|
|
|
|
| OpKeywordDo OpUnaryKeywordArgNonBrace |
873
|
|
|
|
|
|
|
|
874
|
|
|
|
|
|
|
OpKeywordDumpExpr ::= OpKeywordDump OpAssignKeywordArg |
875
|
|
|
|
|
|
|
| OpKeywordDump Label |
876
|
|
|
|
|
|
|
| OpKeywordDump |
877
|
|
|
|
|
|
|
|
878
|
|
|
|
|
|
|
OpKeywordEachExpr ::= OpKeywordEach OpUnaryKeywordArg |
879
|
|
|
|
|
|
|
|
880
|
|
|
|
|
|
|
OpKeywordEofExpr ::= OpKeywordEof OpUnaryKeywordArg |
881
|
|
|
|
|
|
|
| OpKeywordEof |
882
|
|
|
|
|
|
|
|
883
|
|
|
|
|
|
|
OpKeywordEvalExpr ::= OpKeywordEval BlockNonEmpty |
884
|
|
|
|
|
|
|
| OpKeywordEval Value |
885
|
|
|
|
|
|
|
|
886
|
|
|
|
|
|
|
OpKeywordEvalbytesExpr ::= OpKeywordEvalbytes OpUnaryKeywordArg |
887
|
|
|
|
|
|
|
| OpKeywordEvalbytes |
888
|
|
|
|
|
|
|
|
889
|
|
|
|
|
|
|
OpKeywordExistsExpr ::= OpKeywordExists OpUnaryKeywordArg |
890
|
|
|
|
|
|
|
|
891
|
|
|
|
|
|
|
OpKeywordExitExpr ::= OpKeywordExit OpUnaryKeywordArg |
892
|
|
|
|
|
|
|
| OpKeywordExit |
893
|
|
|
|
|
|
|
|
894
|
|
|
|
|
|
|
OpKeywordExpExpr ::= OpKeywordExp OpUnaryKeywordArg |
895
|
|
|
|
|
|
|
| OpKeywordExp |
896
|
|
|
|
|
|
|
|
897
|
|
|
|
|
|
|
OpKeywordFcExpr ::= OpKeywordFc OpUnaryKeywordArg |
898
|
|
|
|
|
|
|
| OpKeywordFc |
899
|
|
|
|
|
|
|
|
900
|
|
|
|
|
|
|
OpKeywordFcntlExpr ::= OpKeywordFcntl OpListKeywordArg |
901
|
|
|
|
|
|
|
|
902
|
|
|
|
|
|
|
OpKeywordFilenoExpr ::= OpKeywordFileno OpUnaryKeywordArg |
903
|
|
|
|
|
|
|
|
904
|
|
|
|
|
|
|
OpKeywordFlockExpr ::= OpKeywordFlock OpListKeywordArg |
905
|
|
|
|
|
|
|
|
906
|
|
|
|
|
|
|
OpKeywordForkExpr ::= OpKeywordFork LParen RParen |
907
|
|
|
|
|
|
|
| OpKeywordFork |
908
|
|
|
|
|
|
|
|
909
|
|
|
|
|
|
|
OpKeywordGetcExpr ::= OpKeywordGetc OpUnaryKeywordArg |
910
|
|
|
|
|
|
|
| OpKeywordGetc |
911
|
|
|
|
|
|
|
|
912
|
|
|
|
|
|
|
OpKeywordGetloginExpr ::= OpKeywordGetlogin LParen RParen |
913
|
|
|
|
|
|
|
| OpKeywordGetlogin |
914
|
|
|
|
|
|
|
|
915
|
|
|
|
|
|
|
OpKeywordGetpeernameExpr ::= OpKeywordGetpeername OpUnaryKeywordArg |
916
|
|
|
|
|
|
|
|
917
|
|
|
|
|
|
|
OpKeywordGetpgrpExpr ::= OpKeywordGetpgrp OpUnaryKeywordArg |
918
|
|
|
|
|
|
|
|
919
|
|
|
|
|
|
|
OpKeywordGetppidExpr ::= OpKeywordGetppid LParen RParen |
920
|
|
|
|
|
|
|
| OpKeywordGetppid |
921
|
|
|
|
|
|
|
|
922
|
|
|
|
|
|
|
OpKeywordGetpriorityExpr ::= OpKeywordGetpriority OpListKeywordArg |
923
|
|
|
|
|
|
|
|
924
|
|
|
|
|
|
|
OpKeywordGetpwnamExpr ::= OpKeywordGetpwnam OpUnaryKeywordArg |
925
|
|
|
|
|
|
|
|
926
|
|
|
|
|
|
|
OpKeywordGetgrnamExpr ::= OpKeywordGetgrnam OpUnaryKeywordArg |
927
|
|
|
|
|
|
|
|
928
|
|
|
|
|
|
|
OpKeywordGethostbynameExpr ::= OpKeywordGethostbyname OpUnaryKeywordArg |
929
|
|
|
|
|
|
|
|
930
|
|
|
|
|
|
|
OpKeywordGetnetbynameExpr ::= OpKeywordGetnetbyname OpUnaryKeywordArg |
931
|
|
|
|
|
|
|
|
932
|
|
|
|
|
|
|
OpKeywordGetprotobynameExpr ::= OpKeywordGetprotobyname OpUnaryKeywordArg |
933
|
|
|
|
|
|
|
|
934
|
|
|
|
|
|
|
OpKeywordGetpwuidExpr ::= OpKeywordGetpwuid OpUnaryKeywordArg |
935
|
|
|
|
|
|
|
|
936
|
|
|
|
|
|
|
OpKeywordGetgrgidExpr ::= OpKeywordGetgrgid OpUnaryKeywordArg |
937
|
|
|
|
|
|
|
|
938
|
|
|
|
|
|
|
OpKeywordGetservbynameExpr ::= OpKeywordGetservbyname OpListKeywordArg |
939
|
|
|
|
|
|
|
|
940
|
|
|
|
|
|
|
OpKeywordGethostbyaddrExpr ::= OpKeywordGethostbyaddr OpListKeywordArg |
941
|
|
|
|
|
|
|
|
942
|
|
|
|
|
|
|
OpKeywordGetnetbyaddrExpr ::= OpKeywordGetnetbyaddr OpListKeywordArg |
943
|
|
|
|
|
|
|
|
944
|
|
|
|
|
|
|
OpKeywordGetprotobynumberExpr ::= OpKeywordGetprotobynumber OpUnaryKeywordArg |
945
|
|
|
|
|
|
|
|
946
|
|
|
|
|
|
|
OpKeywordGetservbyportExpr ::= OpKeywordGetservbyport OpListKeywordArg |
947
|
|
|
|
|
|
|
|
948
|
|
|
|
|
|
|
OpKeywordGetpwentExpr ::= OpKeywordGetpwent LParen RParen |
949
|
|
|
|
|
|
|
| OpKeywordGetpwent |
950
|
|
|
|
|
|
|
|
951
|
|
|
|
|
|
|
OpKeywordGetgrentExpr ::= OpKeywordGetgrent LParen RParen |
952
|
|
|
|
|
|
|
| OpKeywordGetgrent |
953
|
|
|
|
|
|
|
|
954
|
|
|
|
|
|
|
OpKeywordGethostentExpr ::= OpKeywordGethostent LParen RParen |
955
|
|
|
|
|
|
|
| OpKeywordGethostent |
956
|
|
|
|
|
|
|
|
957
|
|
|
|
|
|
|
OpKeywordGetnetentExpr ::= OpKeywordGetnetent LParen RParen |
958
|
|
|
|
|
|
|
| OpKeywordGetnetent |
959
|
|
|
|
|
|
|
|
960
|
|
|
|
|
|
|
OpKeywordGetprotoentExpr ::= OpKeywordGetprotoent LParen RParen |
961
|
|
|
|
|
|
|
| OpKeywordGetprotoent |
962
|
|
|
|
|
|
|
|
963
|
|
|
|
|
|
|
OpKeywordGetserventExpr ::= OpKeywordGetservent LParen RParen |
964
|
|
|
|
|
|
|
| OpKeywordGetservent |
965
|
|
|
|
|
|
|
|
966
|
|
|
|
|
|
|
OpKeywordSetpwentExpr ::= OpKeywordSetpwent LParen RParen |
967
|
|
|
|
|
|
|
| OpKeywordSetpwent |
968
|
|
|
|
|
|
|
|
969
|
|
|
|
|
|
|
OpKeywordSetgrentExpr ::= OpKeywordSetgrent LParen RParen |
970
|
|
|
|
|
|
|
| OpKeywordSetgrent |
971
|
|
|
|
|
|
|
|
972
|
|
|
|
|
|
|
OpKeywordSethostentExpr ::= OpKeywordSethostent OpUnaryKeywordArg |
973
|
|
|
|
|
|
|
|
974
|
|
|
|
|
|
|
OpKeywordSetnetentExpr ::= OpKeywordSetnetent OpUnaryKeywordArg |
975
|
|
|
|
|
|
|
|
976
|
|
|
|
|
|
|
OpKeywordSetprotoentExpr ::= OpKeywordSetprotoent OpUnaryKeywordArg |
977
|
|
|
|
|
|
|
|
978
|
|
|
|
|
|
|
OpKeywordSetserventExpr ::= OpKeywordSetservent OpUnaryKeywordArg |
979
|
|
|
|
|
|
|
|
980
|
|
|
|
|
|
|
OpKeywordEndpwentExpr ::= OpKeywordEndpwent LParen RParen |
981
|
|
|
|
|
|
|
| OpKeywordEndpwent |
982
|
|
|
|
|
|
|
|
983
|
|
|
|
|
|
|
OpKeywordEndgrentExpr ::= OpKeywordEndgrent LParen RParen |
984
|
|
|
|
|
|
|
| OpKeywordEndgrent |
985
|
|
|
|
|
|
|
|
986
|
|
|
|
|
|
|
OpKeywordEndhostentExpr ::= OpKeywordEndhostent LParen RParen |
987
|
|
|
|
|
|
|
| OpKeywordEndhostent |
988
|
|
|
|
|
|
|
|
989
|
|
|
|
|
|
|
OpKeywordEndnetentExpr ::= OpKeywordEndnetent LParen RParen |
990
|
|
|
|
|
|
|
| OpKeywordEndnetent |
991
|
|
|
|
|
|
|
|
992
|
|
|
|
|
|
|
OpKeywordEndprotoentExpr ::= OpKeywordEndprotoent LParen RParen |
993
|
|
|
|
|
|
|
| OpKeywordEndprotoent |
994
|
|
|
|
|
|
|
|
995
|
|
|
|
|
|
|
OpKeywordEndserventExpr ::= OpKeywordEndservent LParen RParen |
996
|
|
|
|
|
|
|
| OpKeywordEndservent |
997
|
|
|
|
|
|
|
|
998
|
|
|
|
|
|
|
OpKeywordExecExpr ::= OpKeywordExec BlockNonEmpty OpListKeywordArg |
999
|
|
|
|
|
|
|
| OpKeywordExec OpListKeywordArgNonBrace |
1000
|
|
|
|
|
|
|
|
1001
|
|
|
|
|
|
|
OpKeywordGetsocknameExpr ::= OpKeywordGetsockname OpUnaryKeywordArg |
1002
|
|
|
|
|
|
|
|
1003
|
|
|
|
|
|
|
OpKeywordGetsockoptExpr ::= OpKeywordGetsockopt OpListKeywordArg |
1004
|
|
|
|
|
|
|
|
1005
|
|
|
|
|
|
|
OpKeywordGlobExpr ::= OpKeywordGlob OpListKeywordArg |
1006
|
|
|
|
|
|
|
| OpKeywordGlob |
1007
|
|
|
|
|
|
|
|
1008
|
|
|
|
|
|
|
OpKeywordGmtimeExpr ::= OpKeywordGmtime OpUnaryKeywordArg |
1009
|
|
|
|
|
|
|
| OpKeywordGmtime |
1010
|
|
|
|
|
|
|
|
1011
|
|
|
|
|
|
|
# &NAME is an expression too |
1012
|
|
|
|
|
|
|
OpKeywordGotoExpr ::= OpKeywordGoto OpAssignKeywordArg |
1013
|
|
|
|
|
|
|
| OpKeywordGoto Label |
1014
|
|
|
|
|
|
|
|
1015
|
|
|
|
|
|
|
OpKeywordGrepExpr ::= OpKeywordGrep BlockNonEmpty OpListKeywordArg |
1016
|
|
|
|
|
|
|
| OpKeywordGrep OpListKeywordArgNonBrace |
1017
|
|
|
|
|
|
|
|
1018
|
|
|
|
|
|
|
OpKeywordHexExpr ::= OpKeywordHex OpUnaryKeywordArg |
1019
|
|
|
|
|
|
|
| OpKeywordHex |
1020
|
|
|
|
|
|
|
|
1021
|
|
|
|
|
|
|
OpKeywordIndexExpr ::= OpKeywordIndex OpListKeywordArg |
1022
|
|
|
|
|
|
|
|
1023
|
|
|
|
|
|
|
OpKeywordIntExpr ::= OpKeywordInt OpUnaryKeywordArg |
1024
|
|
|
|
|
|
|
| OpKeywordInt |
1025
|
|
|
|
|
|
|
|
1026
|
|
|
|
|
|
|
OpKeywordIoctlExpr ::= OpKeywordIoctl OpListKeywordArg |
1027
|
|
|
|
|
|
|
|
1028
|
|
|
|
|
|
|
OpKeywordJoinExpr ::= OpKeywordJoin OpListKeywordArg |
1029
|
|
|
|
|
|
|
|
1030
|
|
|
|
|
|
|
OpKeywordKeysExpr ::= OpKeywordKeys OpUnaryKeywordArg |
1031
|
|
|
|
|
|
|
|
1032
|
|
|
|
|
|
|
OpKeywordKillExpr ::= OpKeywordKill OpListKeywordArg |
1033
|
|
|
|
|
|
|
| OpKeywordKill Expression |
1034
|
|
|
|
|
|
|
|
1035
|
|
|
|
|
|
|
OpKeywordLastExpr ::= OpKeywordLast OpAssignKeywordArg |
1036
|
|
|
|
|
|
|
| OpKeywordLast Label |
1037
|
|
|
|
|
|
|
| OpKeywordLast |
1038
|
|
|
|
|
|
|
|
1039
|
|
|
|
|
|
|
OpKeywordLcExpr ::= OpKeywordLc OpUnaryKeywordArg |
1040
|
|
|
|
|
|
|
| OpKeywordLc |
1041
|
|
|
|
|
|
|
|
1042
|
|
|
|
|
|
|
OpKeywordLcfirstExpr ::= OpKeywordLcfirst OpUnaryKeywordArg |
1043
|
|
|
|
|
|
|
| OpKeywordLcfirst |
1044
|
|
|
|
|
|
|
|
1045
|
|
|
|
|
|
|
OpKeywordLengthExpr ::= OpKeywordLength OpUnaryKeywordArg |
1046
|
|
|
|
|
|
|
| OpKeywordLength |
1047
|
|
|
|
|
|
|
|
1048
|
|
|
|
|
|
|
OpKeywordLinkExpr ::= OpKeywordLink OpListKeywordArg |
1049
|
|
|
|
|
|
|
|
1050
|
|
|
|
|
|
|
OpKeywordListenExpr ::= OpKeywordListen OpListKeywordArg |
1051
|
|
|
|
|
|
|
|
1052
|
|
|
|
|
|
|
OpKeywordLocaltimeExpr ::= OpKeywordLocaltime OpUnaryKeywordArg |
1053
|
|
|
|
|
|
|
| OpKeywordLocaltime |
1054
|
|
|
|
|
|
|
|
1055
|
|
|
|
|
|
|
OpKeywordLockExpr ::= OpKeywordLock OpUnaryKeywordArg |
1056
|
|
|
|
|
|
|
|
1057
|
|
|
|
|
|
|
OpKeywordLogExpr ::= OpKeywordLog OpUnaryKeywordArg |
1058
|
|
|
|
|
|
|
| OpKeywordLog |
1059
|
|
|
|
|
|
|
|
1060
|
|
|
|
|
|
|
OpKeywordLstatExpr ::= OpKeywordLstat OpUnaryKeywordArg |
1061
|
|
|
|
|
|
|
| OpKeywordLstat |
1062
|
|
|
|
|
|
|
|
1063
|
|
|
|
|
|
|
OpKeywordMapExpr ::= OpKeywordMap BlockNonEmpty OpListKeywordArg |
1064
|
|
|
|
|
|
|
| OpKeywordMap OpListKeywordArgNonBrace |
1065
|
|
|
|
|
|
|
|
1066
|
|
|
|
|
|
|
OpKeywordMkdirExpr ::= OpKeywordMkdir OpListKeywordArg |
1067
|
|
|
|
|
|
|
| OpKeywordMkdir |
1068
|
|
|
|
|
|
|
|
1069
|
|
|
|
|
|
|
OpKeywordMsgctlExpr ::= OpKeywordMsgctl OpListKeywordArg |
1070
|
|
|
|
|
|
|
|
1071
|
|
|
|
|
|
|
OpKeywordMsggetExpr ::= OpKeywordMsgget OpListKeywordArg |
1072
|
|
|
|
|
|
|
|
1073
|
|
|
|
|
|
|
OpKeywordMsgrcvExpr ::= OpKeywordMsgrcv OpListKeywordArg |
1074
|
|
|
|
|
|
|
|
1075
|
|
|
|
|
|
|
OpKeywordMsgsndExpr ::= OpKeywordMsgsnd OpListKeywordArg |
1076
|
|
|
|
|
|
|
|
1077
|
|
|
|
|
|
|
OpKeywordNextExpr ::= OpKeywordNext OpAssignKeywordArg |
1078
|
|
|
|
|
|
|
| OpKeywordNext Label |
1079
|
|
|
|
|
|
|
| OpKeywordNext |
1080
|
|
|
|
|
|
|
|
1081
|
|
|
|
|
|
|
OpKeywordOctExpr ::= OpKeywordOct OpUnaryKeywordArg |
1082
|
|
|
|
|
|
|
| OpKeywordOct |
1083
|
|
|
|
|
|
|
|
1084
|
|
|
|
|
|
|
OpKeywordOpenExpr ::= OpKeywordOpen OpListKeywordArg |
1085
|
|
|
|
|
|
|
|
1086
|
|
|
|
|
|
|
OpKeywordOpendirExpr ::= OpKeywordOpendir OpListKeywordArg |
1087
|
|
|
|
|
|
|
|
1088
|
|
|
|
|
|
|
OpKeywordOrdExpr ::= OpKeywordOrd OpUnaryKeywordArg |
1089
|
|
|
|
|
|
|
| OpKeywordOrd |
1090
|
|
|
|
|
|
|
|
1091
|
|
|
|
|
|
|
OpKeywordPackExpr ::= OpKeywordPack OpListKeywordArg |
1092
|
|
|
|
|
|
|
|
1093
|
|
|
|
|
|
|
OpKeywordPipeExpr ::= OpKeywordPipe OpListKeywordArg |
1094
|
|
|
|
|
|
|
|
1095
|
|
|
|
|
|
|
OpKeywordPopExpr ::= OpKeywordPop OpUnaryKeywordArg |
1096
|
|
|
|
|
|
|
| OpKeywordPop |
1097
|
|
|
|
|
|
|
|
1098
|
|
|
|
|
|
|
OpKeywordPosExpr ::= OpKeywordPos OpUnaryKeywordArg |
1099
|
|
|
|
|
|
|
| OpKeywordPos |
1100
|
|
|
|
|
|
|
|
1101
|
|
|
|
|
|
|
OpKeywordPrintExpr ::= OpKeywordPrint BlockNonEmpty OpListKeywordArg |
1102
|
|
|
|
|
|
|
| OpKeywordPrint BuiltinFilehandle OpListKeywordArgNonBrace |
1103
|
|
|
|
|
|
|
| OpKeywordPrint BuiltinFilehandle |
1104
|
|
|
|
|
|
|
| OpKeywordPrint OpListKeywordArgNonBrace |
1105
|
|
|
|
|
|
|
| OpKeywordPrint BlockNonEmpty |
1106
|
|
|
|
|
|
|
| OpKeywordPrint |
1107
|
|
|
|
|
|
|
|
1108
|
|
|
|
|
|
|
OpKeywordPrintfExpr ::= OpKeywordPrintf BlockNonEmpty OpListKeywordArg |
1109
|
|
|
|
|
|
|
| OpKeywordPrintf BuiltinFilehandle OpListKeywordArgNonBrace |
1110
|
|
|
|
|
|
|
| OpKeywordPrintf BuiltinFilehandle |
1111
|
|
|
|
|
|
|
| OpKeywordPrintf OpListKeywordArgNonBrace |
1112
|
|
|
|
|
|
|
| OpKeywordPrintf BlockNonEmpty |
1113
|
|
|
|
|
|
|
|
1114
|
|
|
|
|
|
|
OpKeywordPrototypeExpr ::= OpKeywordPrototype OpUnaryKeywordArg |
1115
|
|
|
|
|
|
|
| OpKeywordPrototype |
1116
|
|
|
|
|
|
|
|
1117
|
|
|
|
|
|
|
OpKeywordPushExpr ::= OpKeywordPush OpListKeywordArg |
1118
|
|
|
|
|
|
|
|
1119
|
|
|
|
|
|
|
OpKeywordQuotemetaExpr ::= OpKeywordQuotemeta OpUnaryKeywordArg |
1120
|
|
|
|
|
|
|
| OpKeywordQuotemeta |
1121
|
|
|
|
|
|
|
|
1122
|
|
|
|
|
|
|
OpKeywordRandExpr ::= OpKeywordRand OpUnaryKeywordArg |
1123
|
|
|
|
|
|
|
| OpKeywordRand |
1124
|
|
|
|
|
|
|
|
1125
|
|
|
|
|
|
|
OpKeywordReadExpr ::= OpKeywordRead OpListKeywordArg |
1126
|
|
|
|
|
|
|
|
1127
|
|
|
|
|
|
|
OpKeywordReaddirExpr ::= OpKeywordReaddir OpUnaryKeywordArg |
1128
|
|
|
|
|
|
|
|
1129
|
|
|
|
|
|
|
OpKeywordReadlineExpr ::= OpKeywordReadline LParen BuiltinFilehandle RParen |
1130
|
|
|
|
|
|
|
| OpKeywordReadline BuiltinFilehandle |
1131
|
|
|
|
|
|
|
| OpKeywordReadline OpUnaryKeywordArg |
1132
|
|
|
|
|
|
|
| OpKeywordReadline |
1133
|
|
|
|
|
|
|
|
1134
|
|
|
|
|
|
|
OpKeywordReadlinkExpr ::= OpKeywordReadlink OpUnaryKeywordArg |
1135
|
|
|
|
|
|
|
| OpKeywordReadlink |
1136
|
|
|
|
|
|
|
|
1137
|
|
|
|
|
|
|
OpKeywordReadpipeExpr ::= OpKeywordReadpipe OpUnaryKeywordArg |
1138
|
|
|
|
|
|
|
| OpKeywordReadpipe |
1139
|
|
|
|
|
|
|
|
1140
|
|
|
|
|
|
|
OpKeywordRecvExpr ::= OpKeywordRecv OpListKeywordArg |
1141
|
|
|
|
|
|
|
|
1142
|
|
|
|
|
|
|
OpKeywordRedoExpr ::= OpKeywordRedo OpAssignKeywordArg |
1143
|
|
|
|
|
|
|
| OpKeywordRedo Label |
1144
|
|
|
|
|
|
|
| OpKeywordRedo |
1145
|
|
|
|
|
|
|
|
1146
|
|
|
|
|
|
|
OpKeywordRefExpr ::= OpKeywordRef OpUnaryKeywordArg |
1147
|
|
|
|
|
|
|
| OpKeywordRef |
1148
|
|
|
|
|
|
|
|
1149
|
|
|
|
|
|
|
OpKeywordRenameExpr ::= OpKeywordRename OpListKeywordArg |
1150
|
|
|
|
|
|
|
|
1151
|
|
|
|
|
|
|
OpKeywordResetExpr ::= OpKeywordReset OpUnaryKeywordArg |
1152
|
|
|
|
|
|
|
| OpKeywordReset |
1153
|
|
|
|
|
|
|
|
1154
|
|
|
|
|
|
|
OpKeywordReturnExpr ::= OpKeywordReturn OpListKeywordArg |
1155
|
|
|
|
|
|
|
| OpKeywordReturn |
1156
|
|
|
|
|
|
|
|
1157
|
|
|
|
|
|
|
OpKeywordReverseExpr ::= OpKeywordReverse OpListKeywordArg |
1158
|
|
|
|
|
|
|
|
1159
|
|
|
|
|
|
|
OpKeywordRewinddirExpr ::= OpKeywordRewinddir OpUnaryKeywordArg |
1160
|
|
|
|
|
|
|
| OpKeywordRewinddir |
1161
|
|
|
|
|
|
|
|
1162
|
|
|
|
|
|
|
OpKeywordRindexExpr ::= OpKeywordRindex OpListKeywordArg |
1163
|
|
|
|
|
|
|
| OpKeywordRindex |
1164
|
|
|
|
|
|
|
|
1165
|
|
|
|
|
|
|
OpKeywordRmdirExpr ::= OpKeywordRmdir OpUnaryKeywordArg |
1166
|
|
|
|
|
|
|
| OpKeywordRmdir |
1167
|
|
|
|
|
|
|
|
1168
|
|
|
|
|
|
|
OpKeywordSayExpr ::= OpKeywordSay BlockNonEmpty OpListKeywordArg |
1169
|
|
|
|
|
|
|
| OpKeywordSay BuiltinFilehandle OpListKeywordArgNonBrace |
1170
|
|
|
|
|
|
|
| OpKeywordSay BuiltinFilehandle |
1171
|
|
|
|
|
|
|
| OpKeywordSay OpListKeywordArgNonBrace |
1172
|
|
|
|
|
|
|
| OpKeywordSay BlockNonEmpty |
1173
|
|
|
|
|
|
|
| OpKeywordSay |
1174
|
|
|
|
|
|
|
|
1175
|
|
|
|
|
|
|
OpKeywordScalarExpr ::= OpKeywordScalar OpUnaryKeywordArg |
1176
|
|
|
|
|
|
|
|
1177
|
|
|
|
|
|
|
OpKeywordSeekExpr ::= OpKeywordSeek OpListKeywordArg |
1178
|
|
|
|
|
|
|
|
1179
|
|
|
|
|
|
|
OpKeywordSeekdirExpr ::= OpKeywordSeekdir OpListKeywordArg |
1180
|
|
|
|
|
|
|
|
1181
|
|
|
|
|
|
|
OpKeywordSelectExpr ::= OpKeywordSelect OpListKeywordArg |
1182
|
|
|
|
|
|
|
|
1183
|
|
|
|
|
|
|
OpKeywordSemctlExpr ::= OpKeywordSemctl OpListKeywordArg |
1184
|
|
|
|
|
|
|
|
1185
|
|
|
|
|
|
|
OpKeywordSemgetExpr ::= OpKeywordSemget OpListKeywordArg |
1186
|
|
|
|
|
|
|
|
1187
|
|
|
|
|
|
|
OpKeywordSemopExpr ::= OpKeywordSemop OpListKeywordArg |
1188
|
|
|
|
|
|
|
|
1189
|
|
|
|
|
|
|
OpKeywordSendExpr ::= OpKeywordSend OpListKeywordArg |
1190
|
|
|
|
|
|
|
|
1191
|
|
|
|
|
|
|
OpKeywordSetpgrpExpr ::= OpKeywordSetpgrp OpListKeywordArg |
1192
|
|
|
|
|
|
|
|
1193
|
|
|
|
|
|
|
OpKeywordSetpriorityExpr ::= OpKeywordSetpriority OpListKeywordArg |
1194
|
|
|
|
|
|
|
|
1195
|
|
|
|
|
|
|
OpKeywordSetsockoptExpr ::= OpKeywordSetsockopt OpListKeywordArg |
1196
|
|
|
|
|
|
|
|
1197
|
|
|
|
|
|
|
OpKeywordShiftExpr ::= OpKeywordShift OpUnaryKeywordArg |
1198
|
|
|
|
|
|
|
| OpKeywordShift |
1199
|
|
|
|
|
|
|
|
1200
|
|
|
|
|
|
|
OpKeywordShmctlExpr ::= OpKeywordShmctl OpListKeywordArg |
1201
|
|
|
|
|
|
|
|
1202
|
|
|
|
|
|
|
OpKeywordShmgetExpr ::= OpKeywordShmget OpListKeywordArg |
1203
|
|
|
|
|
|
|
|
1204
|
|
|
|
|
|
|
OpKeywordShmreadExpr ::= OpKeywordShmread OpListKeywordArg |
1205
|
|
|
|
|
|
|
|
1206
|
|
|
|
|
|
|
OpKeywordShmwriteExpr ::= OpKeywordShmwrite OpListKeywordArg |
1207
|
|
|
|
|
|
|
|
1208
|
|
|
|
|
|
|
OpKeywordShutdownExpr ::= OpKeywordShutdown OpListKeywordArg |
1209
|
|
|
|
|
|
|
|
1210
|
|
|
|
|
|
|
OpKeywordSinExpr ::= OpKeywordSin OpUnaryKeywordArg |
1211
|
|
|
|
|
|
|
| OpKeywordSin |
1212
|
|
|
|
|
|
|
|
1213
|
|
|
|
|
|
|
OpKeywordSleepExpr ::= OpKeywordSleep OpUnaryKeywordArg |
1214
|
|
|
|
|
|
|
| OpKeywordSleep |
1215
|
|
|
|
|
|
|
|
1216
|
|
|
|
|
|
|
OpKeywordSocketExpr ::= OpKeywordSocket OpListKeywordArg |
1217
|
|
|
|
|
|
|
|
1218
|
|
|
|
|
|
|
OpKeywordSocketpairExpr ::= OpKeywordSocketpair OpListKeywordArg |
1219
|
|
|
|
|
|
|
|
1220
|
|
|
|
|
|
|
OpKeywordSortExpr ::= OpKeywordSort BlockNonEmpty OpListKeywordArg |
1221
|
|
|
|
|
|
|
| OpKeywordSort VarScalar OpListKeywordArg |
1222
|
|
|
|
|
|
|
| OpKeywordSort OpListKeywordArgNonBrace |
1223
|
|
|
|
|
|
|
|
1224
|
|
|
|
|
|
|
OpKeywordSpliceExpr ::= OpKeywordSplice OpListKeywordArg |
1225
|
|
|
|
|
|
|
|
1226
|
|
|
|
|
|
|
OpKeywordSplitExpr ::= OpKeywordSplit OpListKeywordArg |
1227
|
|
|
|
|
|
|
|
1228
|
|
|
|
|
|
|
OpKeywordSprintfExpr ::= OpKeywordSprintf OpListKeywordArg |
1229
|
|
|
|
|
|
|
|
1230
|
|
|
|
|
|
|
OpKeywordSqrtExpr ::= OpKeywordSqrt OpUnaryKeywordArg |
1231
|
|
|
|
|
|
|
| OpKeywordSqrt |
1232
|
|
|
|
|
|
|
|
1233
|
|
|
|
|
|
|
OpKeywordSrandExpr ::= OpKeywordSrand OpUnaryKeywordArg |
1234
|
|
|
|
|
|
|
| OpKeywordSrand |
1235
|
|
|
|
|
|
|
|
1236
|
|
|
|
|
|
|
OpKeywordStatExpr ::= OpKeywordStat OpUnaryKeywordArg |
1237
|
|
|
|
|
|
|
| OpKeywordStat |
1238
|
|
|
|
|
|
|
|
1239
|
|
|
|
|
|
|
OpKeywordStudyExpr ::= OpKeywordStudy OpUnaryKeywordArg |
1240
|
|
|
|
|
|
|
| OpKeywordStudy |
1241
|
|
|
|
|
|
|
|
1242
|
|
|
|
|
|
|
OpKeywordSubExpr ::= OpKeywordSub SubDefinition |
1243
|
|
|
|
|
|
|
|
1244
|
|
|
|
|
|
|
OpKeywordSubstrExpr ::= OpKeywordSubstr OpListKeywordArg |
1245
|
|
|
|
|
|
|
|
1246
|
|
|
|
|
|
|
OpKeywordSymlinkExpr ::= OpKeywordSymlink OpListKeywordArg |
1247
|
|
|
|
|
|
|
|
1248
|
|
|
|
|
|
|
OpKeywordSyscallExpr ::= OpKeywordSyscall OpListKeywordArg |
1249
|
|
|
|
|
|
|
|
1250
|
|
|
|
|
|
|
OpKeywordSysopenExpr ::= OpKeywordSysopen OpListKeywordArg |
1251
|
|
|
|
|
|
|
|
1252
|
|
|
|
|
|
|
OpKeywordSysreadExpr ::= OpKeywordSysread OpListKeywordArg |
1253
|
|
|
|
|
|
|
|
1254
|
|
|
|
|
|
|
OpKeywordSysseekExpr ::= OpKeywordSysseek OpListKeywordArg |
1255
|
|
|
|
|
|
|
|
1256
|
|
|
|
|
|
|
OpKeywordSyswriteExpr ::= OpKeywordSyswrite OpListKeywordArg |
1257
|
|
|
|
|
|
|
|
1258
|
|
|
|
|
|
|
OpKeywordSystemExpr ::= OpKeywordSystem BlockNonEmpty OpListKeywordArg |
1259
|
|
|
|
|
|
|
| OpKeywordSystem OpListKeywordArgNonBrace |
1260
|
|
|
|
|
|
|
|
1261
|
|
|
|
|
|
|
OpKeywordTellExpr ::= OpKeywordTell OpUnaryKeywordArg |
1262
|
|
|
|
|
|
|
| OpKeywordTell |
1263
|
|
|
|
|
|
|
|
1264
|
|
|
|
|
|
|
OpKeywordTelldirExpr ::= OpKeywordTelldir OpUnaryKeywordArg |
1265
|
|
|
|
|
|
|
|
1266
|
|
|
|
|
|
|
OpKeywordTieExpr ::= OpKeywordTie OpListKeywordArg |
1267
|
|
|
|
|
|
|
|
1268
|
|
|
|
|
|
|
OpKeywordTiedExpr ::= OpKeywordTied OpUnaryKeywordArg |
1269
|
|
|
|
|
|
|
|
1270
|
|
|
|
|
|
|
OpKeywordTimeExpr ::= OpKeywordTime LParen RParen |
1271
|
|
|
|
|
|
|
| OpKeywordTime |
1272
|
|
|
|
|
|
|
|
1273
|
|
|
|
|
|
|
OpKeywordTimesExpr ::= OpKeywordTimes LParen RParen |
1274
|
|
|
|
|
|
|
| OpKeywordTimes |
1275
|
|
|
|
|
|
|
|
1276
|
|
|
|
|
|
|
OpKeywordTruncateExpr ::= OpKeywordTruncate OpListKeywordArg |
1277
|
|
|
|
|
|
|
|
1278
|
|
|
|
|
|
|
OpKeywordUcExpr ::= OpKeywordUc OpUnaryKeywordArg |
1279
|
|
|
|
|
|
|
| OpKeywordUc |
1280
|
|
|
|
|
|
|
|
1281
|
|
|
|
|
|
|
OpKeywordUcfirstExpr ::= OpKeywordUcfirst OpUnaryKeywordArg |
1282
|
|
|
|
|
|
|
| OpKeywordUcfirst |
1283
|
|
|
|
|
|
|
|
1284
|
|
|
|
|
|
|
OpKeywordUmaskExpr ::= OpKeywordUmask OpUnaryKeywordArg |
1285
|
|
|
|
|
|
|
| OpKeywordUmask |
1286
|
|
|
|
|
|
|
|
1287
|
|
|
|
|
|
|
OpKeywordUndefExpr ::= OpKeywordUndef OpUnaryKeywordArg |
1288
|
|
|
|
|
|
|
| OpKeywordUndef |
1289
|
|
|
|
|
|
|
|
1290
|
|
|
|
|
|
|
OpKeywordUnlinkExpr ::= OpKeywordUnlink OpUnaryKeywordArg |
1291
|
|
|
|
|
|
|
| OpKeywordUnlink |
1292
|
|
|
|
|
|
|
|
1293
|
|
|
|
|
|
|
OpKeywordUnpackExpr ::= OpKeywordUnpack OpListKeywordArg |
1294
|
|
|
|
|
|
|
|
1295
|
|
|
|
|
|
|
OpKeywordUnshiftExpr ::= OpKeywordUnshift OpListKeywordArg |
1296
|
|
|
|
|
|
|
|
1297
|
|
|
|
|
|
|
OpKeywordUntieExpr ::= OpKeywordUntie OpUnaryKeywordArg |
1298
|
|
|
|
|
|
|
|
1299
|
|
|
|
|
|
|
OpKeywordUtimeExpr ::= OpKeywordUtime OpUnaryKeywordArg |
1300
|
|
|
|
|
|
|
|
1301
|
|
|
|
|
|
|
OpKeywordValuesExpr ::= OpKeywordValues OpUnaryKeywordArg |
1302
|
|
|
|
|
|
|
|
1303
|
|
|
|
|
|
|
OpKeywordVecExpr ::= OpKeywordVec OpListKeywordArg |
1304
|
|
|
|
|
|
|
|
1305
|
|
|
|
|
|
|
OpKeywordWaitExpr ::= OpKeywordWait LParen RParen |
1306
|
|
|
|
|
|
|
| OpKeywordWait |
1307
|
|
|
|
|
|
|
|
1308
|
|
|
|
|
|
|
OpKeywordWaitpidExpr ::= OpKeywordWaitpid OpListKeywordArg |
1309
|
|
|
|
|
|
|
|
1310
|
|
|
|
|
|
|
OpKeywordWantarrayExpr ::= OpKeywordWantarray LParen RParen |
1311
|
|
|
|
|
|
|
| OpKeywordWantarray |
1312
|
|
|
|
|
|
|
|
1313
|
|
|
|
|
|
|
OpKeywordWarnExpr ::= OpKeywordWarn OpListKeywordArg |
1314
|
|
|
|
|
|
|
| OpKeywordWarn |
1315
|
|
|
|
|
|
|
|
1316
|
|
|
|
|
|
|
OpKeywordWriteExpr ::= OpKeywordWrite OpListKeywordArg |
1317
|
|
|
|
|
|
|
| OpKeywordWrite |
1318
|
|
|
|
|
|
|
|
1319
|
|
|
|
|
|
|
OpFile ::= |
1320
|
|
|
|
|
|
|
OpFileReadableEffective |
1321
|
|
|
|
|
|
|
| OpFileWritableEffective |
1322
|
|
|
|
|
|
|
| OpFileRExecutableEffective |
1323
|
|
|
|
|
|
|
| OpFileOwnedEffective |
1324
|
|
|
|
|
|
|
| OpFileReadableReal |
1325
|
|
|
|
|
|
|
| OpFileWritableReal |
1326
|
|
|
|
|
|
|
| OpFileRExecutableReal |
1327
|
|
|
|
|
|
|
| OpFileOwnedReal |
1328
|
|
|
|
|
|
|
| OpFileExists |
1329
|
|
|
|
|
|
|
| OpFileEmpty |
1330
|
|
|
|
|
|
|
| OpFileNonEmpty |
1331
|
|
|
|
|
|
|
| OpFilePlain |
1332
|
|
|
|
|
|
|
| OpFileDirectory |
1333
|
|
|
|
|
|
|
| OpFileSymbolic |
1334
|
|
|
|
|
|
|
| OpFileNamedPipe |
1335
|
|
|
|
|
|
|
| OpFileSocket |
1336
|
|
|
|
|
|
|
| OpFileBlock |
1337
|
|
|
|
|
|
|
| OpFileCharacter |
1338
|
|
|
|
|
|
|
| OpFileOpenedTty |
1339
|
|
|
|
|
|
|
| OpFileSetuid |
1340
|
|
|
|
|
|
|
| OpFileSetgid |
1341
|
|
|
|
|
|
|
| OpFileSticky |
1342
|
|
|
|
|
|
|
| OpFileAsciiUtf8 |
1343
|
|
|
|
|
|
|
| OpFileBinary |
1344
|
|
|
|
|
|
|
| OpFileStartTime |
1345
|
|
|
|
|
|
|
| OpFileAccessTime |
1346
|
|
|
|
|
|
|
| OpFileChangeTime |
1347
|
|
|
|
|
|
|
|
1348
|
|
|
|
|
|
|
OpFileExpr ::= OpFile OpFileArg |
1349
|
|
|
|
|
|
|
OpFileArg ::= OpUnaryKeywordArg |
1350
|
|
|
|
|
|
|
| BuiltinFilehandle |
1351
|
|
|
|
|
|
|
| OpFileDefaultArg |
1352
|
|
|
|
|
|
|
|
1353
|
|
|
|
|
|
|
OpFileDefaultArg ~ '_' |
1354
|
|
|
|
|
|
|
|
1355
|
|
|
|
|
|
|
QLikeValue ::= QLikeValueExpr | QLikeValueExprWithMods |
1356
|
|
|
|
|
|
|
|
1357
|
|
|
|
|
|
|
QLikeValueExpr |
1358
|
|
|
|
|
|
|
~ QLikeFunction '(' NonRParenOrEscapedParens_Any ')' |
1359
|
|
|
|
|
|
|
| QLikeFunction '{' NonRBraceOrEscapedBraces_Any '}' |
1360
|
|
|
|
|
|
|
| QLikeFunction '<' NonRAngleOrEscapedAngles_Any '>' |
1361
|
|
|
|
|
|
|
| QLikeFunction '[' NonRBracketOrEscapedBrackets_Any ']' |
1362
|
|
|
|
|
|
|
| QLikeFunction '/' NonForwardSlashOrEscapedForwardSlashes_Any '/' |
1363
|
|
|
|
|
|
|
| QLikeFunction '!' NonExclamPointOrEscapedExclamPoints_Any '!' |
1364
|
|
|
|
|
|
|
| QLikeFunction '|' NonPipeOrEscapedPipes_Any '|' |
1365
|
|
|
|
|
|
|
|
1366
|
|
|
|
|
|
|
QLikeFunction ~ OpKeywordQ |
1367
|
|
|
|
|
|
|
| OpKeywordQq |
1368
|
|
|
|
|
|
|
| OpKeywordQx |
1369
|
|
|
|
|
|
|
| OpKeywordQw |
1370
|
|
|
|
|
|
|
|
1371
|
|
|
|
|
|
|
# Here we begin with "qr//" and "m//" which can have parameters |
1372
|
|
|
|
|
|
|
# Then we continue with "s///", "tr///", and "y///" which have two args, not one |
1373
|
|
|
|
|
|
|
# "//" follow at the end |
1374
|
|
|
|
|
|
|
QLikeValueExprWithMods |
1375
|
|
|
|
|
|
|
~ QLikeFunctionWithMods '(' NonRParenOrEscapedParens_Any ')' RegexModifiers |
1376
|
|
|
|
|
|
|
| QLikeFunctionWithMods '{' NonRBraceOrEscapedBraces_Any '}' RegexModifiers |
1377
|
|
|
|
|
|
|
| QLikeFunctionWithMods '<' NonRAngleOrEscapedAngles_Any '>' RegexModifiers |
1378
|
|
|
|
|
|
|
| QLikeFunctionWithMods '[' NonRBracketOrEscapedBrackets_Any ']' RegexModifiers |
1379
|
|
|
|
|
|
|
| QLikeFunctionWithMods '/' NonForwardSlashOrEscapedForwardSlashes_Any '/' RegexModifiers |
1380
|
|
|
|
|
|
|
| QLikeFunctionWithMods '!' NonExclamPointOrEscapedExclamPoints_Any '!' RegexModifiers |
1381
|
|
|
|
|
|
|
| QLikeFunctionWithMods '|' NonPipeOrEscapedPipes_Any '|' RegexModifiers |
1382
|
|
|
|
|
|
|
| QLikeSubstWithMods '(' NonRParenOrEscapedParens_Any ')(' NonRParenOrEscapedParens_Any ')' RegexModifiers |
1383
|
|
|
|
|
|
|
| QLikeSubstWithMods '{' NonRBraceOrEscapedBraces_Any '}{' NonRBraceOrEscapedBraces_Any '}' RegexModifiers |
1384
|
|
|
|
|
|
|
| QLikeSubstWithMods '<' NonRAngleOrEscapedAngles_Any '><' NonRAngleOrEscapedAngles_Any '>' RegexModifiers |
1385
|
|
|
|
|
|
|
| QLikeSubstWithMods '[' NonRBracketOrEscapedBrackets_Any '][' NonRBracketOrEscapedBrackets_Any ']' RegexModifiers |
1386
|
|
|
|
|
|
|
| QLikeSubstWithMods '/' NonForwardSlashOrEscapedForwardSlashes_Any '/' NonForwardSlashOrEscapedForwardSlashes_Any '/' RegexModifiers |
1387
|
|
|
|
|
|
|
| QLikeSubstWithMods '!' NonExclamPointOrEscapedExclamPoints_Any '!' NonExclamPointOrEscapedExclamPoints_Any '!' RegexModifiers |
1388
|
|
|
|
|
|
|
| QLikeSubstWithMods '|' NonPipeOrEscapedPipes_Any '|' NonPipeOrEscapedPipes_Any '|' RegexModifiers |
1389
|
|
|
|
|
|
|
| '/' NonForwardSlashOrEscapedForwardSlashes_Any '/' RegexModifiers |
1390
|
|
|
|
|
|
|
| '`' NonBacktickOrEscapedBackticks_Any '`' |
1391
|
|
|
|
|
|
|
|
1392
|
|
|
|
|
|
|
QLikeFunctionWithMods ~ OpKeywordQr |
1393
|
|
|
|
|
|
|
| OpKeywordM |
1394
|
|
|
|
|
|
|
|
1395
|
|
|
|
|
|
|
QLikeSubstWithMods ~ OpKeywordS |
1396
|
|
|
|
|
|
|
| OpKeywordTr |
1397
|
|
|
|
|
|
|
| OpKeywordY |
1398
|
|
|
|
|
|
|
|
1399
|
|
|
|
|
|
|
RegexModifiers ~ [a-z]* |
1400
|
|
|
|
|
|
|
|
1401
|
|
|
|
|
|
|
### |
1402
|
|
|
|
|
|
|
|
1403
|
|
|
|
|
|
|
# Everything except: # q* / s / m / y / t* |
1404
|
|
|
|
|
|
|
# | | | | | |
1405
|
|
|
|
|
|
|
# a b c d e f g h i j k l m n o p q r s t u v w x y z |
1406
|
|
|
|
|
|
|
# a - l n - p r u - x z |
1407
|
|
|
|
|
|
|
# (Cannot begin with digit, so digits are out) |
1408
|
|
|
|
|
|
|
NonQLikeLetters ~ [a-ln-pru-xzA-Z_]+ |
1409
|
|
|
|
|
|
|
|
1410
|
|
|
|
|
|
|
# Everything except: q / w / r / x (qq, qw, qr, qx) |
1411
|
|
|
|
|
|
|
# | | | | |
1412
|
|
|
|
|
|
|
# a b c d e f g h i j k l m n o p q r s t u v w x y z |
1413
|
|
|
|
|
|
|
# a - p s - v y-z |
1414
|
|
|
|
|
|
|
# (digits also allowed at this point) |
1415
|
|
|
|
|
|
|
NonQRWXLetters ~ [a-ps-vy-zA-Z0-9_]+ |
1416
|
|
|
|
|
|
|
|
1417
|
|
|
|
|
|
|
# Everything except: r (tr) |
1418
|
|
|
|
|
|
|
# | |
1419
|
|
|
|
|
|
|
# a b c d e f g h i j k l m n o p q r s t u v w x y z |
1420
|
|
|
|
|
|
|
# a - q s - z |
1421
|
|
|
|
|
|
|
# (digits also allowed at this point) |
1422
|
|
|
|
|
|
|
NonRLetter ~ [a-qs-zA-Z0-9_] |
1423
|
|
|
|
|
|
|
|
1424
|
|
|
|
|
|
|
# Everything else allowed (including digits) |
1425
|
|
|
|
|
|
|
AllSubLetters ~ [a-zA-Z0-9_]+ |
1426
|
|
|
|
|
|
|
|
1427
|
|
|
|
|
|
|
IdentComp ~ [a-zA-Z_0-9]+ |
1428
|
|
|
|
|
|
|
PackageSep ~ '::' |
1429
|
|
|
|
|
|
|
|
1430
|
|
|
|
|
|
|
VersionExpr ::= VersionNumber |
1431
|
|
|
|
|
|
|
VersionNumber ~ VersionNumberSegments |
1432
|
|
|
|
|
|
|
| 'v' VersionNumberSegments |
1433
|
|
|
|
|
|
|
|
1434
|
|
|
|
|
|
|
VersionNumberSegments ~ VersionNumberSegment '.' VersionNumberSegment '.' VersionNumberSegment |
1435
|
|
|
|
|
|
|
| VersionNumberSegment '.' VersionNumberSegment |
1436
|
|
|
|
|
|
|
| VersionNumberSegment |
1437
|
|
|
|
|
|
|
|
1438
|
|
|
|
|
|
|
VersionNumberSegment ~ [0-9] [0-9] [0-9] |
1439
|
|
|
|
|
|
|
| [0-9] [0-9] |
1440
|
|
|
|
|
|
|
| [0-9] |
1441
|
|
|
|
|
|
|
|
1442
|
|
|
|
|
|
|
LitNumber ::= LitNumberDec |
1443
|
|
|
|
|
|
|
| LitNumberOct |
1444
|
|
|
|
|
|
|
| LitNumberHex |
1445
|
|
|
|
|
|
|
| LitNumberBin |
1446
|
|
|
|
|
|
|
|
1447
|
|
|
|
|
|
|
LitNumberDec ::= NumberDec |
1448
|
|
|
|
|
|
|
LitNumberOct ::= NumberOct |
1449
|
|
|
|
|
|
|
LitNumberHex ::= NumberHex |
1450
|
|
|
|
|
|
|
LitNumberBin ::= NumberBin |
1451
|
|
|
|
|
|
|
|
1452
|
|
|
|
|
|
|
NumberDec ~ NumberDecInt |
1453
|
|
|
|
|
|
|
| NumberDecInt ExpDec |
1454
|
|
|
|
|
|
|
| NumberDecInt '.' DigitsDec |
1455
|
|
|
|
|
|
|
| NumberDecInt '.' DigitsDec ExpDec |
1456
|
|
|
|
|
|
|
| '.' DigitDec DigitsDec |
1457
|
|
|
|
|
|
|
| '.' DigitDec DigitsDec ExpDec |
1458
|
|
|
|
|
|
|
|
1459
|
|
|
|
|
|
|
NumberDecInt ~ [1-9] DigitsDec |
1460
|
|
|
|
|
|
|
| '0' |
1461
|
|
|
|
|
|
|
|
1462
|
|
|
|
|
|
|
NumberOct ~ '0' Underbars DigitOct DigitsOct |
1463
|
|
|
|
|
|
|
| '0' Underbars DigitOct DigitsOct ExpHex |
1464
|
|
|
|
|
|
|
| '0' DigitsOct '.' DigitOct DigitsOct ExpHex |
1465
|
|
|
|
|
|
|
|
1466
|
|
|
|
|
|
|
NumberHex ~ '0' [xX] Underbars DigitHex DigitsHex |
1467
|
|
|
|
|
|
|
| '0' [xX] Underbars DigitHex DigitsHex ExpHex |
1468
|
|
|
|
|
|
|
| '0' [xX] DigitsHex '.' DigitHex DigitsHex ExpHex |
1469
|
|
|
|
|
|
|
|
1470
|
|
|
|
|
|
|
NumberBin ~ '0' [bB] Underbars DigitBin DigitsBin |
1471
|
|
|
|
|
|
|
| '0' [bB] Underbars DigitBin DigitsBin ExpHex |
1472
|
|
|
|
|
|
|
| '0' [bB] DigitsBin '.' DigitBin DigitsBin ExpHex |
1473
|
|
|
|
|
|
|
|
1474
|
|
|
|
|
|
|
ExpDec ~ [eE] [+-] ExpDecExp |
1475
|
|
|
|
|
|
|
| [eE] [_] [+-] ExpDecExp |
1476
|
|
|
|
|
|
|
| [eE] ExpDecExp |
1477
|
|
|
|
|
|
|
|
1478
|
|
|
|
|
|
|
ExpDecExp ~ Underbars DigitDec DigitsDec |
1479
|
|
|
|
|
|
|
Underbars ~ [_]* |
1480
|
|
|
|
|
|
|
|
1481
|
|
|
|
|
|
|
ExpHex ~ [pP] [+-] DigitDec DigitsDec |
1482
|
|
|
|
|
|
|
| [pP] DigitDec DigitsDec |
1483
|
|
|
|
|
|
|
|
1484
|
|
|
|
|
|
|
DigitDec ~ [0-9] |
1485
|
|
|
|
|
|
|
DigitsDec ~ [0-9_]* |
1486
|
|
|
|
|
|
|
|
1487
|
|
|
|
|
|
|
DigitOct ~ [0-7] |
1488
|
|
|
|
|
|
|
DigitsOct ~ [0-7_]* |
1489
|
|
|
|
|
|
|
DigitHex ~ [0-9a-fA-F] |
1490
|
|
|
|
|
|
|
DigitsHex ~ [0-9a-fA-F_]* |
1491
|
|
|
|
|
|
|
|
1492
|
|
|
|
|
|
|
DigitBin ~ [01] |
1493
|
|
|
|
|
|
|
DigitsBin ~ [01_]* |
1494
|
|
|
|
|
|
|
|
1495
|
|
|
|
|
|
|
Digits ~ [0-9]+ |
1496
|
|
|
|
|
|
|
SingleQuote ~ ['] |
1497
|
|
|
|
|
|
|
DoubleQuote ~ ["] |
1498
|
|
|
|
|
|
|
|
1499
|
|
|
|
|
|
|
NonDoubleOrEscapedQuote_Many ~ NonDoubleOrEscapedQuote+ |
1500
|
|
|
|
|
|
|
NonDoubleOrEscapedQuote ~ EscapedDoubleQuote | NonDoubleQuote |
1501
|
|
|
|
|
|
|
EscapedDoubleQuote ~ Escape ["] | Escape [^"] |
1502
|
|
|
|
|
|
|
NonDoubleQuote ~ [^"\x{005C}] |
1503
|
|
|
|
|
|
|
|
1504
|
|
|
|
|
|
|
NonSingleOrEscapedQuote_Many ~ NonSingleOrEscapedQuote+ |
1505
|
|
|
|
|
|
|
NonSingleOrEscapedQuote ~ EscapedSingleQuote | NonSingleQuote |
1506
|
|
|
|
|
|
|
EscapedSingleQuote ~ Escape ['] | Escape [^'] |
1507
|
|
|
|
|
|
|
NonSingleQuote ~ [^'\x{005C}] |
1508
|
|
|
|
|
|
|
|
1509
|
|
|
|
|
|
|
Colon ~ ':' |
1510
|
|
|
|
|
|
|
Semicolon ~ ';' |
1511
|
|
|
|
|
|
|
Escape ~ '\' |
1512
|
|
|
|
|
|
|
|
1513
|
|
|
|
|
|
|
SigilScalar ~ '$' |
1514
|
|
|
|
|
|
|
SigilArray ~ '@' |
1515
|
|
|
|
|
|
|
SigilHash ~ '%' |
1516
|
|
|
|
|
|
|
SigilCode ~ '&' |
1517
|
|
|
|
|
|
|
SigilGlob ~ '*' |
1518
|
|
|
|
|
|
|
SigilArrayTop ~ '$#' |
1519
|
|
|
|
|
|
|
|
1520
|
|
|
|
|
|
|
LParen ~ '(' |
1521
|
|
|
|
|
|
|
RParen ~ ')' |
1522
|
|
|
|
|
|
|
LBracket ~ '[' |
1523
|
|
|
|
|
|
|
RBracket ~ ']' |
1524
|
|
|
|
|
|
|
LBrace ~ '{' |
1525
|
|
|
|
|
|
|
RBrace ~ '}' |
1526
|
|
|
|
|
|
|
|
1527
|
|
|
|
|
|
|
NonRParenOrEscapedParens_Any ~ NonRParenOrEscapedParens* |
1528
|
|
|
|
|
|
|
NonRParenOrEscapedParens ~ EscapedParens | NonRParen |
1529
|
|
|
|
|
|
|
EscapedParens ~ EscapedLParen | EscapedRParen |
1530
|
|
|
|
|
|
|
EscapedLParen ~ Escape [(] |
1531
|
|
|
|
|
|
|
EscapedRParen ~ Escape [)] | Escape [^)] |
1532
|
|
|
|
|
|
|
NonRParen ~ [^)\x{005C}] |
1533
|
|
|
|
|
|
|
|
1534
|
|
|
|
|
|
|
NonRBracketOrEscapedBrackets_Any ~ NonRBracketOrEscapedBrackets* |
1535
|
|
|
|
|
|
|
NonRBracketOrEscapedBrackets ~ EscapedBrackets | NonRBracket |
1536
|
|
|
|
|
|
|
EscapedBrackets ~ EscapedLBracket | EscapedRBracket |
1537
|
|
|
|
|
|
|
EscapedLBracket ~ Escape [\[] |
1538
|
|
|
|
|
|
|
EscapedRBracket ~ Escape [\]] | Escape [^\]] |
1539
|
|
|
|
|
|
|
NonRBracket ~ [^\]\x{005C}] |
1540
|
|
|
|
|
|
|
|
1541
|
|
|
|
|
|
|
NonRBraceOrEscapedBraces_Any ~ NonRBraceOrEscapedBraces* |
1542
|
|
|
|
|
|
|
NonRBraceOrEscapedBraces ~ EscapedBraces | NonRBrace |
1543
|
|
|
|
|
|
|
EscapedBraces ~ EscapedLBrace | EscapedRBrace |
1544
|
|
|
|
|
|
|
EscapedLBrace ~ Escape [\{] |
1545
|
|
|
|
|
|
|
EscapedRBrace ~ Escape [\}] | Escape [^\}] |
1546
|
|
|
|
|
|
|
NonRBrace ~ [^\}\x{005C}] |
1547
|
|
|
|
|
|
|
|
1548
|
|
|
|
|
|
|
NonRAngleOrEscapedAngles_Any ~ NonRAngleOrEscapedAngles* |
1549
|
|
|
|
|
|
|
NonRAngleOrEscapedAngles ~ EscapedAngles | NonRAngle |
1550
|
|
|
|
|
|
|
EscapedAngles ~ EscapedLAngle | EscapedRAngle |
1551
|
|
|
|
|
|
|
EscapedLAngle ~ Escape [<] |
1552
|
|
|
|
|
|
|
EscapedRAngle ~ Escape [>] | Escape [^>] |
1553
|
|
|
|
|
|
|
NonRAngle ~ [^>\x{005C}] |
1554
|
|
|
|
|
|
|
|
1555
|
|
|
|
|
|
|
# Escape == \x{005C} |
1556
|
|
|
|
|
|
|
# ForwardSlash (solidus) == \x{002F} |
1557
|
|
|
|
|
|
|
NonForwardSlashOrEscapedForwardSlashes_Any ~ NonForwardSlashOrEscapedForwardSlashes* |
1558
|
|
|
|
|
|
|
NonForwardSlashOrEscapedForwardSlashes ~ EscapedForwardSlash | NonForwardSlash |
1559
|
|
|
|
|
|
|
EscapedForwardSlash ~ Escape Escape | Escape [^\x{005C}] |
1560
|
|
|
|
|
|
|
NonForwardSlash ~ [^\x{002F}\x{005C}] |
1561
|
|
|
|
|
|
|
|
1562
|
|
|
|
|
|
|
NonExclamPointOrEscapedExclamPoints_Any ~ NonExclamPointOrEscapedExclamPoints* |
1563
|
|
|
|
|
|
|
NonExclamPointOrEscapedExclamPoints ~ EscapedExclamPoint | NonExclamPoint |
1564
|
|
|
|
|
|
|
EscapedExclamPoint ~ Escape [!] | Escape [^!] |
1565
|
|
|
|
|
|
|
NonExclamPoint ~ [^!\x{005C}] |
1566
|
|
|
|
|
|
|
|
1567
|
|
|
|
|
|
|
NonPipeOrEscapedPipes_Any ~ NonPipeOrEscapedPipes* |
1568
|
|
|
|
|
|
|
NonPipeOrEscapedPipes ~ EscapedPipe | NonPipe |
1569
|
|
|
|
|
|
|
EscapedPipe ~ Escape [\|] | Escape [^\|] |
1570
|
|
|
|
|
|
|
NonPipe ~ [^\|\x{005C}] |
1571
|
|
|
|
|
|
|
|
1572
|
|
|
|
|
|
|
NonBacktickOrEscapedBackticks_Any ~ NonBacktickOrEscapedBackticks* |
1573
|
|
|
|
|
|
|
NonBacktickOrEscapedBackticks ~ EscapedBacktick | NonBacktick |
1574
|
|
|
|
|
|
|
EscapedBacktick ~ Escape [\`] | Escape [^\`] |
1575
|
|
|
|
|
|
|
NonBacktick ~ [^`\x{005C}] |
1576
|
|
|
|
|
|
|
|
1577
|
|
|
|
|
|
|
Ellipsis ~ '...' |
1578
|
|
|
|
|
|
|
|
1579
|
|
|
|
|
|
|
UnderscorePackage ~ '__PACKAGE__' |
1580
|
|
|
|
|
|
|
UnderscoreFile ~ '__FILE__' |
1581
|
|
|
|
|
|
|
UnderscoreLine ~ '__LINE__' |
1582
|
|
|
|
|
|
|
UnderscoreSub ~ '__SUB__' |
1583
|
|
|
|
|
|
|
#UnderscoreData ~ '__DATA__' |
1584
|
|
|
|
|
|
|
#UnderscoreEnd ~ '__END__' |
1585
|
|
|
|
|
|
|
|
1586
|
|
|
|
|
|
|
PhaseName ~ 'BEGIN' | 'CHECK' | 'INIT' | 'UNITCHECK' | 'END' |
1587
|
|
|
|
|
|
|
|
1588
|
|
|
|
|
|
|
SubAttrArgs ~ '(' NonRParenOrEscapedParens_Any ')' |
1589
|
|
|
|
|
|
|
|
1590
|
|
|
|
|
|
|
OpArrow ~ '->' |
1591
|
|
|
|
|
|
|
OpInc ~ '++' | '--' |
1592
|
|
|
|
|
|
|
OpPower ~ '**' |
1593
|
|
|
|
|
|
|
OpUnary ~ '!' | '~' | '\' | '+' | '-' |
1594
|
|
|
|
|
|
|
OpRegex ~ '=~' | '!~' |
1595
|
|
|
|
|
|
|
OpMulti ~ '*' | '/' | '%' | 'x' |
1596
|
|
|
|
|
|
|
OpAdd ~ '+' | '-' | '.' |
1597
|
|
|
|
|
|
|
OpShift ~ '<<' | '>>' |
1598
|
|
|
|
|
|
|
OpInequal ~ '<' | '>' | '<=' | '>=' | 'lt' | 'gt' | 'le' | 'ge' |
1599
|
|
|
|
|
|
|
OpEqual ~ '==' | '!=' | '<=>' | 'eq' | 'ne' | 'cmp' |
1600
|
|
|
|
|
|
|
OpBinAnd ~ '&' |
1601
|
|
|
|
|
|
|
OpBinOr ~ '|' | '^' |
1602
|
|
|
|
|
|
|
OpLogAnd ~ '&&' |
1603
|
|
|
|
|
|
|
OpLogOr ~ '||' | '//' |
1604
|
|
|
|
|
|
|
OpRange ~ '..' | '...' |
1605
|
|
|
|
|
|
|
OpTriThen ~ '?' |
1606
|
|
|
|
|
|
|
OpTriElse ~ ':' |
1607
|
|
|
|
|
|
|
OpAssign ~ '=' | '*=' | '/=' | '%=' | 'x=' | '+=' | '-=' | '.=' | '<<=' | '>>=' | '&=' | '|=' | '^=' | '&&=' | '||=' | '//=' |
1608
|
|
|
|
|
|
|
OpComma ~ ',' | '=>' |
1609
|
|
|
|
|
|
|
OpNameNot ~ 'not' |
1610
|
|
|
|
|
|
|
OpNameAnd ~ 'and' |
1611
|
|
|
|
|
|
|
OpNameOr ~ 'or' | 'xor' |
1612
|
|
|
|
|
|
|
|
1613
|
|
|
|
|
|
|
OpKeywordAbs ~ 'abs' |
1614
|
|
|
|
|
|
|
OpKeywordAccept ~ 'accept' |
1615
|
|
|
|
|
|
|
OpKeywordAlarm ~ 'alarm' |
1616
|
|
|
|
|
|
|
OpKeywordAtan2 ~ 'atan2' |
1617
|
|
|
|
|
|
|
OpKeywordBind ~ 'bind' |
1618
|
|
|
|
|
|
|
OpKeywordBinmode ~ 'binmode' |
1619
|
|
|
|
|
|
|
OpKeywordBless ~ 'bless' |
1620
|
|
|
|
|
|
|
OpKeywordBreak ~ 'break' |
1621
|
|
|
|
|
|
|
OpKeywordCaller ~ 'caller' |
1622
|
|
|
|
|
|
|
OpKeywordChdir ~ 'chdir' |
1623
|
|
|
|
|
|
|
OpKeywordChmod ~ 'chmod' |
1624
|
|
|
|
|
|
|
OpKeywordChomp ~ 'chomp' |
1625
|
|
|
|
|
|
|
OpKeywordChop ~ 'chop' |
1626
|
|
|
|
|
|
|
OpKeywordChown ~ 'chown' |
1627
|
|
|
|
|
|
|
OpKeywordChr ~ 'chr' |
1628
|
|
|
|
|
|
|
OpKeywordChroot ~ 'chroot' |
1629
|
|
|
|
|
|
|
OpKeywordClose ~ 'close' |
1630
|
|
|
|
|
|
|
OpKeywordClosedir ~ 'closedir' |
1631
|
|
|
|
|
|
|
OpKeywordConnect ~ 'connect' |
1632
|
|
|
|
|
|
|
OpKeywordContinue ~ 'continue' |
1633
|
|
|
|
|
|
|
OpKeywordCos ~ 'cos' |
1634
|
|
|
|
|
|
|
OpKeywordCrypt ~ 'crypt' |
1635
|
|
|
|
|
|
|
OpKeywordDbmclose ~ 'dbmclose' |
1636
|
|
|
|
|
|
|
OpKeywordDbmopen ~ 'dbmopen' |
1637
|
|
|
|
|
|
|
OpKeywordDefined ~ 'defined' |
1638
|
|
|
|
|
|
|
OpKeywordDelete ~ 'delete' |
1639
|
|
|
|
|
|
|
OpKeywordDie ~ 'die' |
1640
|
|
|
|
|
|
|
OpKeywordDo ~ 'do' |
1641
|
|
|
|
|
|
|
OpKeywordDump ~ 'dump' |
1642
|
|
|
|
|
|
|
OpKeywordEach ~ 'each' |
1643
|
|
|
|
|
|
|
OpKeywordEof ~ 'eof' |
1644
|
|
|
|
|
|
|
OpKeywordEval ~ 'eval' |
1645
|
|
|
|
|
|
|
OpKeywordEvalbytes ~ 'evalbytes' |
1646
|
|
|
|
|
|
|
OpKeywordExec ~ 'exec' |
1647
|
|
|
|
|
|
|
OpKeywordExists ~ 'exists' |
1648
|
|
|
|
|
|
|
OpKeywordExit ~ 'exit' |
1649
|
|
|
|
|
|
|
OpKeywordExp ~ 'exp' |
1650
|
|
|
|
|
|
|
OpKeywordFc ~ 'fc' |
1651
|
|
|
|
|
|
|
OpKeywordFor ~ 'for' |
1652
|
|
|
|
|
|
|
OpKeywordForeach ~ 'foreach' |
1653
|
|
|
|
|
|
|
OpKeywordFcntl ~ 'fcntl' |
1654
|
|
|
|
|
|
|
OpKeywordFileno ~ 'fileno' |
1655
|
|
|
|
|
|
|
OpKeywordFlock ~ 'flock' |
1656
|
|
|
|
|
|
|
OpKeywordFork ~ 'fork' |
1657
|
|
|
|
|
|
|
OpKeywordGetc ~ 'getc' |
1658
|
|
|
|
|
|
|
OpKeywordGetlogin ~ 'getlogin' |
1659
|
|
|
|
|
|
|
OpKeywordGetpeername ~ 'getpeername' |
1660
|
|
|
|
|
|
|
OpKeywordGetpgrp ~ 'getpgrp' |
1661
|
|
|
|
|
|
|
OpKeywordGetppid ~ 'getppid' |
1662
|
|
|
|
|
|
|
OpKeywordGetpriority ~ 'getpriority' |
1663
|
|
|
|
|
|
|
OpKeywordGetpwnam ~ 'getpwnam' |
1664
|
|
|
|
|
|
|
OpKeywordGetgrnam ~ 'getgrnam' |
1665
|
|
|
|
|
|
|
OpKeywordGethostbyname ~ 'gethostbyname' |
1666
|
|
|
|
|
|
|
OpKeywordGetnetbyname ~ 'getnetbyname' |
1667
|
|
|
|
|
|
|
OpKeywordGetprotobyname ~ 'getprotobyname' |
1668
|
|
|
|
|
|
|
OpKeywordGetpwuid ~ 'getpwuid' |
1669
|
|
|
|
|
|
|
OpKeywordGetgrgid ~ 'getgrgid' |
1670
|
|
|
|
|
|
|
OpKeywordGetservbyname ~ 'getservbyname' |
1671
|
|
|
|
|
|
|
OpKeywordGethostbyaddr ~ 'gethostbyaddr' |
1672
|
|
|
|
|
|
|
OpKeywordGetnetbyaddr ~ 'getnetbyaddr' |
1673
|
|
|
|
|
|
|
OpKeywordGetprotobynumber ~ 'getprotobynumber' |
1674
|
|
|
|
|
|
|
OpKeywordGetservbyport ~ 'getservbyport' |
1675
|
|
|
|
|
|
|
OpKeywordGetpwent ~ 'getpwent' |
1676
|
|
|
|
|
|
|
OpKeywordGetgrent ~ 'getgrent' |
1677
|
|
|
|
|
|
|
OpKeywordGethostent ~ 'gethostent' |
1678
|
|
|
|
|
|
|
OpKeywordGetnetent ~ 'getnetent' |
1679
|
|
|
|
|
|
|
OpKeywordGetprotoent ~ 'getprotoent' |
1680
|
|
|
|
|
|
|
OpKeywordGetservent ~ 'getservent' |
1681
|
|
|
|
|
|
|
OpKeywordSetpwent ~ 'setpwent' |
1682
|
|
|
|
|
|
|
OpKeywordSetgrent ~ 'setgrent' |
1683
|
|
|
|
|
|
|
OpKeywordSethostent ~ 'sethostent' |
1684
|
|
|
|
|
|
|
OpKeywordSetnetent ~ 'setnetent' |
1685
|
|
|
|
|
|
|
OpKeywordSetprotoent ~ 'setprotoent' |
1686
|
|
|
|
|
|
|
OpKeywordSetservent ~ 'setservent' |
1687
|
|
|
|
|
|
|
OpKeywordEndpwent ~ 'endpwent' |
1688
|
|
|
|
|
|
|
OpKeywordEndgrent ~ 'endgrent' |
1689
|
|
|
|
|
|
|
OpKeywordEndhostent ~ 'endhostent' |
1690
|
|
|
|
|
|
|
OpKeywordEndnetent ~ 'endnetent' |
1691
|
|
|
|
|
|
|
OpKeywordEndprotoent ~ 'endprotoent' |
1692
|
|
|
|
|
|
|
OpKeywordEndservent ~ 'endservent' |
1693
|
|
|
|
|
|
|
OpKeywordGetsockname ~ 'getsockname' |
1694
|
|
|
|
|
|
|
OpKeywordGetsockopt ~ 'getsockopt' |
1695
|
|
|
|
|
|
|
OpKeywordGlob ~ 'glob' |
1696
|
|
|
|
|
|
|
OpKeywordGmtime ~ 'gmtime' |
1697
|
|
|
|
|
|
|
OpKeywordGoto ~ 'goto' |
1698
|
|
|
|
|
|
|
OpKeywordGrep ~ 'grep' |
1699
|
|
|
|
|
|
|
OpKeywordHex ~ 'hex' |
1700
|
|
|
|
|
|
|
OpKeywordIndex ~ 'index' |
1701
|
|
|
|
|
|
|
OpKeywordInt ~ 'int' |
1702
|
|
|
|
|
|
|
OpKeywordIoctl ~ 'ioctl' |
1703
|
|
|
|
|
|
|
OpKeywordJoin ~ 'join' |
1704
|
|
|
|
|
|
|
OpKeywordKeys ~ 'keys' |
1705
|
|
|
|
|
|
|
OpKeywordKill ~ 'kill' |
1706
|
|
|
|
|
|
|
OpKeywordLast ~ 'last' |
1707
|
|
|
|
|
|
|
OpKeywordLc ~ 'lc' |
1708
|
|
|
|
|
|
|
OpKeywordLcfirst ~ 'lcfirst' |
1709
|
|
|
|
|
|
|
OpKeywordLength ~ 'length' |
1710
|
|
|
|
|
|
|
OpKeywordLink ~ 'link' |
1711
|
|
|
|
|
|
|
OpKeywordListen ~ 'listen' |
1712
|
|
|
|
|
|
|
OpKeywordLocal ~ 'local' |
1713
|
|
|
|
|
|
|
OpKeywordLocaltime ~ 'localtime' |
1714
|
|
|
|
|
|
|
OpKeywordLock ~ 'lock' |
1715
|
|
|
|
|
|
|
OpKeywordLog ~ 'log' |
1716
|
|
|
|
|
|
|
OpKeywordLstat ~ 'lstat' |
1717
|
|
|
|
|
|
|
OpKeywordM ~ 'm' |
1718
|
|
|
|
|
|
|
OpKeywordMap ~ 'map' |
1719
|
|
|
|
|
|
|
OpKeywordMkdir ~ 'mkdir' |
1720
|
|
|
|
|
|
|
OpKeywordMsgctl ~ 'msgctl' |
1721
|
|
|
|
|
|
|
OpKeywordMsgget ~ 'msgget' |
1722
|
|
|
|
|
|
|
OpKeywordMsgrcv ~ 'msgrcv' |
1723
|
|
|
|
|
|
|
OpKeywordMsgsnd ~ 'msgsnd' |
1724
|
|
|
|
|
|
|
OpKeywordMy ~ 'my' |
1725
|
|
|
|
|
|
|
OpKeywordNext ~ 'next' |
1726
|
|
|
|
|
|
|
OpKeywordNo ~ 'no' |
1727
|
|
|
|
|
|
|
OpKeywordOct ~ 'oct' |
1728
|
|
|
|
|
|
|
OpKeywordOpen ~ 'open' |
1729
|
|
|
|
|
|
|
OpKeywordOpendir ~ 'opendir' |
1730
|
|
|
|
|
|
|
OpKeywordOrd ~ 'ord' |
1731
|
|
|
|
|
|
|
OpKeywordOur ~ 'our' |
1732
|
|
|
|
|
|
|
OpKeywordPack ~ 'pack' |
1733
|
|
|
|
|
|
|
OpKeywordPackage ~ 'package' |
1734
|
|
|
|
|
|
|
OpKeywordPipe ~ 'pipe' |
1735
|
|
|
|
|
|
|
OpKeywordPop ~ 'pop' |
1736
|
|
|
|
|
|
|
OpKeywordPos ~ 'pos' |
1737
|
|
|
|
|
|
|
OpKeywordPrint ~ 'print' |
1738
|
|
|
|
|
|
|
OpKeywordPrintf ~ 'printf' |
1739
|
|
|
|
|
|
|
OpKeywordPrototype ~ 'prototype' |
1740
|
|
|
|
|
|
|
OpKeywordPush ~ 'push' |
1741
|
|
|
|
|
|
|
OpKeywordQ ~ 'q' |
1742
|
|
|
|
|
|
|
OpKeywordQq ~ 'qq' |
1743
|
|
|
|
|
|
|
OpKeywordQx ~ 'qx' |
1744
|
|
|
|
|
|
|
OpKeywordQw ~ 'qw' |
1745
|
|
|
|
|
|
|
OpKeywordQr ~ 'qr' |
1746
|
|
|
|
|
|
|
OpKeywordQuotemeta ~ 'quotemeta' |
1747
|
|
|
|
|
|
|
OpKeywordRand ~ 'rand' |
1748
|
|
|
|
|
|
|
OpKeywordRead ~ 'read' |
1749
|
|
|
|
|
|
|
OpKeywordReaddir ~ 'readdir' |
1750
|
|
|
|
|
|
|
OpKeywordReadline ~ 'readline' |
1751
|
|
|
|
|
|
|
OpKeywordReadlink ~ 'readlink' |
1752
|
|
|
|
|
|
|
OpKeywordReadpipe ~ 'readpipe' |
1753
|
|
|
|
|
|
|
OpKeywordRecv ~ 'recv' |
1754
|
|
|
|
|
|
|
OpKeywordRedo ~ 'redo' |
1755
|
|
|
|
|
|
|
OpKeywordRef ~ 'ref' |
1756
|
|
|
|
|
|
|
OpKeywordRename ~ 'rename' |
1757
|
|
|
|
|
|
|
OpKeywordRequire ~ 'require' |
1758
|
|
|
|
|
|
|
OpKeywordReset ~ 'reset' |
1759
|
|
|
|
|
|
|
OpKeywordReturn ~ 'return' |
1760
|
|
|
|
|
|
|
OpKeywordReverse ~ 'reverse' |
1761
|
|
|
|
|
|
|
OpKeywordRewinddir ~ 'rewinddir' |
1762
|
|
|
|
|
|
|
OpKeywordRindex ~ 'rindex' |
1763
|
|
|
|
|
|
|
OpKeywordRmdir ~ 'rmdir' |
1764
|
|
|
|
|
|
|
OpKeywordS ~ 's' |
1765
|
|
|
|
|
|
|
OpKeywordSay ~ 'say' |
1766
|
|
|
|
|
|
|
OpKeywordScalar ~ 'scalar' |
1767
|
|
|
|
|
|
|
OpKeywordSeek ~ 'seek' |
1768
|
|
|
|
|
|
|
OpKeywordSeekdir ~ 'seekdir' |
1769
|
|
|
|
|
|
|
OpKeywordSelect ~ 'select' |
1770
|
|
|
|
|
|
|
OpKeywordSemctl ~ 'semctl' |
1771
|
|
|
|
|
|
|
OpKeywordSemget ~ 'semget' |
1772
|
|
|
|
|
|
|
OpKeywordSemop ~ 'semop' |
1773
|
|
|
|
|
|
|
OpKeywordSend ~ 'send' |
1774
|
|
|
|
|
|
|
OpKeywordSetpgrp ~ 'setpgrp' |
1775
|
|
|
|
|
|
|
OpKeywordSetpriority ~ 'setpriority' |
1776
|
|
|
|
|
|
|
OpKeywordSetsockopt ~ 'setsockopt' |
1777
|
|
|
|
|
|
|
OpKeywordShift ~ 'shift' |
1778
|
|
|
|
|
|
|
OpKeywordShmctl ~ 'shmctl' |
1779
|
|
|
|
|
|
|
OpKeywordShmget ~ 'shmget' |
1780
|
|
|
|
|
|
|
OpKeywordShmread ~ 'shmread' |
1781
|
|
|
|
|
|
|
OpKeywordShmwrite ~ 'shmwrite' |
1782
|
|
|
|
|
|
|
OpKeywordShutdown ~ 'shutdown' |
1783
|
|
|
|
|
|
|
OpKeywordSin ~ 'sin' |
1784
|
|
|
|
|
|
|
OpKeywordSleep ~ 'sleep' |
1785
|
|
|
|
|
|
|
OpKeywordSocket ~ 'socket' |
1786
|
|
|
|
|
|
|
OpKeywordSocketpair ~ 'socketpair' |
1787
|
|
|
|
|
|
|
OpKeywordSort ~ 'sort' |
1788
|
|
|
|
|
|
|
OpKeywordSplice ~ 'splice' |
1789
|
|
|
|
|
|
|
OpKeywordSplit ~ 'split' |
1790
|
|
|
|
|
|
|
OpKeywordSprintf ~ 'sprintf' |
1791
|
|
|
|
|
|
|
OpKeywordSqrt ~ 'sqrt' |
1792
|
|
|
|
|
|
|
OpKeywordSrand ~ 'srand' |
1793
|
|
|
|
|
|
|
OpKeywordStat ~ 'stat' |
1794
|
|
|
|
|
|
|
OpKeywordState ~ 'state' |
1795
|
|
|
|
|
|
|
OpKeywordStudy ~ 'study' |
1796
|
|
|
|
|
|
|
OpKeywordSub ~ 'sub' |
1797
|
|
|
|
|
|
|
OpKeywordSubstr ~ 'substr' |
1798
|
|
|
|
|
|
|
OpKeywordSymlink ~ 'symlink' |
1799
|
|
|
|
|
|
|
OpKeywordSyscall ~ 'syscall' |
1800
|
|
|
|
|
|
|
OpKeywordSysopen ~ 'sysopen' |
1801
|
|
|
|
|
|
|
OpKeywordSysread ~ 'sysread' |
1802
|
|
|
|
|
|
|
OpKeywordSysseek ~ 'sysseek' |
1803
|
|
|
|
|
|
|
OpKeywordSystem ~ 'system' |
1804
|
|
|
|
|
|
|
OpKeywordSyswrite ~ 'syswrite' |
1805
|
|
|
|
|
|
|
OpKeywordTr ~ 'tr' |
1806
|
|
|
|
|
|
|
OpKeywordTell ~ 'tell' |
1807
|
|
|
|
|
|
|
OpKeywordTelldir ~ 'telldir' |
1808
|
|
|
|
|
|
|
OpKeywordTie ~ 'tie' |
1809
|
|
|
|
|
|
|
OpKeywordTied ~ 'tied' |
1810
|
|
|
|
|
|
|
OpKeywordTime ~ 'time' |
1811
|
|
|
|
|
|
|
OpKeywordTimes ~ 'times' |
1812
|
|
|
|
|
|
|
OpKeywordTruncate ~ 'truncate' |
1813
|
|
|
|
|
|
|
OpKeywordUc ~ 'uc' |
1814
|
|
|
|
|
|
|
OpKeywordUcfirst ~ 'ucfirst' |
1815
|
|
|
|
|
|
|
OpKeywordUmask ~ 'umask' |
1816
|
|
|
|
|
|
|
OpKeywordUndef ~ 'undef' |
1817
|
|
|
|
|
|
|
OpKeywordUnlink ~ 'unlink' |
1818
|
|
|
|
|
|
|
OpKeywordUnpack ~ 'unpack' |
1819
|
|
|
|
|
|
|
OpKeywordUnshift ~ 'unshift' |
1820
|
|
|
|
|
|
|
OpKeywordUntie ~ 'untie' |
1821
|
|
|
|
|
|
|
OpKeywordUse ~ 'use' |
1822
|
|
|
|
|
|
|
OpKeywordUtime ~ 'utime' |
1823
|
|
|
|
|
|
|
OpKeywordValues ~ 'values' |
1824
|
|
|
|
|
|
|
OpKeywordVec ~ 'vec' |
1825
|
|
|
|
|
|
|
OpKeywordWait ~ 'wait' |
1826
|
|
|
|
|
|
|
OpKeywordWaitpid ~ 'waitpid' |
1827
|
|
|
|
|
|
|
OpKeywordWantarray ~ 'wantarray' |
1828
|
|
|
|
|
|
|
OpKeywordWarn ~ 'warn' |
1829
|
|
|
|
|
|
|
OpKeywordWrite ~ 'write' |
1830
|
|
|
|
|
|
|
OpKeywordY ~ 'y' |
1831
|
|
|
|
|
|
|
|
1832
|
|
|
|
|
|
|
OpFileReadableEffective ~ '-r' |
1833
|
|
|
|
|
|
|
OpFileWritableEffective ~ '-w' |
1834
|
|
|
|
|
|
|
OpFileRExecutableEffective ~ '-x' |
1835
|
|
|
|
|
|
|
OpFileOwnedEffective ~ '-o' |
1836
|
|
|
|
|
|
|
OpFileReadableReal ~ '-R' |
1837
|
|
|
|
|
|
|
OpFileWritableReal ~ '-W' |
1838
|
|
|
|
|
|
|
OpFileRExecutableReal ~ '-X' |
1839
|
|
|
|
|
|
|
OpFileOwnedReal ~ '-O' |
1840
|
|
|
|
|
|
|
OpFileExists ~ '-e' |
1841
|
|
|
|
|
|
|
OpFileEmpty ~ '-z' |
1842
|
|
|
|
|
|
|
OpFileNonEmpty ~ '-s' |
1843
|
|
|
|
|
|
|
OpFilePlain ~ '-f' |
1844
|
|
|
|
|
|
|
OpFileDirectory ~ '-d' |
1845
|
|
|
|
|
|
|
OpFileSymbolic ~ '-l' |
1846
|
|
|
|
|
|
|
OpFileNamedPipe ~ '-p' |
1847
|
|
|
|
|
|
|
OpFileSocket ~ '-S' |
1848
|
|
|
|
|
|
|
OpFileBlock ~ '-b' |
1849
|
|
|
|
|
|
|
OpFileCharacter ~ '-c' |
1850
|
|
|
|
|
|
|
OpFileOpenedTty ~ '-t' |
1851
|
|
|
|
|
|
|
OpFileSetuid ~ '-u' |
1852
|
|
|
|
|
|
|
OpFileSetgid ~ '-g' |
1853
|
|
|
|
|
|
|
OpFileSticky ~ '-k' |
1854
|
|
|
|
|
|
|
OpFileAsciiUtf8 ~ '-T' |
1855
|
|
|
|
|
|
|
OpFileBinary ~ '-B' |
1856
|
|
|
|
|
|
|
OpFileStartTime ~ '-M' |
1857
|
|
|
|
|
|
|
OpFileAccessTime ~ '-A' |
1858
|
|
|
|
|
|
|
OpFileChangeTime ~ '-C' |
1859
|
|
|
|
|
|
|
|
1860
|
|
|
|
|
|
|
ConditionIf ~ 'if' |
1861
|
|
|
|
|
|
|
ConditionElsif ~ 'elsif' |
1862
|
|
|
|
|
|
|
ConditionElse ~ 'else' |
1863
|
|
|
|
|
|
|
ConditionUnless ~ 'unless' |
1864
|
|
|
|
|
|
|
ConditionWhile ~ 'while' |
1865
|
|
|
|
|
|
|
ConditionUntil ~ 'until' |
1866
|
|
|
|
|
|
|
ConditionFor ~ 'for' |
1867
|
|
|
|
|
|
|
ConditionForeach ~ 'foreach' |
1868
|
|
|
|
|
|
|
|
1869
|
|
|
|
|
|
|
BuiltinFilehandle ~ 'STDIN' | 'STDOUT' | 'STDERR' | 'ARGV' | 'ARGVOUT' | 'DATA' |
1870
|
|
|
|
|
|
|
|
1871
|
|
|
|
|
|
|
# Ignore whitespace |
1872
|
|
|
|
|
|
|
:discard ~ whitespace |
1873
|
|
|
|
|
|
|
whitespace ~ [\s]+ |
1874
|
|
|
|
|
|
|
|
1875
|
|
|
|
|
|
|
# Comments |
1876
|
|
|
|
|
|
|
:discard ~ |
1877
|
|
|
|
|
|
|
~ | |
1878
|
|
|
|
|
|
|
~ '#' |
1879
|
|
|
|
|
|
|
~ '#' |
1880
|
|
|
|
|
|
|
~ * |
1881
|
|
|
|
|
|
|
~ [\x{A}\x{B}\x{C}\x{D}\x{0085}\x{2028}\x{2029}] |
1882
|
|
|
|
|
|
|
~ [^\x{A}\x{B}\x{C}\x{D}\x{0085}\x{2028}\x{2029}] |
1883
|
|
|
|
|
|
|
|
1884
|
|
|
|
|
|
|
# Recognize phases before subroutines |
1885
|
|
|
|
|
|
|
:lexeme ~ PhaseName priority => 1 |
1886
|
|
|
|
|
|
|
|
1887
|
|
|
|
|
|
|
# Recognize q* / s / m / y / tr before subroutines |
1888
|
|
|
|
|
|
|
:lexeme ~ QLikeValueExpr priority => 1 |
1889
|
|
|
|
|
|
|
:lexeme ~ QLikeValueExprWithMods priority => 1 |
1890
|
|
|
|
|
|
|
|
1891
|
|
|
|
|
|
|
:lexeme ~ VersionNumber priority => 1 |
1892
|
|
|
|
|
|
|
|
1893
|
|
|
|
|
|
|
# Prioritize keywords over functions |
1894
|
|
|
|
|
|
|
:lexeme ~ OpKeywordAbs priority => 1 |
1895
|
|
|
|
|
|
|
:lexeme ~ OpKeywordAccept priority => 1 |
1896
|
|
|
|
|
|
|
:lexeme ~ OpKeywordAlarm priority => 1 |
1897
|
|
|
|
|
|
|
:lexeme ~ OpKeywordAtan2 priority => 1 |
1898
|
|
|
|
|
|
|
:lexeme ~ OpKeywordBind priority => 1 |
1899
|
|
|
|
|
|
|
:lexeme ~ OpKeywordBinmode priority => 1 |
1900
|
|
|
|
|
|
|
:lexeme ~ OpKeywordBless priority => 1 |
1901
|
|
|
|
|
|
|
:lexeme ~ OpKeywordBreak priority => 1 |
1902
|
|
|
|
|
|
|
:lexeme ~ OpKeywordCaller priority => 1 |
1903
|
|
|
|
|
|
|
:lexeme ~ OpKeywordChdir priority => 1 |
1904
|
|
|
|
|
|
|
:lexeme ~ OpKeywordChmod priority => 1 |
1905
|
|
|
|
|
|
|
:lexeme ~ OpKeywordChomp priority => 1 |
1906
|
|
|
|
|
|
|
:lexeme ~ OpKeywordChop priority => 1 |
1907
|
|
|
|
|
|
|
:lexeme ~ OpKeywordChown priority => 1 |
1908
|
|
|
|
|
|
|
:lexeme ~ OpKeywordChr priority => 1 |
1909
|
|
|
|
|
|
|
:lexeme ~ OpKeywordChroot priority => 1 |
1910
|
|
|
|
|
|
|
:lexeme ~ OpKeywordClose priority => 1 |
1911
|
|
|
|
|
|
|
:lexeme ~ OpKeywordClosedir priority => 1 |
1912
|
|
|
|
|
|
|
:lexeme ~ OpKeywordConnect priority => 1 |
1913
|
|
|
|
|
|
|
:lexeme ~ OpKeywordContinue priority => 1 |
1914
|
|
|
|
|
|
|
:lexeme ~ OpKeywordCos priority => 1 |
1915
|
|
|
|
|
|
|
:lexeme ~ OpKeywordCrypt priority => 1 |
1916
|
|
|
|
|
|
|
:lexeme ~ OpKeywordDbmclose priority => 1 |
1917
|
|
|
|
|
|
|
:lexeme ~ OpKeywordDbmopen priority => 1 |
1918
|
|
|
|
|
|
|
:lexeme ~ OpKeywordDefined priority => 1 |
1919
|
|
|
|
|
|
|
:lexeme ~ OpKeywordDelete priority => 1 |
1920
|
|
|
|
|
|
|
:lexeme ~ OpKeywordDie priority => 1 |
1921
|
|
|
|
|
|
|
:lexeme ~ OpKeywordDo priority => 1 |
1922
|
|
|
|
|
|
|
:lexeme ~ OpKeywordDump priority => 1 |
1923
|
|
|
|
|
|
|
:lexeme ~ OpKeywordEach priority => 1 |
1924
|
|
|
|
|
|
|
:lexeme ~ OpKeywordEof priority => 1 |
1925
|
|
|
|
|
|
|
:lexeme ~ OpKeywordEval priority => 1 |
1926
|
|
|
|
|
|
|
:lexeme ~ OpKeywordEvalbytes priority => 1 |
1927
|
|
|
|
|
|
|
:lexeme ~ OpKeywordExec priority => 1 |
1928
|
|
|
|
|
|
|
:lexeme ~ OpKeywordExists priority => 1 |
1929
|
|
|
|
|
|
|
:lexeme ~ OpKeywordExit priority => 1 |
1930
|
|
|
|
|
|
|
:lexeme ~ OpKeywordExp priority => 1 |
1931
|
|
|
|
|
|
|
:lexeme ~ OpKeywordFc priority => 1 |
1932
|
|
|
|
|
|
|
:lexeme ~ OpKeywordFor priority => 1 |
1933
|
|
|
|
|
|
|
:lexeme ~ OpKeywordForeach priority => 1 |
1934
|
|
|
|
|
|
|
:lexeme ~ OpKeywordFcntl priority => 1 |
1935
|
|
|
|
|
|
|
:lexeme ~ OpKeywordFileno priority => 1 |
1936
|
|
|
|
|
|
|
:lexeme ~ OpKeywordFlock priority => 1 |
1937
|
|
|
|
|
|
|
:lexeme ~ OpKeywordFork priority => 1 |
1938
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetc priority => 1 |
1939
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetlogin priority => 1 |
1940
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetpeername priority => 1 |
1941
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetpgrp priority => 1 |
1942
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetppid priority => 1 |
1943
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetpriority priority => 1 |
1944
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetpwnam priority => 1 |
1945
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetgrnam priority => 1 |
1946
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGethostbyname priority => 1 |
1947
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetnetbyname priority => 1 |
1948
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetprotobyname priority => 1 |
1949
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetpwuid priority => 1 |
1950
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetgrgid priority => 1 |
1951
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetservbyname priority => 1 |
1952
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGethostbyaddr priority => 1 |
1953
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetnetbyaddr priority => 1 |
1954
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetprotobynumber priority => 1 |
1955
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetservbyport priority => 1 |
1956
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetpwent priority => 1 |
1957
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetgrent priority => 1 |
1958
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGethostent priority => 1 |
1959
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetnetent priority => 1 |
1960
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetprotoent priority => 1 |
1961
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetservent priority => 1 |
1962
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSetpwent priority => 1 |
1963
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSetgrent priority => 1 |
1964
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSethostent priority => 1 |
1965
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSetnetent priority => 1 |
1966
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSetprotoent priority => 1 |
1967
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSetservent priority => 1 |
1968
|
|
|
|
|
|
|
:lexeme ~ OpKeywordEndpwent priority => 1 |
1969
|
|
|
|
|
|
|
:lexeme ~ OpKeywordEndgrent priority => 1 |
1970
|
|
|
|
|
|
|
:lexeme ~ OpKeywordEndhostent priority => 1 |
1971
|
|
|
|
|
|
|
:lexeme ~ OpKeywordEndnetent priority => 1 |
1972
|
|
|
|
|
|
|
:lexeme ~ OpKeywordEndprotoent priority => 1 |
1973
|
|
|
|
|
|
|
:lexeme ~ OpKeywordEndservent priority => 1 |
1974
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetsockname priority => 1 |
1975
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGetsockopt priority => 1 |
1976
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGlob priority => 1 |
1977
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGmtime priority => 1 |
1978
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGoto priority => 1 |
1979
|
|
|
|
|
|
|
:lexeme ~ OpKeywordGrep priority => 1 |
1980
|
|
|
|
|
|
|
:lexeme ~ OpKeywordHex priority => 1 |
1981
|
|
|
|
|
|
|
:lexeme ~ OpKeywordIndex priority => 1 |
1982
|
|
|
|
|
|
|
:lexeme ~ OpKeywordInt priority => 1 |
1983
|
|
|
|
|
|
|
:lexeme ~ OpKeywordIoctl priority => 1 |
1984
|
|
|
|
|
|
|
:lexeme ~ OpKeywordJoin priority => 1 |
1985
|
|
|
|
|
|
|
:lexeme ~ OpKeywordKeys priority => 1 |
1986
|
|
|
|
|
|
|
:lexeme ~ OpKeywordKill priority => 1 |
1987
|
|
|
|
|
|
|
:lexeme ~ OpKeywordLast priority => 1 |
1988
|
|
|
|
|
|
|
:lexeme ~ OpKeywordLc priority => 1 |
1989
|
|
|
|
|
|
|
:lexeme ~ OpKeywordLcfirst priority => 1 |
1990
|
|
|
|
|
|
|
:lexeme ~ OpKeywordLength priority => 1 |
1991
|
|
|
|
|
|
|
:lexeme ~ OpKeywordLink priority => 1 |
1992
|
|
|
|
|
|
|
:lexeme ~ OpKeywordListen priority => 1 |
1993
|
|
|
|
|
|
|
:lexeme ~ OpKeywordLocal priority => 1 |
1994
|
|
|
|
|
|
|
:lexeme ~ OpKeywordLocaltime priority => 1 |
1995
|
|
|
|
|
|
|
:lexeme ~ OpKeywordLock priority => 1 |
1996
|
|
|
|
|
|
|
:lexeme ~ OpKeywordLog priority => 1 |
1997
|
|
|
|
|
|
|
:lexeme ~ OpKeywordLstat priority => 1 |
1998
|
|
|
|
|
|
|
:lexeme ~ OpKeywordMap priority => 1 |
1999
|
|
|
|
|
|
|
:lexeme ~ OpKeywordMkdir priority => 1 |
2000
|
|
|
|
|
|
|
:lexeme ~ OpKeywordMsgctl priority => 1 |
2001
|
|
|
|
|
|
|
:lexeme ~ OpKeywordMsgget priority => 1 |
2002
|
|
|
|
|
|
|
:lexeme ~ OpKeywordMsgrcv priority => 1 |
2003
|
|
|
|
|
|
|
:lexeme ~ OpKeywordMsgsnd priority => 1 |
2004
|
|
|
|
|
|
|
:lexeme ~ OpKeywordMy priority => 1 |
2005
|
|
|
|
|
|
|
:lexeme ~ OpKeywordNext priority => 1 |
2006
|
|
|
|
|
|
|
:lexeme ~ OpKeywordNo priority => 1 |
2007
|
|
|
|
|
|
|
:lexeme ~ OpKeywordOct priority => 1 |
2008
|
|
|
|
|
|
|
:lexeme ~ OpKeywordOpen priority => 1 |
2009
|
|
|
|
|
|
|
:lexeme ~ OpKeywordOpendir priority => 1 |
2010
|
|
|
|
|
|
|
:lexeme ~ OpKeywordOrd priority => 1 |
2011
|
|
|
|
|
|
|
:lexeme ~ OpKeywordOur priority => 1 |
2012
|
|
|
|
|
|
|
:lexeme ~ OpKeywordPack priority => 1 |
2013
|
|
|
|
|
|
|
:lexeme ~ OpKeywordPackage priority => 1 |
2014
|
|
|
|
|
|
|
:lexeme ~ OpKeywordPipe priority => 1 |
2015
|
|
|
|
|
|
|
:lexeme ~ OpKeywordPop priority => 1 |
2016
|
|
|
|
|
|
|
:lexeme ~ OpKeywordPos priority => 1 |
2017
|
|
|
|
|
|
|
:lexeme ~ OpKeywordPrint priority => 1 |
2018
|
|
|
|
|
|
|
:lexeme ~ OpKeywordPrintf priority => 1 |
2019
|
|
|
|
|
|
|
:lexeme ~ OpKeywordPrototype priority => 1 |
2020
|
|
|
|
|
|
|
:lexeme ~ OpKeywordPush priority => 1 |
2021
|
|
|
|
|
|
|
:lexeme ~ OpKeywordQuotemeta priority => 1 |
2022
|
|
|
|
|
|
|
:lexeme ~ OpKeywordRand priority => 1 |
2023
|
|
|
|
|
|
|
:lexeme ~ OpKeywordRead priority => 1 |
2024
|
|
|
|
|
|
|
:lexeme ~ OpKeywordReaddir priority => 1 |
2025
|
|
|
|
|
|
|
:lexeme ~ OpKeywordReadline priority => 1 |
2026
|
|
|
|
|
|
|
:lexeme ~ OpKeywordReadlink priority => 1 |
2027
|
|
|
|
|
|
|
:lexeme ~ OpKeywordReadpipe priority => 1 |
2028
|
|
|
|
|
|
|
:lexeme ~ OpKeywordRecv priority => 1 |
2029
|
|
|
|
|
|
|
:lexeme ~ OpKeywordRedo priority => 1 |
2030
|
|
|
|
|
|
|
:lexeme ~ OpKeywordRef priority => 1 |
2031
|
|
|
|
|
|
|
:lexeme ~ OpKeywordRename priority => 1 |
2032
|
|
|
|
|
|
|
:lexeme ~ OpKeywordRequire priority => 1 |
2033
|
|
|
|
|
|
|
:lexeme ~ OpKeywordReset priority => 1 |
2034
|
|
|
|
|
|
|
:lexeme ~ OpKeywordReturn priority => 1 |
2035
|
|
|
|
|
|
|
:lexeme ~ OpKeywordReverse priority => 1 |
2036
|
|
|
|
|
|
|
:lexeme ~ OpKeywordRewinddir priority => 1 |
2037
|
|
|
|
|
|
|
:lexeme ~ OpKeywordRindex priority => 1 |
2038
|
|
|
|
|
|
|
:lexeme ~ OpKeywordRmdir priority => 1 |
2039
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSay priority => 1 |
2040
|
|
|
|
|
|
|
:lexeme ~ OpKeywordScalar priority => 1 |
2041
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSeek priority => 1 |
2042
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSeekdir priority => 1 |
2043
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSelect priority => 1 |
2044
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSemctl priority => 1 |
2045
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSemget priority => 1 |
2046
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSemop priority => 1 |
2047
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSend priority => 1 |
2048
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSetpgrp priority => 1 |
2049
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSetpriority priority => 1 |
2050
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSetsockopt priority => 1 |
2051
|
|
|
|
|
|
|
:lexeme ~ OpKeywordShift priority => 1 |
2052
|
|
|
|
|
|
|
:lexeme ~ OpKeywordShmctl priority => 1 |
2053
|
|
|
|
|
|
|
:lexeme ~ OpKeywordShmget priority => 1 |
2054
|
|
|
|
|
|
|
:lexeme ~ OpKeywordShmread priority => 1 |
2055
|
|
|
|
|
|
|
:lexeme ~ OpKeywordShmwrite priority => 1 |
2056
|
|
|
|
|
|
|
:lexeme ~ OpKeywordShutdown priority => 1 |
2057
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSin priority => 1 |
2058
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSleep priority => 1 |
2059
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSocket priority => 1 |
2060
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSocketpair priority => 1 |
2061
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSort priority => 1 |
2062
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSplice priority => 1 |
2063
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSplit priority => 1 |
2064
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSprintf priority => 1 |
2065
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSqrt priority => 1 |
2066
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSrand priority => 1 |
2067
|
|
|
|
|
|
|
:lexeme ~ OpKeywordStat priority => 1 |
2068
|
|
|
|
|
|
|
:lexeme ~ OpKeywordState priority => 1 |
2069
|
|
|
|
|
|
|
:lexeme ~ OpKeywordStudy priority => 1 |
2070
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSub priority => 1 |
2071
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSubstr priority => 1 |
2072
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSymlink priority => 1 |
2073
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSyscall priority => 1 |
2074
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSysopen priority => 1 |
2075
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSysread priority => 1 |
2076
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSysseek priority => 1 |
2077
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSystem priority => 1 |
2078
|
|
|
|
|
|
|
:lexeme ~ OpKeywordSyswrite priority => 1 |
2079
|
|
|
|
|
|
|
:lexeme ~ OpKeywordTell priority => 1 |
2080
|
|
|
|
|
|
|
:lexeme ~ OpKeywordTelldir priority => 1 |
2081
|
|
|
|
|
|
|
:lexeme ~ OpKeywordTie priority => 1 |
2082
|
|
|
|
|
|
|
:lexeme ~ OpKeywordTied priority => 1 |
2083
|
|
|
|
|
|
|
:lexeme ~ OpKeywordTime priority => 1 |
2084
|
|
|
|
|
|
|
:lexeme ~ OpKeywordTimes priority => 1 |
2085
|
|
|
|
|
|
|
:lexeme ~ OpKeywordTruncate priority => 1 |
2086
|
|
|
|
|
|
|
:lexeme ~ OpKeywordUc priority => 1 |
2087
|
|
|
|
|
|
|
:lexeme ~ OpKeywordUcfirst priority => 1 |
2088
|
|
|
|
|
|
|
:lexeme ~ OpKeywordUmask priority => 1 |
2089
|
|
|
|
|
|
|
:lexeme ~ OpKeywordUndef priority => 1 |
2090
|
|
|
|
|
|
|
:lexeme ~ OpKeywordUnlink priority => 1 |
2091
|
|
|
|
|
|
|
:lexeme ~ OpKeywordUnpack priority => 1 |
2092
|
|
|
|
|
|
|
:lexeme ~ OpKeywordUnshift priority => 1 |
2093
|
|
|
|
|
|
|
:lexeme ~ OpKeywordUntie priority => 1 |
2094
|
|
|
|
|
|
|
:lexeme ~ OpKeywordUse priority => 1 |
2095
|
|
|
|
|
|
|
:lexeme ~ OpKeywordUtime priority => 1 |
2096
|
|
|
|
|
|
|
:lexeme ~ OpKeywordValues priority => 1 |
2097
|
|
|
|
|
|
|
:lexeme ~ OpKeywordVec priority => 1 |
2098
|
|
|
|
|
|
|
:lexeme ~ OpKeywordWait priority => 1 |
2099
|
|
|
|
|
|
|
:lexeme ~ OpKeywordWaitpid priority => 1 |
2100
|
|
|
|
|
|
|
:lexeme ~ OpKeywordWantarray priority => 1 |
2101
|
|
|
|
|
|
|
:lexeme ~ OpKeywordWarn priority => 1 |
2102
|
|
|
|
|
|
|
:lexeme ~ OpKeywordWrite priority => 1 |
2103
|
|
|
|
|
|
|
|
2104
|
|
|
|
|
|
|
# OpAdd ("+") conflicts with OpUnary ("+") |
2105
|
|
|
|
|
|
|
# So when it's both, OpAdd should win |
2106
|
|
|
|
|
|
|
# (e.g., "sort $x + $y" should be OpAdd, not OpUnary) |
2107
|
|
|
|
|
|
|
:lexeme ~ OpAdd priority => 1 |
2108
|
|
|
|
|
|
|
|
2109
|
|
|
|
|
|
|
}; |
2110
|
|
|
|
|
|
|
|
2111
|
|
|
|
|
|
|
sub add_lexemes { |
2112
|
0
|
|
|
0
|
0
|
0
|
my ( $class, @items ) = @_; |
2113
|
|
|
|
|
|
|
|
2114
|
0
|
|
|
|
|
0
|
foreach my $item (@items) { |
2115
|
0
|
0
|
|
|
|
0
|
ref $item eq 'ARRAY' |
2116
|
|
|
|
|
|
|
or die 'add_lexemes( [NAME, VALUE], [NAME, VALUE] )'; |
2117
|
|
|
|
|
|
|
|
2118
|
0
|
|
|
|
|
0
|
$grammar_source .= "$item->[0] ~ '$item->[1]'\n"; |
2119
|
|
|
|
|
|
|
} |
2120
|
|
|
|
|
|
|
} |
2121
|
|
|
|
|
|
|
|
2122
|
|
|
|
|
|
|
sub add_keyword { |
2123
|
0
|
|
|
0
|
0
|
0
|
my ( $class, $name, $type, $value, $rules_arrayref ) = @_; |
2124
|
0
|
0
|
0
|
|
|
0
|
$name && $type && $value && $rules_arrayref |
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
2125
|
|
|
|
|
|
|
or die 'add_keyword( NAME_STR, TYPE_STR, VALUE_STR, RULES_ARRAYREF )'; |
2126
|
|
|
|
|
|
|
|
2127
|
0
|
0
|
|
|
|
0
|
ref $rules_arrayref eq 'ARRAY' |
2128
|
|
|
|
|
|
|
or die 'rules must be an arrayref'; |
2129
|
|
|
|
|
|
|
|
2130
|
0
|
0
|
|
|
|
0
|
$type =~ /^( nullary | unary | assign | list )$/xms |
2131
|
|
|
|
|
|
|
or die 'Type must be "nullary", "unary", "assign", or "list"'; |
2132
|
|
|
|
|
|
|
|
2133
|
0
|
0
|
|
|
|
0
|
grep !length, $name, $type, $value |
2134
|
|
|
|
|
|
|
and die 'name, type, value must have length'; |
2135
|
|
|
|
|
|
|
|
2136
|
0
|
|
|
|
|
0
|
$name = ucfirst $name; # Just in case |
2137
|
0
|
|
|
|
|
0
|
$type = ucfirst $type; |
2138
|
|
|
|
|
|
|
|
2139
|
0
|
|
|
|
|
0
|
my $rules_string = join "\n | ", $rules_arrayref->@*; |
2140
|
|
|
|
|
|
|
|
2141
|
0
|
|
|
|
|
0
|
$grammar_source .= qq{ |
2142
|
|
|
|
|
|
|
OpKeyword$name ~ '$value' |
2143
|
|
|
|
|
|
|
OpKeyword${name}Expr ::= $rules_string |
2144
|
|
|
|
|
|
|
:lexeme ~ OpKeyword${name} priority => 1 |
2145
|
|
|
|
|
|
|
}; |
2146
|
|
|
|
|
|
|
|
2147
|
0
|
|
|
|
|
0
|
my $type_rule = "Op${type}KeywordExpr"; |
2148
|
0
|
|
|
|
|
0
|
$grammar_source =~ s{($type_rule\s+::=)}{$1 OpKeyword${name}Expr | }xms; |
2149
|
|
|
|
|
|
|
} |
2150
|
|
|
|
|
|
|
|
2151
|
|
|
|
|
|
|
sub build_struct { |
2152
|
791
|
|
|
791
|
0
|
2798
|
my ( $rec, $initial_valueref ) = @_; |
2153
|
791
|
|
|
|
|
2177
|
my @values = ($initial_valueref); |
2154
|
|
|
|
|
|
|
|
2155
|
791
|
|
|
|
|
3206
|
while ( my $valueref = shift @values ) { |
2156
|
15020
|
100
|
|
|
|
15542
|
if ( ! ref ${$valueref} ) { |
|
15020
|
|
|
|
|
23559
|
|
2157
|
3814
|
|
|
|
|
5010
|
${$valueref} = { |
2158
|
|
|
|
|
|
|
'name' => '', |
2159
|
|
|
|
|
|
|
'type' => 'lexeme', |
2160
|
3814
|
|
|
|
|
5107
|
'value' => ${$valueref}, |
|
3814
|
|
|
|
|
9448
|
|
2161
|
|
|
|
|
|
|
}; |
2162
|
|
|
|
|
|
|
|
2163
|
3814
|
|
|
|
|
7751
|
next; |
2164
|
|
|
|
|
|
|
} |
2165
|
|
|
|
|
|
|
|
2166
|
11206
|
|
|
|
|
12178
|
my $name = shift @{ ${$valueref} }; |
|
11206
|
|
|
|
|
10989
|
|
|
11206
|
|
|
|
|
18516
|
|
2167
|
11206
|
|
|
|
|
11564
|
my $start_pos = shift @{ ${$valueref} }; |
|
11206
|
|
|
|
|
10948
|
|
|
11206
|
|
|
|
|
13034
|
|
2168
|
11206
|
|
|
|
|
11489
|
my $length = shift @{ ${$valueref} }; |
|
11206
|
|
|
|
|
11065
|
|
|
11206
|
|
|
|
|
13077
|
|
2169
|
11206
|
|
|
|
|
12336
|
my @children = @{ ${$valueref} }; |
|
11206
|
|
|
|
|
10808
|
|
|
11206
|
|
|
|
|
17560
|
|
2170
|
|
|
|
|
|
|
|
2171
|
11206
|
|
|
|
|
21143
|
my ( $line, $column ) = $rec->line_column($start_pos); |
2172
|
11206
|
|
|
|
|
101724
|
${$valueref} = { |
|
11206
|
|
|
|
|
15012
|
|
2173
|
|
|
|
|
|
|
'name' => $name, |
2174
|
|
|
|
|
|
|
'type' => 'rule', |
2175
|
|
|
|
|
|
|
'start_pos' => $start_pos, |
2176
|
|
|
|
|
|
|
'length' => $length, |
2177
|
|
|
|
|
|
|
'children' => \@children, |
2178
|
|
|
|
|
|
|
'line' => $line, |
2179
|
|
|
|
|
|
|
'column' => $column, |
2180
|
|
|
|
|
|
|
}; |
2181
|
|
|
|
|
|
|
|
2182
|
11206
|
|
|
|
|
12424
|
push @values, map \$_, @{ ${$valueref}->{'children'} } |
|
11206
|
|
|
|
|
10769
|
|
|
11206
|
|
|
|
|
32916
|
|
2183
|
|
|
|
|
|
|
} |
2184
|
|
|
|
|
|
|
} |
2185
|
|
|
|
|
|
|
|
2186
|
|
|
|
|
|
|
sub parse { |
2187
|
917
|
|
|
917
|
0
|
2572
|
my ($class, $text) = @_; |
2188
|
|
|
|
|
|
|
|
2189
|
917
|
|
|
|
|
2111
|
state $grammar = Marpa::R2::Scanless::G->new({ source => \$grammar_source }); |
2190
|
|
|
|
|
|
|
|
2191
|
917
|
|
|
|
|
59951958
|
my %args = ( |
2192
|
|
|
|
|
|
|
'grammar' => $grammar, |
2193
|
|
|
|
|
|
|
|
2194
|
|
|
|
|
|
|
DEBUG() |
2195
|
|
|
|
|
|
|
? ( |
2196
|
|
|
|
|
|
|
'trace_terminals' => 1, |
2197
|
|
|
|
|
|
|
'trace_values' => 1, |
2198
|
|
|
|
|
|
|
) |
2199
|
|
|
|
|
|
|
: (), |
2200
|
|
|
|
|
|
|
); |
2201
|
|
|
|
|
|
|
|
2202
|
917
|
|
|
|
|
5528
|
my $rec = Marpa::R2::Scanless::R->new( \%args ); |
2203
|
|
|
|
|
|
|
|
2204
|
917
|
|
|
|
|
462838
|
my @values; |
2205
|
|
|
|
|
|
|
eval { |
2206
|
917
|
|
|
|
|
4103
|
my $res = $rec->read( \$text ); |
2207
|
795
|
|
|
|
|
1259157
|
while ( my $value = $rec->value() ) { |
2208
|
791
|
|
|
|
|
220429184
|
build_struct( $rec, $value ); |
2209
|
791
|
|
|
|
|
3783
|
push @values, $$value; |
2210
|
|
|
|
|
|
|
} |
2211
|
795
|
|
|
|
|
60964
|
1; |
2212
|
|
|
|
|
|
|
} |
2213
|
917
|
100
|
|
|
|
2015
|
or do { |
2214
|
122
|
|
|
|
|
156033
|
my $err = $@; |
2215
|
122
|
50
|
|
|
|
408
|
if (!@values) { |
2216
|
122
|
|
|
|
|
375
|
for my $nterm (reverse qw/Program BlockStatement Statement NonBraceExprComma BlockLevelExpression Expression SubCall VarIdentExpr SubNameExpr/) { |
2217
|
414
|
|
|
|
|
1762
|
my ($start, $length) = $rec->last_completed($nterm); |
2218
|
414
|
100
|
|
|
|
1237389
|
next unless defined $start; |
2219
|
110
|
|
|
|
|
485
|
my $range = $rec->substring($start, $length); |
2220
|
110
|
|
|
|
|
4545
|
my $expect = $rec->terminals_expected(); |
2221
|
110
|
|
|
|
|
22986
|
my $progress = $rec->show_progress(); |
2222
|
110
|
|
|
|
|
1216982
|
die "$err\nFailed to parse past: $range (char $start, length $length), expected " . ( join ',', @{$expect} );# . "\n$progress"; |
|
110
|
|
|
|
|
4391
|
|
2223
|
|
|
|
|
|
|
} |
2224
|
12
|
|
|
|
|
485
|
die "Failed to parse, dunno why."; |
2225
|
|
|
|
|
|
|
} |
2226
|
|
|
|
|
|
|
}; |
2227
|
|
|
|
|
|
|
|
2228
|
795
|
100
|
|
|
|
2535
|
if (!@values) { |
2229
|
4
|
|
|
|
|
19
|
my ( $g1_start, $g1_length ) = $rec->last_completed('Program'); |
2230
|
4
|
100
|
|
|
|
9534
|
die "Program could not be successfully parsed\n" if not defined $g1_start; |
2231
|
2
|
|
|
|
|
8
|
my $last_expression = $rec->substring( $g1_start, $g1_length ); |
2232
|
2
|
|
|
|
|
109
|
die "Last text successfully parsed was: $last_expression\n"; |
2233
|
|
|
|
|
|
|
} |
2234
|
|
|
|
|
|
|
|
2235
|
791
|
|
|
|
|
592598
|
return @values; |
2236
|
|
|
|
|
|
|
} |
2237
|
|
|
|
|
|
|
|
2238
|
|
|
|
|
|
|
1; |
2239
|
|
|
|
|
|
|
|
2240
|
|
|
|
|
|
|
__END__ |