racc 1.5.2 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/README.ja.rdoc +0 -1
  3. data/README.rdoc +6 -7
  4. data/{rdoc → doc}/en/NEWS.en.rdoc +0 -0
  5. data/{rdoc → doc}/en/grammar.en.rdoc +27 -31
  6. data/doc/en/grammar2.en.rdoc +219 -0
  7. data/{rdoc → doc}/ja/NEWS.ja.rdoc +0 -0
  8. data/{rdoc → doc}/ja/command.ja.html +0 -0
  9. data/{rdoc → doc}/ja/debug.ja.rdoc +0 -0
  10. data/{rdoc → doc}/ja/grammar.ja.rdoc +0 -0
  11. data/{rdoc → doc}/ja/index.ja.html +0 -0
  12. data/{rdoc → doc}/ja/parser.ja.rdoc +0 -0
  13. data/{rdoc → doc}/ja/usage.ja.html +0 -0
  14. data/ext/racc/cparse/cparse.c +1 -1
  15. data/ext/racc/cparse/extconf.rb +1 -0
  16. data/lib/racc/info.rb +1 -1
  17. data/lib/racc/parser-text.rb +1 -1
  18. data/lib/racc/parser.rb +1 -1
  19. data/lib/racc/parserfilegenerator.rb +0 -44
  20. data/lib/racc/statetransitiontable.rb +2 -8
  21. metadata +15 -121
  22. data/Rakefile +0 -79
  23. data/ext/racc/com/headius/racc/Cparse.java +0 -849
  24. data/lib/racc/pre-setup +0 -13
  25. data/sample/array.y +0 -67
  26. data/sample/array2.y +0 -59
  27. data/sample/calc-ja.y +0 -66
  28. data/sample/calc.y +0 -65
  29. data/sample/conflict.y +0 -15
  30. data/sample/hash.y +0 -60
  31. data/sample/lalr.y +0 -17
  32. data/sample/lists.y +0 -57
  33. data/sample/syntax.y +0 -46
  34. data/sample/yyerr.y +0 -46
  35. data/test/assets/cadenza.y +0 -170
  36. data/test/assets/cast.y +0 -926
  37. data/test/assets/chk.y +0 -126
  38. data/test/assets/conf.y +0 -16
  39. data/test/assets/csspool.y +0 -729
  40. data/test/assets/digraph.y +0 -29
  41. data/test/assets/echk.y +0 -118
  42. data/test/assets/edtf.y +0 -583
  43. data/test/assets/err.y +0 -60
  44. data/test/assets/error_recovery.y +0 -35
  45. data/test/assets/expect.y +0 -7
  46. data/test/assets/firstline.y +0 -4
  47. data/test/assets/huia.y +0 -318
  48. data/test/assets/ichk.y +0 -102
  49. data/test/assets/intp.y +0 -546
  50. data/test/assets/journey.y +0 -47
  51. data/test/assets/liquor.y +0 -313
  52. data/test/assets/machete.y +0 -423
  53. data/test/assets/macruby.y +0 -2197
  54. data/test/assets/mailp.y +0 -437
  55. data/test/assets/mediacloth.y +0 -599
  56. data/test/assets/mof.y +0 -649
  57. data/test/assets/namae.y +0 -302
  58. data/test/assets/nasl.y +0 -626
  59. data/test/assets/newsyn.y +0 -25
  60. data/test/assets/noend.y +0 -4
  61. data/test/assets/nokogiri-css.y +0 -255
  62. data/test/assets/nonass.y +0 -41
  63. data/test/assets/normal.y +0 -27
  64. data/test/assets/norule.y +0 -4
  65. data/test/assets/nullbug1.y +0 -25
  66. data/test/assets/nullbug2.y +0 -15
  67. data/test/assets/opal.y +0 -1807
  68. data/test/assets/opt.y +0 -123
  69. data/test/assets/percent.y +0 -35
  70. data/test/assets/php_serialization.y +0 -98
  71. data/test/assets/recv.y +0 -97
  72. data/test/assets/riml.y +0 -665
  73. data/test/assets/rrconf.y +0 -14
  74. data/test/assets/ruby18.y +0 -1943
  75. data/test/assets/ruby19.y +0 -2174
  76. data/test/assets/ruby20.y +0 -2350
  77. data/test/assets/ruby21.y +0 -2359
  78. data/test/assets/ruby22.y +0 -2381
  79. data/test/assets/scan.y +0 -72
  80. data/test/assets/syntax.y +0 -50
  81. data/test/assets/tp_plus.y +0 -622
  82. data/test/assets/twowaysql.y +0 -278
  83. data/test/assets/unterm.y +0 -5
  84. data/test/assets/useless.y +0 -12
  85. data/test/assets/yyerr.y +0 -46
  86. data/test/bench.y +0 -36
  87. data/test/helper.rb +0 -115
  88. data/test/infini.y +0 -8
  89. data/test/regress/cadenza +0 -796
  90. data/test/regress/cast +0 -3428
  91. data/test/regress/csspool +0 -2314
  92. data/test/regress/edtf +0 -1794
  93. data/test/regress/huia +0 -1392
  94. data/test/regress/journey +0 -222
  95. data/test/regress/liquor +0 -885
  96. data/test/regress/machete +0 -833
  97. data/test/regress/mediacloth +0 -1463
  98. data/test/regress/mof +0 -1368
  99. data/test/regress/namae +0 -634
  100. data/test/regress/nasl +0 -2058
  101. data/test/regress/nokogiri-css +0 -836
  102. data/test/regress/opal +0 -6431
  103. data/test/regress/php_serialization +0 -336
  104. data/test/regress/riml +0 -3283
  105. data/test/regress/ruby18 +0 -6344
  106. data/test/regress/ruby22 +0 -7460
  107. data/test/regress/tp_plus +0 -1933
  108. data/test/regress/twowaysql +0 -556
  109. data/test/scandata/brace +0 -7
  110. data/test/scandata/gvar +0 -1
  111. data/test/scandata/normal +0 -4
  112. data/test/scandata/percent +0 -18
  113. data/test/scandata/slash +0 -10
  114. data/test/src.intp +0 -34
  115. data/test/start.y +0 -20
  116. data/test/test_chk_y.rb +0 -52
  117. data/test/test_grammar_file_parser.rb +0 -15
  118. data/test/test_racc_command.rb +0 -339
  119. data/test/test_scan_y.rb +0 -52
  120. data/test/testscanner.rb +0 -51
  121. data/web/racc.en.rhtml +0 -42
  122. data/web/racc.ja.rhtml +0 -51
data/test/assets/ruby22.y DELETED
@@ -1,2381 +0,0 @@
1
- # Copyright (c) 2013 Peter Zotov <whitequark@whitequark.org>
2
- #
3
- # Parts of the source are derived from ruby_parser:
4
- # Copyright (c) Ryan Davis, seattle.rb
5
- #
6
- # MIT License
7
- #
8
- # Permission is hereby granted, free of charge, to any person obtaining
9
- # a copy of this software and associated documentation files (the
10
- # "Software"), to deal in the Software without restriction, including
11
- # without limitation the rights to use, copy, modify, merge, publish,
12
- # distribute, sublicense, and/or sell copies of the Software, and to
13
- # permit persons to whom the Software is furnished to do so, subject to
14
- # the following conditions:
15
- #
16
- # The above copyright notice and this permission notice shall be
17
- # included in all copies or substantial portions of the Software.
18
- #
19
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
-
27
- class Parser::Ruby22
28
-
29
- token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
30
- kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT
31
- kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER
32
- kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD
33
- kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__
34
- k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT
35
- tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT
36
- tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ
37
- tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF
38
- tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN
39
- tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE
40
- tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE
41
- tDSTAR tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY
42
- tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tREGEXP_OPT
43
- tWORDS_BEG tQWORDS_BEG tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DBEG
44
- tSTRING_DVAR tSTRING_END tSTRING_DEND tSTRING tSYMBOL
45
- tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER
46
- tRATIONAL tIMAGINARY tLABEL_END
47
-
48
- prechigh
49
- right tBANG tTILDE tUPLUS
50
- right tPOW
51
- right tUMINUS_NUM tUMINUS
52
- left tSTAR2 tDIVIDE tPERCENT
53
- left tPLUS tMINUS
54
- left tLSHFT tRSHFT
55
- left tAMPER2
56
- left tPIPE tCARET
57
- left tGT tGEQ tLT tLEQ
58
- nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH
59
- left tANDOP
60
- left tOROP
61
- nonassoc tDOT2 tDOT3
62
- right tEH tCOLON
63
- left kRESCUE_MOD
64
- right tEQL tOP_ASGN
65
- nonassoc kDEFINED
66
- right kNOT
67
- left kOR kAND
68
- nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD
69
- nonassoc tLBRACE_ARG
70
- nonassoc tLOWEST
71
- preclow
72
-
73
- rule
74
-
75
- program: top_compstmt
76
-
77
- top_compstmt: top_stmts opt_terms
78
- {
79
- result = @builder.compstmt(val[0])
80
- }
81
-
82
- top_stmts: # nothing
83
- {
84
- result = []
85
- }
86
- | top_stmt
87
- {
88
- result = [ val[0] ]
89
- }
90
- | top_stmts terms top_stmt
91
- {
92
- result = val[0] << val[2]
93
- }
94
- | error top_stmt
95
- {
96
- result = [ val[1] ]
97
- }
98
-
99
- top_stmt: stmt
100
- | klBEGIN tLCURLY top_compstmt tRCURLY
101
- {
102
- result = @builder.preexe(val[0], val[1], val[2], val[3])
103
- }
104
-
105
- bodystmt: compstmt opt_rescue opt_else opt_ensure
106
- {
107
- rescue_bodies = val[1]
108
- else_t, else_ = val[2]
109
- ensure_t, ensure_ = val[3]
110
-
111
- if rescue_bodies.empty? && !else_.nil?
112
- diagnostic :warning, :useless_else, nil, else_t
113
- end
114
-
115
- result = @builder.begin_body(val[0],
116
- rescue_bodies,
117
- else_t, else_,
118
- ensure_t, ensure_)
119
- }
120
-
121
- compstmt: stmts opt_terms
122
- {
123
- result = @builder.compstmt(val[0])
124
- }
125
-
126
- stmts: # nothing
127
- {
128
- result = []
129
- }
130
- | stmt_or_begin
131
- {
132
- result = [ val[0] ]
133
- }
134
- | stmts terms stmt_or_begin
135
- {
136
- result = val[0] << val[2]
137
- }
138
- | error stmt
139
- {
140
- result = [ val[1] ]
141
- }
142
-
143
- stmt_or_begin: stmt
144
- | klBEGIN tLCURLY top_compstmt tRCURLY
145
- {
146
- diagnostic :error, :begin_in_method, nil, val[0]
147
- }
148
-
149
- stmt: kALIAS fitem
150
- {
151
- @lexer.state = :expr_fname
152
- }
153
- fitem
154
- {
155
- result = @builder.alias(val[0], val[1], val[3])
156
- }
157
- | kALIAS tGVAR tGVAR
158
- {
159
- result = @builder.alias(val[0],
160
- @builder.gvar(val[1]),
161
- @builder.gvar(val[2]))
162
- }
163
- | kALIAS tGVAR tBACK_REF
164
- {
165
- result = @builder.alias(val[0],
166
- @builder.gvar(val[1]),
167
- @builder.back_ref(val[2]))
168
- }
169
- | kALIAS tGVAR tNTH_REF
170
- {
171
- diagnostic :error, :nth_ref_alias, nil, val[2]
172
- }
173
- | kUNDEF undef_list
174
- {
175
- result = @builder.undef_method(val[0], val[1])
176
- }
177
- | stmt kIF_MOD expr_value
178
- {
179
- result = @builder.condition_mod(val[0], nil,
180
- val[1], val[2])
181
- }
182
- | stmt kUNLESS_MOD expr_value
183
- {
184
- result = @builder.condition_mod(nil, val[0],
185
- val[1], val[2])
186
- }
187
- | stmt kWHILE_MOD expr_value
188
- {
189
- result = @builder.loop_mod(:while, val[0], val[1], val[2])
190
- }
191
- | stmt kUNTIL_MOD expr_value
192
- {
193
- result = @builder.loop_mod(:until, val[0], val[1], val[2])
194
- }
195
- | stmt kRESCUE_MOD stmt
196
- {
197
- rescue_body = @builder.rescue_body(val[1],
198
- nil, nil, nil,
199
- nil, val[2])
200
-
201
- result = @builder.begin_body(val[0], [ rescue_body ])
202
- }
203
- | klEND tLCURLY compstmt tRCURLY
204
- {
205
- result = @builder.postexe(val[0], val[1], val[2], val[3])
206
- }
207
- | command_asgn
208
- | mlhs tEQL command_call
209
- {
210
- result = @builder.multi_assign(val[0], val[1], val[2])
211
- }
212
- | var_lhs tOP_ASGN command_call
213
- {
214
- result = @builder.op_assign(val[0], val[1], val[2])
215
- }
216
- | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call
217
- {
218
- result = @builder.op_assign(
219
- @builder.index(
220
- val[0], val[1], val[2], val[3]),
221
- val[4], val[5])
222
- }
223
- | primary_value tDOT tIDENTIFIER tOP_ASGN command_call
224
- {
225
- result = @builder.op_assign(
226
- @builder.call_method(
227
- val[0], val[1], val[2]),
228
- val[3], val[4])
229
- }
230
- | primary_value tDOT tCONSTANT tOP_ASGN command_call
231
- {
232
- result = @builder.op_assign(
233
- @builder.call_method(
234
- val[0], val[1], val[2]),
235
- val[3], val[4])
236
- }
237
- | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call
238
- {
239
- result = @builder.op_assign(
240
- @builder.call_method(
241
- val[0], val[1], val[2]),
242
- val[3], val[4])
243
- }
244
- | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call
245
- {
246
- result = @builder.op_assign(
247
- @builder.call_method(
248
- val[0], val[1], val[2]),
249
- val[3], val[4])
250
- }
251
- | backref tOP_ASGN command_call
252
- {
253
- @builder.op_assign(val[0], val[1], val[2])
254
- }
255
- | lhs tEQL mrhs
256
- {
257
- result = @builder.assign(val[0], val[1],
258
- @builder.array(nil, val[2], nil))
259
- }
260
- | mlhs tEQL mrhs_arg
261
- {
262
- result = @builder.multi_assign(val[0], val[1], val[2])
263
- }
264
- | expr
265
-
266
- command_asgn: lhs tEQL command_call
267
- {
268
- result = @builder.assign(val[0], val[1], val[2])
269
- }
270
- | lhs tEQL command_asgn
271
- {
272
- result = @builder.assign(val[0], val[1], val[2])
273
- }
274
-
275
- expr: command_call
276
- | expr kAND expr
277
- {
278
- result = @builder.logical_op(:and, val[0], val[1], val[2])
279
- }
280
- | expr kOR expr
281
- {
282
- result = @builder.logical_op(:or, val[0], val[1], val[2])
283
- }
284
- | kNOT opt_nl expr
285
- {
286
- result = @builder.not_op(val[0], nil, val[2], nil)
287
- }
288
- | tBANG command_call
289
- {
290
- result = @builder.not_op(val[0], nil, val[1], nil)
291
- }
292
- | arg
293
-
294
- expr_value: expr
295
-
296
- command_call: command
297
- | block_command
298
-
299
- block_command: block_call
300
- | block_call dot_or_colon operation2 command_args
301
- {
302
- result = @builder.call_method(val[0], val[1], val[2],
303
- nil, val[3], nil)
304
- }
305
-
306
- cmd_brace_block: tLBRACE_ARG
307
- {
308
- @static_env.extend_dynamic
309
- }
310
- opt_block_param compstmt tRCURLY
311
- {
312
- result = [ val[0], val[2], val[3], val[4] ]
313
-
314
- @static_env.unextend
315
- }
316
-
317
- fcall: operation
318
-
319
- command: fcall command_args =tLOWEST
320
- {
321
- result = @builder.call_method(nil, nil, val[0],
322
- nil, val[1], nil)
323
- }
324
- | fcall command_args cmd_brace_block
325
- {
326
- method_call = @builder.call_method(nil, nil, val[0],
327
- nil, val[1], nil)
328
-
329
- begin_t, args, body, end_t = val[2]
330
- result = @builder.block(method_call,
331
- begin_t, args, body, end_t)
332
- }
333
- | primary_value tDOT operation2 command_args =tLOWEST
334
- {
335
- result = @builder.call_method(val[0], val[1], val[2],
336
- nil, val[3], nil)
337
- }
338
- | primary_value tDOT operation2 command_args cmd_brace_block
339
- {
340
- method_call = @builder.call_method(val[0], val[1], val[2],
341
- nil, val[3], nil)
342
-
343
- begin_t, args, body, end_t = val[4]
344
- result = @builder.block(method_call,
345
- begin_t, args, body, end_t)
346
- }
347
- | primary_value tCOLON2 operation2 command_args =tLOWEST
348
- {
349
- result = @builder.call_method(val[0], val[1], val[2],
350
- nil, val[3], nil)
351
- }
352
- | primary_value tCOLON2 operation2 command_args cmd_brace_block
353
- {
354
- method_call = @builder.call_method(val[0], val[1], val[2],
355
- nil, val[3], nil)
356
-
357
- begin_t, args, body, end_t = val[4]
358
- result = @builder.block(method_call,
359
- begin_t, args, body, end_t)
360
- }
361
- | kSUPER command_args
362
- {
363
- result = @builder.keyword_cmd(:super, val[0],
364
- nil, val[1], nil)
365
- }
366
- | kYIELD command_args
367
- {
368
- result = @builder.keyword_cmd(:yield, val[0],
369
- nil, val[1], nil)
370
- }
371
- | kRETURN call_args
372
- {
373
- result = @builder.keyword_cmd(:return, val[0],
374
- nil, val[1], nil)
375
- }
376
- | kBREAK call_args
377
- {
378
- result = @builder.keyword_cmd(:break, val[0],
379
- nil, val[1], nil)
380
- }
381
- | kNEXT call_args
382
- {
383
- result = @builder.keyword_cmd(:next, val[0],
384
- nil, val[1], nil)
385
- }
386
-
387
- mlhs: mlhs_basic
388
- {
389
- result = @builder.multi_lhs(nil, val[0], nil)
390
- }
391
- | tLPAREN mlhs_inner rparen
392
- {
393
- result = @builder.begin(val[0], val[1], val[2])
394
- }
395
-
396
- mlhs_inner: mlhs_basic
397
- {
398
- result = @builder.multi_lhs(nil, val[0], nil)
399
- }
400
- | tLPAREN mlhs_inner rparen
401
- {
402
- result = @builder.multi_lhs(val[0], val[1], val[2])
403
- }
404
-
405
- mlhs_basic: mlhs_head
406
- | mlhs_head mlhs_item
407
- {
408
- result = val[0].
409
- push(val[1])
410
- }
411
- | mlhs_head tSTAR mlhs_node
412
- {
413
- result = val[0].
414
- push(@builder.splat(val[1], val[2]))
415
- }
416
- | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post
417
- {
418
- result = val[0].
419
- push(@builder.splat(val[1], val[2])).
420
- concat(val[4])
421
- }
422
- | mlhs_head tSTAR
423
- {
424
- result = val[0].
425
- push(@builder.splat(val[1]))
426
- }
427
- | mlhs_head tSTAR tCOMMA mlhs_post
428
- {
429
- result = val[0].
430
- push(@builder.splat(val[1])).
431
- concat(val[3])
432
- }
433
- | tSTAR mlhs_node
434
- {
435
- result = [ @builder.splat(val[0], val[1]) ]
436
- }
437
- | tSTAR mlhs_node tCOMMA mlhs_post
438
- {
439
- result = [ @builder.splat(val[0], val[1]),
440
- *val[3] ]
441
- }
442
- | tSTAR
443
- {
444
- result = [ @builder.splat(val[0]) ]
445
- }
446
- | tSTAR tCOMMA mlhs_post
447
- {
448
- result = [ @builder.splat(val[0]),
449
- *val[2] ]
450
- }
451
-
452
- mlhs_item: mlhs_node
453
- | tLPAREN mlhs_inner rparen
454
- {
455
- result = @builder.begin(val[0], val[1], val[2])
456
- }
457
-
458
- mlhs_head: mlhs_item tCOMMA
459
- {
460
- result = [ val[0] ]
461
- }
462
- | mlhs_head mlhs_item tCOMMA
463
- {
464
- result = val[0] << val[1]
465
- }
466
-
467
- mlhs_post: mlhs_item
468
- {
469
- result = [ val[0] ]
470
- }
471
- | mlhs_post tCOMMA mlhs_item
472
- {
473
- result = val[0] << val[2]
474
- }
475
-
476
- mlhs_node: user_variable
477
- {
478
- result = @builder.assignable(val[0])
479
- }
480
- | keyword_variable
481
- {
482
- result = @builder.assignable(val[0])
483
- }
484
- | primary_value tLBRACK2 opt_call_args rbracket
485
- {
486
- result = @builder.index_asgn(val[0], val[1], val[2], val[3])
487
- }
488
- | primary_value tDOT tIDENTIFIER
489
- {
490
- result = @builder.attr_asgn(val[0], val[1], val[2])
491
- }
492
- | primary_value tCOLON2 tIDENTIFIER
493
- {
494
- result = @builder.attr_asgn(val[0], val[1], val[2])
495
- }
496
- | primary_value tDOT tCONSTANT
497
- {
498
- result = @builder.attr_asgn(val[0], val[1], val[2])
499
- }
500
- | primary_value tCOLON2 tCONSTANT
501
- {
502
- result = @builder.assignable(
503
- @builder.const_fetch(val[0], val[1], val[2]))
504
- }
505
- | tCOLON3 tCONSTANT
506
- {
507
- result = @builder.assignable(
508
- @builder.const_global(val[0], val[1]))
509
- }
510
- | backref
511
- {
512
- result = @builder.assignable(val[0])
513
- }
514
-
515
- lhs: user_variable
516
- {
517
- result = @builder.assignable(val[0])
518
- }
519
- | keyword_variable
520
- {
521
- result = @builder.assignable(val[0])
522
- }
523
- | primary_value tLBRACK2 opt_call_args rbracket
524
- {
525
- result = @builder.index_asgn(val[0], val[1], val[2], val[3])
526
- }
527
- | primary_value tDOT tIDENTIFIER
528
- {
529
- result = @builder.attr_asgn(val[0], val[1], val[2])
530
- }
531
- | primary_value tCOLON2 tIDENTIFIER
532
- {
533
- result = @builder.attr_asgn(val[0], val[1], val[2])
534
- }
535
- | primary_value tDOT tCONSTANT
536
- {
537
- result = @builder.attr_asgn(val[0], val[1], val[2])
538
- }
539
- | primary_value tCOLON2 tCONSTANT
540
- {
541
- result = @builder.assignable(
542
- @builder.const_fetch(val[0], val[1], val[2]))
543
- }
544
- | tCOLON3 tCONSTANT
545
- {
546
- result = @builder.assignable(
547
- @builder.const_global(val[0], val[1]))
548
- }
549
- | backref
550
- {
551
- result = @builder.assignable(val[0])
552
- }
553
-
554
- cname: tIDENTIFIER
555
- {
556
- diagnostic :error, :module_name_const, nil, val[0]
557
- }
558
- | tCONSTANT
559
-
560
- cpath: tCOLON3 cname
561
- {
562
- result = @builder.const_global(val[0], val[1])
563
- }
564
- | cname
565
- {
566
- result = @builder.const(val[0])
567
- }
568
- | primary_value tCOLON2 cname
569
- {
570
- result = @builder.const_fetch(val[0], val[1], val[2])
571
- }
572
-
573
- fname: tIDENTIFIER | tCONSTANT | tFID
574
- | op
575
- | reswords
576
-
577
- fsym: fname
578
- {
579
- result = @builder.symbol(val[0])
580
- }
581
- | symbol
582
-
583
- fitem: fsym
584
- | dsym
585
-
586
- undef_list: fitem
587
- {
588
- result = [ val[0] ]
589
- }
590
- | undef_list tCOMMA
591
- {
592
- @lexer.state = :expr_fname
593
- }
594
- fitem
595
- {
596
- result = val[0] << val[3]
597
- }
598
-
599
- op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ
600
- | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ
601
- | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2
602
- | tSTAR | tDIVIDE | tPERCENT | tPOW | tBANG | tTILDE
603
- | tUPLUS | tUMINUS | tAREF | tASET | tDSTAR | tBACK_REF2
604
-
605
- reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND
606
- | kALIAS | kAND | kBEGIN | kBREAK | kCASE
607
- | kCLASS | kDEF | kDEFINED | kDO | kELSE
608
- | kELSIF | kEND | kENSURE | kFALSE | kFOR
609
- | kIN | kMODULE | kNEXT | kNIL | kNOT
610
- | kOR | kREDO | kRESCUE | kRETRY | kRETURN
611
- | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF
612
- | kWHEN | kYIELD | kIF | kUNLESS | kWHILE
613
- | kUNTIL
614
-
615
- arg: lhs tEQL arg
616
- {
617
- result = @builder.assign(val[0], val[1], val[2])
618
- }
619
- | lhs tEQL arg kRESCUE_MOD arg
620
- {
621
- rescue_body = @builder.rescue_body(val[3],
622
- nil, nil, nil,
623
- nil, val[4])
624
-
625
- rescue_ = @builder.begin_body(val[2], [ rescue_body ])
626
-
627
- result = @builder.assign(val[0], val[1], rescue_)
628
- }
629
- | var_lhs tOP_ASGN arg
630
- {
631
- result = @builder.op_assign(val[0], val[1], val[2])
632
- }
633
- | var_lhs tOP_ASGN arg kRESCUE_MOD arg
634
- {
635
- rescue_body = @builder.rescue_body(val[3],
636
- nil, nil, nil,
637
- nil, val[4])
638
-
639
- rescue_ = @builder.begin_body(val[2], [ rescue_body ])
640
-
641
- result = @builder.op_assign(val[0], val[1], rescue_)
642
- }
643
- | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg
644
- {
645
- result = @builder.op_assign(
646
- @builder.index(
647
- val[0], val[1], val[2], val[3]),
648
- val[4], val[5])
649
- }
650
- | primary_value tDOT tIDENTIFIER tOP_ASGN arg
651
- {
652
- result = @builder.op_assign(
653
- @builder.call_method(
654
- val[0], val[1], val[2]),
655
- val[3], val[4])
656
- }
657
- | primary_value tDOT tCONSTANT tOP_ASGN arg
658
- {
659
- result = @builder.op_assign(
660
- @builder.call_method(
661
- val[0], val[1], val[2]),
662
- val[3], val[4])
663
- }
664
- | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg
665
- {
666
- result = @builder.op_assign(
667
- @builder.call_method(
668
- val[0], val[1], val[2]),
669
- val[3], val[4])
670
- }
671
- | primary_value tCOLON2 tCONSTANT tOP_ASGN arg
672
- {
673
- const = @builder.const_op_assignable(
674
- @builder.const_fetch(val[0], val[1], val[2]))
675
- result = @builder.op_assign(const, val[3], val[4])
676
- }
677
- | tCOLON3 tCONSTANT tOP_ASGN arg
678
- {
679
- const = @builder.const_op_assignable(
680
- @builder.const_global(val[0], val[1]))
681
- result = @builder.op_assign(const, val[2], val[3])
682
- }
683
- | backref tOP_ASGN arg
684
- {
685
- result = @builder.op_assign(val[0], val[1], val[2])
686
- }
687
- | arg tDOT2 arg
688
- {
689
- result = @builder.range_inclusive(val[0], val[1], val[2])
690
- }
691
- | arg tDOT3 arg
692
- {
693
- result = @builder.range_exclusive(val[0], val[1], val[2])
694
- }
695
- | arg tPLUS arg
696
- {
697
- result = @builder.binary_op(val[0], val[1], val[2])
698
- }
699
- | arg tMINUS arg
700
- {
701
- result = @builder.binary_op(val[0], val[1], val[2])
702
- }
703
- | arg tSTAR2 arg
704
- {
705
- result = @builder.binary_op(val[0], val[1], val[2])
706
- }
707
- | arg tDIVIDE arg
708
- {
709
- result = @builder.binary_op(val[0], val[1], val[2])
710
- }
711
- | arg tPERCENT arg
712
- {
713
- result = @builder.binary_op(val[0], val[1], val[2])
714
- }
715
- | arg tPOW arg
716
- {
717
- result = @builder.binary_op(val[0], val[1], val[2])
718
- }
719
- | tUMINUS_NUM simple_numeric tPOW arg
720
- {
721
- result = @builder.unary_op(val[0],
722
- @builder.binary_op(
723
- val[1], val[2], val[3]))
724
- }
725
- | tUPLUS arg
726
- {
727
- result = @builder.unary_op(val[0], val[1])
728
- }
729
- | tUMINUS arg
730
- {
731
- result = @builder.unary_op(val[0], val[1])
732
- }
733
- | arg tPIPE arg
734
- {
735
- result = @builder.binary_op(val[0], val[1], val[2])
736
- }
737
- | arg tCARET arg
738
- {
739
- result = @builder.binary_op(val[0], val[1], val[2])
740
- }
741
- | arg tAMPER2 arg
742
- {
743
- result = @builder.binary_op(val[0], val[1], val[2])
744
- }
745
- | arg tCMP arg
746
- {
747
- result = @builder.binary_op(val[0], val[1], val[2])
748
- }
749
- | arg tGT arg
750
- {
751
- result = @builder.binary_op(val[0], val[1], val[2])
752
- }
753
- | arg tGEQ arg
754
- {
755
- result = @builder.binary_op(val[0], val[1], val[2])
756
- }
757
- | arg tLT arg
758
- {
759
- result = @builder.binary_op(val[0], val[1], val[2])
760
- }
761
- | arg tLEQ arg
762
- {
763
- result = @builder.binary_op(val[0], val[1], val[2])
764
- }
765
- | arg tEQ arg
766
- {
767
- result = @builder.binary_op(val[0], val[1], val[2])
768
- }
769
- | arg tEQQ arg
770
- {
771
- result = @builder.binary_op(val[0], val[1], val[2])
772
- }
773
- | arg tNEQ arg
774
- {
775
- result = @builder.binary_op(val[0], val[1], val[2])
776
- }
777
- | arg tMATCH arg
778
- {
779
- result = @builder.match_op(val[0], val[1], val[2])
780
- }
781
- | arg tNMATCH arg
782
- {
783
- result = @builder.binary_op(val[0], val[1], val[2])
784
- }
785
- | tBANG arg
786
- {
787
- result = @builder.not_op(val[0], nil, val[1], nil)
788
- }
789
- | tTILDE arg
790
- {
791
- result = @builder.unary_op(val[0], val[1])
792
- }
793
- | arg tLSHFT arg
794
- {
795
- result = @builder.binary_op(val[0], val[1], val[2])
796
- }
797
- | arg tRSHFT arg
798
- {
799
- result = @builder.binary_op(val[0], val[1], val[2])
800
- }
801
- | arg tANDOP arg
802
- {
803
- result = @builder.logical_op(:and, val[0], val[1], val[2])
804
- }
805
- | arg tOROP arg
806
- {
807
- result = @builder.logical_op(:or, val[0], val[1], val[2])
808
- }
809
- | kDEFINED opt_nl arg
810
- {
811
- result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil)
812
- }
813
-
814
- # Note: MRI eventually came to rely on disambiguation based on
815
- # the lexer state, but it is too contrived with the Ragel lexer,
816
- # so we kept this approach. See ruby/ruby@b0c03f63e5 for
817
- # the initial commit, and ruby/ruby@23352f62a for MRI revert,
818
- # which we decided not to track.
819
- | arg tEH
820
- {
821
- @lexer.push_cond
822
- @lexer.cond.push(true)
823
- }
824
- arg opt_nl tCOLON
825
- {
826
- @lexer.pop_cond
827
- }
828
- arg
829
- {
830
- result = @builder.ternary(val[0], val[1],
831
- val[3], val[5], val[7])
832
- }
833
- | primary
834
-
835
- arg_value: arg
836
-
837
- aref_args: none
838
- | args trailer
839
- | args tCOMMA assocs trailer
840
- {
841
- result = val[0] << @builder.associate(nil, val[2], nil)
842
- }
843
- | assocs trailer
844
- {
845
- result = [ @builder.associate(nil, val[0], nil) ]
846
- }
847
-
848
- paren_args: tLPAREN2 opt_call_args rparen
849
- {
850
- result = val
851
- }
852
-
853
- opt_paren_args: # nothing
854
- {
855
- result = [ nil, [], nil ]
856
- }
857
- | paren_args
858
-
859
- opt_call_args: # nothing
860
- {
861
- result = []
862
- }
863
- | call_args
864
- | args tCOMMA
865
- | args tCOMMA assocs tCOMMA
866
- {
867
- result = val[0] << @builder.associate(nil, val[2], nil)
868
- }
869
- | assocs tCOMMA
870
- {
871
- result = [ @builder.associate(nil, val[0], nil) ]
872
- }
873
-
874
- call_args: command
875
- {
876
- result = [ val[0] ]
877
- }
878
- | args opt_block_arg
879
- {
880
- result = val[0].concat(val[1])
881
- }
882
- | assocs opt_block_arg
883
- {
884
- result = [ @builder.associate(nil, val[0], nil) ]
885
- result.concat(val[1])
886
- }
887
- | args tCOMMA assocs opt_block_arg
888
- {
889
- assocs = @builder.associate(nil, val[2], nil)
890
- result = val[0] << assocs
891
- result.concat(val[3])
892
- }
893
- | block_arg
894
- {
895
- result = [ val[0] ]
896
- }
897
-
898
- command_args: {
899
- result = @lexer.cmdarg.dup
900
- @lexer.cmdarg.push(true)
901
- }
902
- call_args
903
- {
904
- @lexer.cmdarg = val[0]
905
-
906
- result = val[1]
907
- }
908
-
909
- block_arg: tAMPER arg_value
910
- {
911
- result = @builder.block_pass(val[0], val[1])
912
- }
913
-
914
- opt_block_arg: tCOMMA block_arg
915
- {
916
- result = [ val[1] ]
917
- }
918
- | # nothing
919
- {
920
- result = []
921
- }
922
-
923
- args: arg_value
924
- {
925
- result = [ val[0] ]
926
- }
927
- | tSTAR arg_value
928
- {
929
- result = [ @builder.splat(val[0], val[1]) ]
930
- }
931
- | args tCOMMA arg_value
932
- {
933
- result = val[0] << val[2]
934
- }
935
- | args tCOMMA tSTAR arg_value
936
- {
937
- result = val[0] << @builder.splat(val[2], val[3])
938
- }
939
-
940
- mrhs_arg: mrhs
941
- {
942
- result = @builder.array(nil, val[0], nil)
943
- }
944
- | arg_value
945
-
946
- mrhs: args tCOMMA arg_value
947
- {
948
- result = val[0] << val[2]
949
- }
950
- | args tCOMMA tSTAR arg_value
951
- {
952
- result = val[0] << @builder.splat(val[2], val[3])
953
- }
954
- | tSTAR arg_value
955
- {
956
- result = [ @builder.splat(val[0], val[1]) ]
957
- }
958
-
959
- primary: literal
960
- | strings
961
- | xstring
962
- | regexp
963
- | words
964
- | qwords
965
- | symbols
966
- | qsymbols
967
- | var_ref
968
- | backref
969
- | tFID
970
- {
971
- result = @builder.call_method(nil, nil, val[0])
972
- }
973
- | kBEGIN
974
- {
975
- result = @lexer.cmdarg.dup
976
- @lexer.cmdarg.clear
977
- }
978
- bodystmt kEND
979
- {
980
- @lexer.cmdarg = val[1]
981
-
982
- result = @builder.begin_keyword(val[0], val[2], val[3])
983
- }
984
- | tLPAREN_ARG
985
- {
986
- result = @lexer.cmdarg.dup
987
- @lexer.cmdarg.clear
988
- }
989
- expr
990
- {
991
- @lexer.state = :expr_endarg
992
- }
993
- opt_nl tRPAREN
994
- {
995
- @lexer.cmdarg = val[1]
996
-
997
- result = @builder.begin(val[0], val[2], val[5])
998
- }
999
- | tLPAREN_ARG
1000
- {
1001
- @lexer.state = :expr_endarg
1002
- }
1003
- opt_nl tRPAREN
1004
- {
1005
- result = @builder.begin(val[0], nil, val[3])
1006
- }
1007
- | tLPAREN compstmt tRPAREN
1008
- {
1009
- result = @builder.begin(val[0], val[1], val[2])
1010
- }
1011
- | primary_value tCOLON2 tCONSTANT
1012
- {
1013
- result = @builder.const_fetch(val[0], val[1], val[2])
1014
- }
1015
- | tCOLON3 tCONSTANT
1016
- {
1017
- result = @builder.const_global(val[0], val[1])
1018
- }
1019
- | tLBRACK aref_args tRBRACK
1020
- {
1021
- result = @builder.array(val[0], val[1], val[2])
1022
- }
1023
- | tLBRACE assoc_list tRCURLY
1024
- {
1025
- result = @builder.associate(val[0], val[1], val[2])
1026
- }
1027
- | kRETURN
1028
- {
1029
- result = @builder.keyword_cmd(:return, val[0])
1030
- }
1031
- | kYIELD tLPAREN2 call_args rparen
1032
- {
1033
- result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3])
1034
- }
1035
- | kYIELD tLPAREN2 rparen
1036
- {
1037
- result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2])
1038
- }
1039
- | kYIELD
1040
- {
1041
- result = @builder.keyword_cmd(:yield, val[0])
1042
- }
1043
- | kDEFINED opt_nl tLPAREN2 expr rparen
1044
- {
1045
- result = @builder.keyword_cmd(:defined?, val[0],
1046
- val[2], [ val[3] ], val[4])
1047
- }
1048
- | kNOT tLPAREN2 expr rparen
1049
- {
1050
- result = @builder.not_op(val[0], val[1], val[2], val[3])
1051
- }
1052
- | kNOT tLPAREN2 rparen
1053
- {
1054
- result = @builder.not_op(val[0], val[1], nil, val[2])
1055
- }
1056
- | fcall brace_block
1057
- {
1058
- method_call = @builder.call_method(nil, nil, val[0])
1059
-
1060
- begin_t, args, body, end_t = val[1]
1061
- result = @builder.block(method_call,
1062
- begin_t, args, body, end_t)
1063
- }
1064
- | method_call
1065
- | method_call brace_block
1066
- {
1067
- begin_t, args, body, end_t = val[1]
1068
- result = @builder.block(val[0],
1069
- begin_t, args, body, end_t)
1070
- }
1071
- | tLAMBDA lambda
1072
- {
1073
- lambda_call = @builder.call_lambda(val[0])
1074
-
1075
- args, (begin_t, body, end_t) = val[1]
1076
- result = @builder.block(lambda_call,
1077
- begin_t, args, body, end_t)
1078
- }
1079
- | kIF expr_value then compstmt if_tail kEND
1080
- {
1081
- else_t, else_ = val[4]
1082
- result = @builder.condition(val[0], val[1], val[2],
1083
- val[3], else_t,
1084
- else_, val[5])
1085
- }
1086
- | kUNLESS expr_value then compstmt opt_else kEND
1087
- {
1088
- else_t, else_ = val[4]
1089
- result = @builder.condition(val[0], val[1], val[2],
1090
- else_, else_t,
1091
- val[3], val[5])
1092
- }
1093
- | kWHILE
1094
- {
1095
- @lexer.cond.push(true)
1096
- }
1097
- expr_value do
1098
- {
1099
- @lexer.cond.pop
1100
- }
1101
- compstmt kEND
1102
- {
1103
- result = @builder.loop(:while, val[0], val[2], val[3],
1104
- val[5], val[6])
1105
- }
1106
- | kUNTIL
1107
- {
1108
- @lexer.cond.push(true)
1109
- }
1110
- expr_value do
1111
- {
1112
- @lexer.cond.pop
1113
- }
1114
- compstmt kEND
1115
- {
1116
- result = @builder.loop(:until, val[0], val[2], val[3],
1117
- val[5], val[6])
1118
- }
1119
- | kCASE expr_value opt_terms case_body kEND
1120
- {
1121
- *when_bodies, (else_t, else_body) = *val[3]
1122
-
1123
- result = @builder.case(val[0], val[1],
1124
- when_bodies, else_t, else_body,
1125
- val[4])
1126
- }
1127
- | kCASE opt_terms case_body kEND
1128
- {
1129
- *when_bodies, (else_t, else_body) = *val[2]
1130
-
1131
- result = @builder.case(val[0], nil,
1132
- when_bodies, else_t, else_body,
1133
- val[3])
1134
- }
1135
- | kFOR for_var kIN
1136
- {
1137
- @lexer.cond.push(true)
1138
- }
1139
- expr_value do
1140
- {
1141
- @lexer.cond.pop
1142
- }
1143
- compstmt kEND
1144
- {
1145
- result = @builder.for(val[0], val[1],
1146
- val[2], val[4],
1147
- val[5], val[7], val[8])
1148
- }
1149
- | kCLASS cpath superclass
1150
- {
1151
- @static_env.extend_static
1152
- @lexer.push_cmdarg
1153
- }
1154
- bodystmt kEND
1155
- {
1156
- if in_def?
1157
- diagnostic :error, :class_in_def, nil, val[0]
1158
- end
1159
-
1160
- lt_t, superclass = val[2]
1161
- result = @builder.def_class(val[0], val[1],
1162
- lt_t, superclass,
1163
- val[4], val[5])
1164
-
1165
- @lexer.pop_cmdarg
1166
- @static_env.unextend
1167
- }
1168
- | kCLASS tLSHFT expr term
1169
- {
1170
- result = @def_level
1171
- @def_level = 0
1172
-
1173
- @static_env.extend_static
1174
- @lexer.push_cmdarg
1175
- }
1176
- bodystmt kEND
1177
- {
1178
- result = @builder.def_sclass(val[0], val[1], val[2],
1179
- val[5], val[6])
1180
-
1181
- @lexer.pop_cmdarg
1182
- @static_env.unextend
1183
-
1184
- @def_level = val[4]
1185
- }
1186
- | kMODULE cpath
1187
- {
1188
- @static_env.extend_static
1189
- @lexer.push_cmdarg
1190
- }
1191
- bodystmt kEND
1192
- {
1193
- if in_def?
1194
- diagnostic :error, :module_in_def, nil, val[0]
1195
- end
1196
-
1197
- result = @builder.def_module(val[0], val[1],
1198
- val[3], val[4])
1199
-
1200
- @lexer.pop_cmdarg
1201
- @static_env.unextend
1202
- }
1203
- | kDEF fname
1204
- {
1205
- @def_level += 1
1206
- @static_env.extend_static
1207
- @lexer.push_cmdarg
1208
- }
1209
- f_arglist bodystmt kEND
1210
- {
1211
- result = @builder.def_method(val[0], val[1],
1212
- val[3], val[4], val[5])
1213
-
1214
- @lexer.pop_cmdarg
1215
- @static_env.unextend
1216
- @def_level -= 1
1217
- }
1218
- | kDEF singleton dot_or_colon
1219
- {
1220
- @lexer.state = :expr_fname
1221
- }
1222
- fname
1223
- {
1224
- @def_level += 1
1225
- @static_env.extend_static
1226
- @lexer.push_cmdarg
1227
- }
1228
- f_arglist bodystmt kEND
1229
- {
1230
- result = @builder.def_singleton(val[0], val[1], val[2],
1231
- val[4], val[6], val[7], val[8])
1232
-
1233
- @lexer.pop_cmdarg
1234
- @static_env.unextend
1235
- @def_level -= 1
1236
- }
1237
- | kBREAK
1238
- {
1239
- result = @builder.keyword_cmd(:break, val[0])
1240
- }
1241
- | kNEXT
1242
- {
1243
- result = @builder.keyword_cmd(:next, val[0])
1244
- }
1245
- | kREDO
1246
- {
1247
- result = @builder.keyword_cmd(:redo, val[0])
1248
- }
1249
- | kRETRY
1250
- {
1251
- result = @builder.keyword_cmd(:retry, val[0])
1252
- }
1253
-
1254
- primary_value: primary
1255
-
1256
- then: term
1257
- | kTHEN
1258
- | term kTHEN
1259
- {
1260
- result = val[1]
1261
- }
1262
-
1263
- do: term
1264
- | kDO_COND
1265
-
1266
- if_tail: opt_else
1267
- | kELSIF expr_value then compstmt if_tail
1268
- {
1269
- else_t, else_ = val[4]
1270
- result = [ val[0],
1271
- @builder.condition(val[0], val[1], val[2],
1272
- val[3], else_t,
1273
- else_, nil),
1274
- ]
1275
- }
1276
-
1277
- opt_else: none
1278
- | kELSE compstmt
1279
- {
1280
- result = val
1281
- }
1282
-
1283
- for_var: lhs
1284
- | mlhs
1285
-
1286
- f_marg: f_norm_arg
1287
- {
1288
- result = @builder.arg(val[0])
1289
- }
1290
- | tLPAREN f_margs rparen
1291
- {
1292
- result = @builder.multi_lhs(val[0], val[1], val[2])
1293
- }
1294
-
1295
- f_marg_list: f_marg
1296
- {
1297
- result = [ val[0] ]
1298
- }
1299
- | f_marg_list tCOMMA f_marg
1300
- {
1301
- result = val[0] << val[2]
1302
- }
1303
-
1304
- f_margs: f_marg_list
1305
- | f_marg_list tCOMMA tSTAR f_norm_arg
1306
- {
1307
- result = val[0].
1308
- push(@builder.restarg(val[2], val[3]))
1309
- }
1310
- | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list
1311
- {
1312
- result = val[0].
1313
- push(@builder.restarg(val[2], val[3])).
1314
- concat(val[5])
1315
- }
1316
- | f_marg_list tCOMMA tSTAR
1317
- {
1318
- result = val[0].
1319
- push(@builder.restarg(val[2]))
1320
- }
1321
- | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list
1322
- {
1323
- result = val[0].
1324
- push(@builder.restarg(val[2])).
1325
- concat(val[4])
1326
- }
1327
- | tSTAR f_norm_arg
1328
- {
1329
- result = [ @builder.restarg(val[0], val[1]) ]
1330
- }
1331
- | tSTAR f_norm_arg tCOMMA f_marg_list
1332
- {
1333
- result = [ @builder.restarg(val[0], val[1]),
1334
- *val[3] ]
1335
- }
1336
- | tSTAR
1337
- {
1338
- result = [ @builder.restarg(val[0]) ]
1339
- }
1340
- | tSTAR tCOMMA f_marg_list
1341
- {
1342
- result = [ @builder.restarg(val[0]),
1343
- *val[2] ]
1344
- }
1345
-
1346
- block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
1347
- {
1348
- result = val[0].concat(val[2]).concat(val[3])
1349
- }
1350
- | f_block_kwarg opt_f_block_arg
1351
- {
1352
- result = val[0].concat(val[1])
1353
- }
1354
- | f_kwrest opt_f_block_arg
1355
- {
1356
- result = val[0].concat(val[1])
1357
- }
1358
- | f_block_arg
1359
- {
1360
- result = [ val[0] ]
1361
- }
1362
-
1363
- opt_block_args_tail:
1364
- tCOMMA block_args_tail
1365
- {
1366
- result = val[1]
1367
- }
1368
- | # nothing
1369
- {
1370
- result = []
1371
- }
1372
-
1373
- block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail
1374
- {
1375
- result = val[0].
1376
- concat(val[2]).
1377
- concat(val[4]).
1378
- concat(val[5])
1379
- }
1380
- | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail
1381
- {
1382
- result = val[0].
1383
- concat(val[2]).
1384
- concat(val[4]).
1385
- concat(val[6]).
1386
- concat(val[7])
1387
- }
1388
- | f_arg tCOMMA f_block_optarg opt_block_args_tail
1389
- {
1390
- result = val[0].
1391
- concat(val[2]).
1392
- concat(val[3])
1393
- }
1394
- | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail
1395
- {
1396
- result = val[0].
1397
- concat(val[2]).
1398
- concat(val[4]).
1399
- concat(val[5])
1400
- }
1401
- | f_arg tCOMMA f_rest_arg opt_block_args_tail
1402
- {
1403
- result = val[0].
1404
- concat(val[2]).
1405
- concat(val[3])
1406
- }
1407
- | f_arg tCOMMA
1408
- | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail
1409
- {
1410
- result = val[0].
1411
- concat(val[2]).
1412
- concat(val[4]).
1413
- concat(val[5])
1414
- }
1415
- | f_arg opt_block_args_tail
1416
- {
1417
- result = val[0].concat(val[1])
1418
- }
1419
- | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail
1420
- {
1421
- result = val[0].
1422
- concat(val[2]).
1423
- concat(val[3])
1424
- }
1425
- | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail
1426
- {
1427
- result = val[0].
1428
- concat(val[2]).
1429
- concat(val[4]).
1430
- concat(val[5])
1431
- }
1432
- | f_block_optarg opt_block_args_tail
1433
- {
1434
- result = val[0].
1435
- concat(val[1])
1436
- }
1437
- | f_block_optarg tCOMMA f_arg opt_block_args_tail
1438
- {
1439
- result = val[0].
1440
- concat(val[2]).
1441
- concat(val[3])
1442
- }
1443
- | f_rest_arg opt_block_args_tail
1444
- {
1445
- result = val[0].
1446
- concat(val[1])
1447
- }
1448
- | f_rest_arg tCOMMA f_arg opt_block_args_tail
1449
- {
1450
- result = val[0].
1451
- concat(val[2]).
1452
- concat(val[3])
1453
- }
1454
- | block_args_tail
1455
-
1456
- opt_block_param: # nothing
1457
- {
1458
- result = @builder.args(nil, [], nil)
1459
- }
1460
- | block_param_def
1461
- {
1462
- @lexer.state = :expr_value
1463
- }
1464
-
1465
- block_param_def: tPIPE opt_bv_decl tPIPE
1466
- {
1467
- result = @builder.args(val[0], val[1], val[2])
1468
- }
1469
- | tOROP
1470
- {
1471
- result = @builder.args(val[0], [], val[0])
1472
- }
1473
- | tPIPE block_param opt_bv_decl tPIPE
1474
- {
1475
- result = @builder.args(val[0], val[1].concat(val[2]), val[3])
1476
- }
1477
-
1478
- opt_bv_decl: opt_nl
1479
- {
1480
- result = []
1481
- }
1482
- | opt_nl tSEMI bv_decls opt_nl
1483
- {
1484
- result = val[2]
1485
- }
1486
-
1487
- bv_decls: bvar
1488
- {
1489
- result = [ val[0] ]
1490
- }
1491
- | bv_decls tCOMMA bvar
1492
- {
1493
- result = val[0] << val[2]
1494
- }
1495
-
1496
- bvar: tIDENTIFIER
1497
- {
1498
- result = @builder.shadowarg(val[0])
1499
- }
1500
- | f_bad_arg
1501
-
1502
- lambda: {
1503
- @static_env.extend_dynamic
1504
- }
1505
- f_larglist
1506
- {
1507
- result = @lexer.cmdarg.dup
1508
- @lexer.cmdarg.clear
1509
- }
1510
- lambda_body
1511
- {
1512
- @lexer.cmdarg = val[2]
1513
- @lexer.cmdarg.lexpop
1514
-
1515
- result = [ val[1], val[3] ]
1516
-
1517
- @static_env.unextend
1518
- }
1519
-
1520
- f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN
1521
- {
1522
- result = @builder.args(val[0], val[1].concat(val[2]), val[3])
1523
- }
1524
- | f_args
1525
- {
1526
- result = @builder.args(nil, val[0], nil)
1527
- }
1528
-
1529
- lambda_body: tLAMBEG compstmt tRCURLY
1530
- {
1531
- result = [ val[0], val[1], val[2] ]
1532
- }
1533
- | kDO_LAMBDA compstmt kEND
1534
- {
1535
- result = [ val[0], val[1], val[2] ]
1536
- }
1537
-
1538
- do_block: kDO_BLOCK
1539
- {
1540
- @static_env.extend_dynamic
1541
- }
1542
- opt_block_param compstmt kEND
1543
- {
1544
- result = [ val[0], val[2], val[3], val[4] ]
1545
-
1546
- @static_env.unextend
1547
- }
1548
-
1549
- block_call: command do_block
1550
- {
1551
- begin_t, block_args, body, end_t = val[1]
1552
- result = @builder.block(val[0],
1553
- begin_t, block_args, body, end_t)
1554
- }
1555
- | block_call dot_or_colon operation2 opt_paren_args
1556
- {
1557
- lparen_t, args, rparen_t = val[3]
1558
- result = @builder.call_method(val[0], val[1], val[2],
1559
- lparen_t, args, rparen_t)
1560
- }
1561
- | block_call dot_or_colon operation2 opt_paren_args brace_block
1562
- {
1563
- lparen_t, args, rparen_t = val[3]
1564
- method_call = @builder.call_method(val[0], val[1], val[2],
1565
- lparen_t, args, rparen_t)
1566
-
1567
- begin_t, args, body, end_t = val[4]
1568
- result = @builder.block(method_call,
1569
- begin_t, args, body, end_t)
1570
- }
1571
- | block_call dot_or_colon operation2 command_args do_block
1572
- {
1573
- method_call = @builder.call_method(val[0], val[1], val[2],
1574
- nil, val[3], nil)
1575
-
1576
- begin_t, args, body, end_t = val[4]
1577
- result = @builder.block(method_call,
1578
- begin_t, args, body, end_t)
1579
- }
1580
-
1581
- method_call: fcall paren_args
1582
- {
1583
- lparen_t, args, rparen_t = val[1]
1584
- result = @builder.call_method(nil, nil, val[0],
1585
- lparen_t, args, rparen_t)
1586
- }
1587
- | primary_value tDOT operation2 opt_paren_args
1588
- {
1589
- lparen_t, args, rparen_t = val[3]
1590
- result = @builder.call_method(val[0], val[1], val[2],
1591
- lparen_t, args, rparen_t)
1592
- }
1593
- | primary_value tCOLON2 operation2 paren_args
1594
- {
1595
- lparen_t, args, rparen_t = val[3]
1596
- result = @builder.call_method(val[0], val[1], val[2],
1597
- lparen_t, args, rparen_t)
1598
- }
1599
- | primary_value tCOLON2 operation3
1600
- {
1601
- result = @builder.call_method(val[0], val[1], val[2])
1602
- }
1603
- | primary_value tDOT paren_args
1604
- {
1605
- lparen_t, args, rparen_t = val[2]
1606
- result = @builder.call_method(val[0], val[1], nil,
1607
- lparen_t, args, rparen_t)
1608
- }
1609
- | primary_value tCOLON2 paren_args
1610
- {
1611
- lparen_t, args, rparen_t = val[2]
1612
- result = @builder.call_method(val[0], val[1], nil,
1613
- lparen_t, args, rparen_t)
1614
- }
1615
- | kSUPER paren_args
1616
- {
1617
- lparen_t, args, rparen_t = val[1]
1618
- result = @builder.keyword_cmd(:super, val[0],
1619
- lparen_t, args, rparen_t)
1620
- }
1621
- | kSUPER
1622
- {
1623
- result = @builder.keyword_cmd(:zsuper, val[0])
1624
- }
1625
- | primary_value tLBRACK2 opt_call_args rbracket
1626
- {
1627
- result = @builder.index(val[0], val[1], val[2], val[3])
1628
- }
1629
-
1630
- brace_block: tLCURLY
1631
- {
1632
- @static_env.extend_dynamic
1633
- }
1634
- opt_block_param compstmt tRCURLY
1635
- {
1636
- result = [ val[0], val[2], val[3], val[4] ]
1637
-
1638
- @static_env.unextend
1639
- }
1640
- | kDO
1641
- {
1642
- @static_env.extend_dynamic
1643
- }
1644
- opt_block_param compstmt kEND
1645
- {
1646
- result = [ val[0], val[2], val[3], val[4] ]
1647
-
1648
- @static_env.unextend
1649
- }
1650
-
1651
- case_body: kWHEN args then compstmt cases
1652
- {
1653
- result = [ @builder.when(val[0], val[1], val[2], val[3]),
1654
- *val[4] ]
1655
- }
1656
-
1657
- cases: opt_else
1658
- {
1659
- result = [ val[0] ]
1660
- }
1661
- | case_body
1662
-
1663
- opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue
1664
- {
1665
- assoc_t, exc_var = val[2]
1666
-
1667
- if val[1]
1668
- exc_list = @builder.array(nil, val[1], nil)
1669
- end
1670
-
1671
- result = [ @builder.rescue_body(val[0],
1672
- exc_list, assoc_t, exc_var,
1673
- val[3], val[4]),
1674
- *val[5] ]
1675
- }
1676
- |
1677
- {
1678
- result = []
1679
- }
1680
-
1681
- exc_list: arg_value
1682
- {
1683
- result = [ val[0] ]
1684
- }
1685
- | mrhs
1686
- | none
1687
-
1688
- exc_var: tASSOC lhs
1689
- {
1690
- result = [ val[0], val[1] ]
1691
- }
1692
- | none
1693
-
1694
- opt_ensure: kENSURE compstmt
1695
- {
1696
- result = [ val[0], val[1] ]
1697
- }
1698
- | none
1699
-
1700
- literal: numeric
1701
- | symbol
1702
- | dsym
1703
-
1704
- strings: string
1705
- {
1706
- result = @builder.string_compose(nil, val[0], nil)
1707
- }
1708
-
1709
- string: string1
1710
- {
1711
- result = [ val[0] ]
1712
- }
1713
- | string string1
1714
- {
1715
- result = val[0] << val[1]
1716
- }
1717
-
1718
- string1: tSTRING_BEG string_contents tSTRING_END
1719
- {
1720
- result = @builder.string_compose(val[0], val[1], val[2])
1721
- }
1722
- | tSTRING
1723
- {
1724
- result = @builder.string(val[0])
1725
- }
1726
- | tCHARACTER
1727
- {
1728
- result = @builder.character(val[0])
1729
- }
1730
-
1731
- xstring: tXSTRING_BEG xstring_contents tSTRING_END
1732
- {
1733
- result = @builder.xstring_compose(val[0], val[1], val[2])
1734
- }
1735
-
1736
- regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT
1737
- {
1738
- opts = @builder.regexp_options(val[3])
1739
- result = @builder.regexp_compose(val[0], val[1], val[2], opts)
1740
- }
1741
-
1742
- words: tWORDS_BEG word_list tSTRING_END
1743
- {
1744
- result = @builder.words_compose(val[0], val[1], val[2])
1745
- }
1746
-
1747
- word_list: # nothing
1748
- {
1749
- result = []
1750
- }
1751
- | word_list word tSPACE
1752
- {
1753
- result = val[0] << @builder.word(val[1])
1754
- }
1755
-
1756
- word: string_content
1757
- {
1758
- result = [ val[0] ]
1759
- }
1760
- | word string_content
1761
- {
1762
- result = val[0] << val[1]
1763
- }
1764
-
1765
- symbols: tSYMBOLS_BEG symbol_list tSTRING_END
1766
- {
1767
- result = @builder.symbols_compose(val[0], val[1], val[2])
1768
- }
1769
-
1770
- symbol_list: # nothing
1771
- {
1772
- result = []
1773
- }
1774
- | symbol_list word tSPACE
1775
- {
1776
- result = val[0] << @builder.word(val[1])
1777
- }
1778
-
1779
- qwords: tQWORDS_BEG qword_list tSTRING_END
1780
- {
1781
- result = @builder.words_compose(val[0], val[1], val[2])
1782
- }
1783
-
1784
- qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END
1785
- {
1786
- result = @builder.symbols_compose(val[0], val[1], val[2])
1787
- }
1788
-
1789
- qword_list: # nothing
1790
- {
1791
- result = []
1792
- }
1793
- | qword_list tSTRING_CONTENT tSPACE
1794
- {
1795
- result = val[0] << @builder.string_internal(val[1])
1796
- }
1797
-
1798
- qsym_list: # nothing
1799
- {
1800
- result = []
1801
- }
1802
- | qsym_list tSTRING_CONTENT tSPACE
1803
- {
1804
- result = val[0] << @builder.symbol_internal(val[1])
1805
- }
1806
-
1807
- string_contents: # nothing
1808
- {
1809
- result = []
1810
- }
1811
- | string_contents string_content
1812
- {
1813
- result = val[0] << val[1]
1814
- }
1815
-
1816
- xstring_contents: # nothing
1817
- {
1818
- result = []
1819
- }
1820
- | xstring_contents string_content
1821
- {
1822
- result = val[0] << val[1]
1823
- }
1824
-
1825
- regexp_contents: # nothing
1826
- {
1827
- result = []
1828
- }
1829
- | regexp_contents string_content
1830
- {
1831
- result = val[0] << val[1]
1832
- }
1833
-
1834
- string_content: tSTRING_CONTENT
1835
- {
1836
- result = @builder.string_internal(val[0])
1837
- }
1838
- | tSTRING_DVAR string_dvar
1839
- {
1840
- result = val[1]
1841
- }
1842
- | tSTRING_DBEG
1843
- {
1844
- @lexer.cond.push(false)
1845
- @lexer.cmdarg.push(false)
1846
- }
1847
- compstmt tSTRING_DEND
1848
- {
1849
- @lexer.cond.lexpop
1850
- @lexer.cmdarg.lexpop
1851
-
1852
- result = @builder.begin(val[0], val[2], val[3])
1853
- }
1854
-
1855
- string_dvar: tGVAR
1856
- {
1857
- result = @builder.gvar(val[0])
1858
- }
1859
- | tIVAR
1860
- {
1861
- result = @builder.ivar(val[0])
1862
- }
1863
- | tCVAR
1864
- {
1865
- result = @builder.cvar(val[0])
1866
- }
1867
- | backref
1868
-
1869
-
1870
- symbol: tSYMBOL
1871
- {
1872
- result = @builder.symbol(val[0])
1873
- }
1874
-
1875
- dsym: tSYMBEG xstring_contents tSTRING_END
1876
- {
1877
- result = @builder.symbol_compose(val[0], val[1], val[2])
1878
- }
1879
-
1880
- numeric: simple_numeric
1881
- {
1882
- result = val[0]
1883
- }
1884
- | tUMINUS_NUM simple_numeric =tLOWEST
1885
- {
1886
- result = @builder.negate(val[0], val[1])
1887
- }
1888
-
1889
- simple_numeric: tINTEGER
1890
- {
1891
- result = @builder.integer(val[0])
1892
- }
1893
- | tFLOAT
1894
- {
1895
- result = @builder.float(val[0])
1896
- }
1897
- | tRATIONAL
1898
- {
1899
- result = @builder.rational(val[0])
1900
- }
1901
- | tIMAGINARY
1902
- {
1903
- result = @builder.complex(val[0])
1904
- }
1905
-
1906
- user_variable: tIDENTIFIER
1907
- {
1908
- result = @builder.ident(val[0])
1909
- }
1910
- | tIVAR
1911
- {
1912
- result = @builder.ivar(val[0])
1913
- }
1914
- | tGVAR
1915
- {
1916
- result = @builder.gvar(val[0])
1917
- }
1918
- | tCONSTANT
1919
- {
1920
- result = @builder.const(val[0])
1921
- }
1922
- | tCVAR
1923
- {
1924
- result = @builder.cvar(val[0])
1925
- }
1926
-
1927
- keyword_variable: kNIL
1928
- {
1929
- result = @builder.nil(val[0])
1930
- }
1931
- | kSELF
1932
- {
1933
- result = @builder.self(val[0])
1934
- }
1935
- | kTRUE
1936
- {
1937
- result = @builder.true(val[0])
1938
- }
1939
- | kFALSE
1940
- {
1941
- result = @builder.false(val[0])
1942
- }
1943
- | k__FILE__
1944
- {
1945
- result = @builder.__FILE__(val[0])
1946
- }
1947
- | k__LINE__
1948
- {
1949
- result = @builder.__LINE__(val[0])
1950
- }
1951
- | k__ENCODING__
1952
- {
1953
- result = @builder.__ENCODING__(val[0])
1954
- }
1955
-
1956
- var_ref: user_variable
1957
- {
1958
- result = @builder.accessible(val[0])
1959
- }
1960
- | keyword_variable
1961
- {
1962
- result = @builder.accessible(val[0])
1963
- }
1964
-
1965
- var_lhs: user_variable
1966
- {
1967
- result = @builder.assignable(val[0])
1968
- }
1969
- | keyword_variable
1970
- {
1971
- result = @builder.assignable(val[0])
1972
- }
1973
-
1974
- backref: tNTH_REF
1975
- {
1976
- result = @builder.nth_ref(val[0])
1977
- }
1978
- | tBACK_REF
1979
- {
1980
- result = @builder.back_ref(val[0])
1981
- }
1982
-
1983
- superclass: term
1984
- {
1985
- result = nil
1986
- }
1987
- | tLT
1988
- {
1989
- @lexer.state = :expr_value
1990
- }
1991
- expr_value term
1992
- {
1993
- result = [ val[0], val[2] ]
1994
- }
1995
- | error term
1996
- {
1997
- yyerrok
1998
- result = nil
1999
- }
2000
-
2001
- f_arglist: tLPAREN2 f_args rparen
2002
- {
2003
- result = @builder.args(val[0], val[1], val[2])
2004
-
2005
- @lexer.state = :expr_value
2006
- }
2007
- | {
2008
- result = @lexer.in_kwarg
2009
- @lexer.in_kwarg = true
2010
- }
2011
- f_args term
2012
- {
2013
- @lexer.in_kwarg = val[0]
2014
- result = @builder.args(nil, val[1], nil)
2015
- }
2016
-
2017
- args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg
2018
- {
2019
- result = val[0].concat(val[2]).concat(val[3])
2020
- }
2021
- | f_kwarg opt_f_block_arg
2022
- {
2023
- result = val[0].concat(val[1])
2024
- }
2025
- | f_kwrest opt_f_block_arg
2026
- {
2027
- result = val[0].concat(val[1])
2028
- }
2029
- | f_block_arg
2030
- {
2031
- result = [ val[0] ]
2032
- }
2033
-
2034
- opt_args_tail: tCOMMA args_tail
2035
- {
2036
- result = val[1]
2037
- }
2038
- | # nothing
2039
- {
2040
- result = []
2041
- }
2042
-
2043
- f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail
2044
- {
2045
- result = val[0].
2046
- concat(val[2]).
2047
- concat(val[4]).
2048
- concat(val[5])
2049
- }
2050
- | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2051
- {
2052
- result = val[0].
2053
- concat(val[2]).
2054
- concat(val[4]).
2055
- concat(val[6]).
2056
- concat(val[7])
2057
- }
2058
- | f_arg tCOMMA f_optarg opt_args_tail
2059
- {
2060
- result = val[0].
2061
- concat(val[2]).
2062
- concat(val[3])
2063
- }
2064
- | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail
2065
- {
2066
- result = val[0].
2067
- concat(val[2]).
2068
- concat(val[4]).
2069
- concat(val[5])
2070
- }
2071
- | f_arg tCOMMA f_rest_arg opt_args_tail
2072
- {
2073
- result = val[0].
2074
- concat(val[2]).
2075
- concat(val[3])
2076
- }
2077
- | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2078
- {
2079
- result = val[0].
2080
- concat(val[2]).
2081
- concat(val[4]).
2082
- concat(val[5])
2083
- }
2084
- | f_arg opt_args_tail
2085
- {
2086
- result = val[0].
2087
- concat(val[1])
2088
- }
2089
- | f_optarg tCOMMA f_rest_arg opt_args_tail
2090
- {
2091
- result = val[0].
2092
- concat(val[2]).
2093
- concat(val[3])
2094
- }
2095
- | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2096
- {
2097
- result = val[0].
2098
- concat(val[2]).
2099
- concat(val[4]).
2100
- concat(val[5])
2101
- }
2102
- | f_optarg opt_args_tail
2103
- {
2104
- result = val[0].
2105
- concat(val[1])
2106
- }
2107
- | f_optarg tCOMMA f_arg opt_args_tail
2108
- {
2109
- result = val[0].
2110
- concat(val[2]).
2111
- concat(val[3])
2112
- }
2113
- | f_rest_arg opt_args_tail
2114
- {
2115
- result = val[0].
2116
- concat(val[1])
2117
- }
2118
- | f_rest_arg tCOMMA f_arg opt_args_tail
2119
- {
2120
- result = val[0].
2121
- concat(val[2]).
2122
- concat(val[3])
2123
- }
2124
- | args_tail
2125
- {
2126
- result = val[0]
2127
- }
2128
- | # nothing
2129
- {
2130
- result = []
2131
- }
2132
-
2133
- f_bad_arg: tCONSTANT
2134
- {
2135
- diagnostic :error, :argument_const, nil, val[0]
2136
- }
2137
- | tIVAR
2138
- {
2139
- diagnostic :error, :argument_ivar, nil, val[0]
2140
- }
2141
- | tGVAR
2142
- {
2143
- diagnostic :error, :argument_gvar, nil, val[0]
2144
- }
2145
- | tCVAR
2146
- {
2147
- diagnostic :error, :argument_cvar, nil, val[0]
2148
- }
2149
-
2150
- f_norm_arg: f_bad_arg
2151
- | tIDENTIFIER
2152
- {
2153
- @static_env.declare val[0][0]
2154
-
2155
- result = val[0]
2156
- }
2157
-
2158
- f_arg_asgn: f_norm_arg
2159
- {
2160
- result = val[0]
2161
- }
2162
-
2163
- f_arg_item: f_arg_asgn
2164
- {
2165
- result = @builder.arg(val[0])
2166
- }
2167
- | tLPAREN f_margs rparen
2168
- {
2169
- result = @builder.multi_lhs(val[0], val[1], val[2])
2170
- }
2171
-
2172
- f_arg: f_arg_item
2173
- {
2174
- result = [ val[0] ]
2175
- }
2176
- | f_arg tCOMMA f_arg_item
2177
- {
2178
- result = val[0] << val[2]
2179
- }
2180
-
2181
- f_label: tLABEL
2182
- {
2183
- check_kwarg_name(val[0])
2184
-
2185
- @static_env.declare val[0][0]
2186
-
2187
- result = val[0]
2188
- }
2189
-
2190
- f_kw: f_label arg_value
2191
- {
2192
- result = @builder.kwoptarg(val[0], val[1])
2193
- }
2194
- | f_label
2195
- {
2196
- result = @builder.kwarg(val[0])
2197
- }
2198
-
2199
- f_block_kw: f_label primary_value
2200
- {
2201
- result = @builder.kwoptarg(val[0], val[1])
2202
- }
2203
- | f_label
2204
- {
2205
- result = @builder.kwarg(val[0])
2206
- }
2207
-
2208
- f_block_kwarg: f_block_kw
2209
- {
2210
- result = [ val[0] ]
2211
- }
2212
- | f_block_kwarg tCOMMA f_block_kw
2213
- {
2214
- result = val[0] << val[2]
2215
- }
2216
-
2217
- f_kwarg: f_kw
2218
- {
2219
- result = [ val[0] ]
2220
- }
2221
- | f_kwarg tCOMMA f_kw
2222
- {
2223
- result = val[0] << val[2]
2224
- }
2225
-
2226
- kwrest_mark: tPOW | tDSTAR
2227
-
2228
- f_kwrest: kwrest_mark tIDENTIFIER
2229
- {
2230
- @static_env.declare val[1][0]
2231
-
2232
- result = [ @builder.kwrestarg(val[0], val[1]) ]
2233
- }
2234
- | kwrest_mark
2235
- {
2236
- result = [ @builder.kwrestarg(val[0]) ]
2237
- }
2238
-
2239
- f_opt: f_arg_asgn tEQL arg_value
2240
- {
2241
- result = @builder.optarg(val[0], val[1], val[2])
2242
- }
2243
-
2244
- f_block_opt: f_arg_asgn tEQL primary_value
2245
- {
2246
- result = @builder.optarg(val[0], val[1], val[2])
2247
- }
2248
-
2249
- f_block_optarg: f_block_opt
2250
- {
2251
- result = [ val[0] ]
2252
- }
2253
- | f_block_optarg tCOMMA f_block_opt
2254
- {
2255
- result = val[0] << val[2]
2256
- }
2257
-
2258
- f_optarg: f_opt
2259
- {
2260
- result = [ val[0] ]
2261
- }
2262
- | f_optarg tCOMMA f_opt
2263
- {
2264
- result = val[0] << val[2]
2265
- }
2266
-
2267
- restarg_mark: tSTAR2 | tSTAR
2268
-
2269
- f_rest_arg: restarg_mark tIDENTIFIER
2270
- {
2271
- @static_env.declare val[1][0]
2272
-
2273
- result = [ @builder.restarg(val[0], val[1]) ]
2274
- }
2275
- | restarg_mark
2276
- {
2277
- result = [ @builder.restarg(val[0]) ]
2278
- }
2279
-
2280
- blkarg_mark: tAMPER2 | tAMPER
2281
-
2282
- f_block_arg: blkarg_mark tIDENTIFIER
2283
- {
2284
- @static_env.declare val[1][0]
2285
-
2286
- result = @builder.blockarg(val[0], val[1])
2287
- }
2288
-
2289
- opt_f_block_arg: tCOMMA f_block_arg
2290
- {
2291
- result = [ val[1] ]
2292
- }
2293
- |
2294
- {
2295
- result = []
2296
- }
2297
-
2298
- singleton: var_ref
2299
- | tLPAREN2 expr rparen
2300
- {
2301
- result = val[1]
2302
- }
2303
-
2304
- assoc_list: # nothing
2305
- {
2306
- result = []
2307
- }
2308
- | assocs trailer
2309
-
2310
- assocs: assoc
2311
- {
2312
- result = [ val[0] ]
2313
- }
2314
- | assocs tCOMMA assoc
2315
- {
2316
- result = val[0] << val[2]
2317
- }
2318
-
2319
- assoc: arg_value tASSOC arg_value
2320
- {
2321
- result = @builder.pair(val[0], val[1], val[2])
2322
- }
2323
- | tLABEL arg_value
2324
- {
2325
- result = @builder.pair_keyword(val[0], val[1])
2326
- }
2327
- | tSTRING_BEG string_contents tLABEL_END arg_value
2328
- {
2329
- result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
2330
- }
2331
- | tDSTAR arg_value
2332
- {
2333
- result = @builder.kwsplat(val[0], val[1])
2334
- }
2335
-
2336
- operation: tIDENTIFIER | tCONSTANT | tFID
2337
- operation2: tIDENTIFIER | tCONSTANT | tFID | op
2338
- operation3: tIDENTIFIER | tFID | op
2339
- dot_or_colon: tDOT | tCOLON2
2340
- opt_terms: | terms
2341
- opt_nl: | tNL
2342
- rparen: opt_nl tRPAREN
2343
- {
2344
- result = val[1]
2345
- }
2346
- rbracket: opt_nl tRBRACK
2347
- {
2348
- result = val[1]
2349
- }
2350
- trailer: | tNL | tCOMMA
2351
-
2352
- term: tSEMI
2353
- {
2354
- yyerrok
2355
- }
2356
- | tNL
2357
-
2358
- terms: term
2359
- | terms tSEMI
2360
-
2361
- none: # nothing
2362
- {
2363
- result = nil
2364
- }
2365
- end
2366
-
2367
- ---- header
2368
-
2369
- require 'parser'
2370
-
2371
- Parser.check_for_encoding_support
2372
-
2373
- ---- inner
2374
-
2375
- def version
2376
- 22
2377
- end
2378
-
2379
- def default_encoding
2380
- Encoding::UTF_8
2381
- end