depager 0.2.3 → 0.3.0.b20160729

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/README.en +4 -19
  3. data/README.ja +42 -79
  4. data/bin/depager +42 -45
  5. data/examples/action_pl0d/pl0d.action.dr +421 -0
  6. data/examples/action_pl0d/test.pl0ds +49 -0
  7. data/examples/c89/c89.dr +493 -496
  8. data/examples/c89/test.c89 +10 -10
  9. data/examples/extension/astdf.rb +10 -0
  10. data/examples/extension/atree.dr +55 -0
  11. data/examples/{sample_calc → extension}/calc.atree.dr +42 -43
  12. data/examples/extension/calc.simple_action.dr +33 -0
  13. data/examples/extension/paction.dr +16 -15
  14. data/examples/extension/pactiontest.dr +14 -14
  15. data/examples/extension/simple_action.rb +44 -0
  16. data/examples/pl0d/pl0ds.dr +337 -334
  17. data/examples/pl0d/test.pl0ds +33 -33
  18. data/examples/rie_calc/calc.rie.dr +57 -0
  19. data/examples/rie_calc/test.calc +4 -0
  20. data/examples/rie_dcuse/dcuse.rie.dr +71 -0
  21. data/examples/rie_dcuse/test.dcuse +1 -0
  22. data/examples/rie_pl0/orig_ex/exerrdg.pl0 +44 -0
  23. data/examples/rie_pl0/orig_ex/exerrm.pl0 +19 -0
  24. data/examples/rie_pl0/orig_ex/exerrmre.pl0 +20 -0
  25. data/examples/rie_pl0/orig_ex/exerrtok.pl0 +18 -0
  26. data/examples/rie_pl0/orig_ex/exmdg.pl0 +40 -0
  27. data/examples/rie_pl0/orig_ex/exmdgwwl.pl0 +43 -0
  28. data/examples/rie_pl0/orig_ex/exmrw.pl0 +22 -0
  29. data/examples/rie_pl0/orig_ex/exmwwl.pl0 +18 -0
  30. data/examples/rie_pl0/orig_ex/exnorw.pl0 +17 -0
  31. data/examples/rie_pl0/pl0.rie.dr +450 -0
  32. data/examples/rie_pl0/test.pl0 +10 -0
  33. data/examples/sample_calc/calc.action.dr +33 -33
  34. data/examples/sample_calc/calc.ast.action.dr +65 -66
  35. data/examples/sample_calc/calc.ast.dr +55 -55
  36. data/examples/sample_calc/calc.cst.dr +45 -45
  37. data/examples/sample_calc/calc.dr +43 -43
  38. data/examples/sample_calc/calc.lex.dr +29 -29
  39. data/examples/sample_calc/{calc_prec.nvaction.dr → calc_prec.action.dr} +31 -31
  40. data/examples/slex_test/divreg.slex.dr +29 -29
  41. data/examples/slex_test/ljoin.slex.dr +36 -36
  42. data/examples/slex_test/test.divreg +1 -1
  43. data/examples/slex_test/test.ljoin +3 -3
  44. data/lib/depager.rb +582 -670
  45. data/lib/depager/grammar.rb +256 -291
  46. data/lib/depager/lr.rb +574 -579
  47. data/lib/depager/parser.rb +282 -277
  48. data/lib/depager/ruby/plugins/_rie_debug.rb +35 -0
  49. data/lib/depager/ruby/plugins/action.rb +53 -43
  50. data/lib/depager/ruby/plugins/ast.dr +364 -269
  51. data/lib/depager/ruby/plugins/ast.rb +1367 -1308
  52. data/lib/depager/ruby/plugins/cst.dr +172 -180
  53. data/lib/depager/ruby/plugins/cst.rb +587 -626
  54. data/lib/depager/ruby/plugins/lex.dr +85 -89
  55. data/lib/depager/ruby/plugins/lex.rb +310 -336
  56. data/lib/depager/ruby/plugins/rie.dr +723 -0
  57. data/lib/depager/ruby/plugins/rie.rb +1653 -0
  58. data/lib/depager/ruby/plugins/slex.dr +202 -200
  59. data/lib/depager/ruby/plugins/slex.rb +780 -817
  60. data/lib/depager/ruby/plugins/srp.rb +56 -51
  61. data/lib/depager/ruby/templates/extension_lalr_master.erb +46 -51
  62. data/lib/depager/ruby/templates/extension_lalr_slave.erb +99 -107
  63. data/lib/depager/ruby/templates/single_lalr_parser.erb +115 -117
  64. data/lib/depager/utils.rb +148 -318
  65. data/lib/depager/version.rb +4 -3
  66. metadata +52 -60
  67. data/ChangeLog +0 -16
  68. data/data/depager/pre-setup.rb +0 -3
  69. data/examples/c89/c89.tab.rb +0 -7127
  70. data/examples/pl0d/pl0ds.tab.rb +0 -2698
  71. data/examples/sample_calc/calc.action.tab.rb +0 -457
  72. data/examples/sample_calc/calc.ast.action.tab.rb +0 -749
  73. data/examples/sample_calc/calc.ast.tab.rb +0 -665
  74. data/examples/sample_calc/calc.astdf.dr +0 -54
  75. data/examples/sample_calc/calc.astdf.tab.rb +0 -672
  76. data/examples/sample_calc/calc.atree.tab.rb +0 -451
  77. data/examples/sample_calc/calc.cst.tab.rb +0 -644
  78. data/examples/sample_calc/calc.lex.tab.rb +0 -374
  79. data/examples/sample_calc/calc.nvaction.dr +0 -33
  80. data/examples/sample_calc/calc.nvaction.tab.rb +0 -465
  81. data/examples/sample_calc/calc.tab.rb +0 -365
  82. data/examples/sample_calc/calc_prec.nvaction.tab.rb +0 -431
  83. data/examples/slex_test/divreg.slex.tab.rb +0 -303
  84. data/examples/slex_test/ljoin.slex.tab.rb +0 -370
  85. data/lib/depager/ruby/plugins/_ast_tmpl.rb +0 -73
  86. data/lib/depager/ruby/plugins/astdf.rb +0 -6
  87. data/lib/depager/ruby/plugins/atree.dr +0 -55
  88. data/lib/depager/ruby/plugins/atree.rb +0 -347
  89. data/lib/depager/ruby/plugins/nvaction.rb +0 -19
  90. data/lib/depager/ruby/templates/simple.erb +0 -23
  91. data/setup.rb +0 -1585
@@ -1,1308 +1,1367 @@
1
-
2
- ###
3
- ### ASTBuilderExtension - Depager Extension (master)
4
- ###
5
- require 'pp.rb'
6
- require 'depager/parser.rb'
7
-
8
-
9
- module D4ASTBuilderExtension #:nodoc:all
10
- end
11
-
12
- class ASTBuilderExtension #:nodoc:all
13
- include Depager::ExtensionUtils
14
-
15
- attr_accessor :h2p
16
-
17
- def initialize
18
- @master = self
19
- @hook = []
20
- @h2p = {}
21
- init_parser
22
- end
23
-
24
- def __regext__ p
25
- super p, :default, nil
26
-
27
- @hook[0] = ASTBuilderExtension_post_rhs.new(p, @nparam, self)
28
- @h2p['post_rhs'] = @hook[0]
29
- p.hooks[:post_rhs].push [@hook[0], :do_parse]
30
-
31
- @hook[1] = ASTBuilderExtension_pre_rule_list.new(p, @nparam, self)
32
- @h2p['pre_rule_list'] = @hook[1]
33
- p.hooks[:pre_rule_list].push [@hook[1], :do_parse]
34
-
35
- regext p
36
- end
37
-
38
- ### Inner Code
39
- require 'plugins/_ast_tmpl'
40
- attr_accessor :optouter, :on_reduce, :visitor
41
- def init_parser
42
- super
43
- @visitor = Hash.new{|hash, key| hash[key] = []}
44
- @optouter = []
45
- @on_reduce = []
46
- @output_file_name = nil
47
- end
48
- def post_rule_list
49
- g_parser.optouter <<
50
- gen_action_decorator_code(target_name, paramkey,
51
- @on_reduce, @optouter)
52
- end
53
-
54
- def modify_action_code code, nodes=[]
55
- code = code.gsub(/\$\.([a-z_])/, 'node.\1')
56
- code << %{
57
- rescue
58
- warn "raise at src:\#{node.lineno}/\#{node.class.name}"
59
- raise
60
- }
61
- end
62
- def gen_accept_code sym
63
- return ''
64
- end
65
-
66
- attr_reader :output_file_name
67
- def output_file_name= ofname
68
- ofname = ofname.match(/'(.+)'/) ? $1 : ofname
69
- @output_file_name = ofname
70
- end
71
-
72
- end
73
-
74
- ### Outer Code
75
-
76
- ###
77
- ### ASTBuilderExtension_pre_rule_list - Part of Depager Extension (slave)
78
- ###
79
- module D4ASTBuilderExtension_pre_rule_list #:nodoc:all
80
- end
81
-
82
- class ASTBuilderExtension_pre_rule_list < Depager::LALR::Basis #:nodoc:all
83
- include Depager::ExtensionUtils
84
-
85
-
86
- ### Reduce Table
87
- reduce_table = [
88
- [ -1, 1 ],
89
- [ 0, 3 ],
90
- [ 1, 0 ],
91
- [ 1, 3 ],
92
- [ 2, 0 ],
93
- [ 2, 2 ],
94
- [ 3, 1 ],
95
- [ 3, 2 ],
96
- [ 6, 3 ],
97
- [ 7, 3 ],
98
- [ 7, 4 ],
99
- [ 4, 0 ],
100
- [ 4, 2 ],
101
- [ 4, 3 ],
102
- [ 8, 1 ],
103
- [ 8, 3 ],
104
- [ 10, 1 ],
105
- [ 10, 2 ],
106
- [ 9, 1 ],
107
- [ 9, 3 ],
108
- [ 5, 0 ],
109
- [ 5, 1 ],
110
- [ 5, 1 ],
111
- [ 11, 1 ],
112
- [ 11, 2 ],
113
- [ 12, 4 ],
114
- ]
115
- ### Extension Params
116
- nparams = {
117
- 'NVAction' => 2,
118
- }
119
- ### Term to Int
120
- t2i = {
121
- nil => 0,
122
- false => 1,
123
- :NODE => 2,
124
- :ACTION => 3,
125
- :VISITOR => 4,
126
- :ID => 5,
127
- "(" => 6,
128
- ")" => 7,
129
- "[" => 8,
130
- "]" => 9,
131
- "," => 10,
132
- "-" => 11,
133
- "<" => 12,
134
- ">" => 13,
135
- }
136
- ### Int to Term
137
- i2t = [
138
- nil,
139
- false,
140
- :NODE,
141
- :ACTION,
142
- :VISITOR,
143
- :ID,
144
- "(",
145
- ")",
146
- "[",
147
- "]",
148
- ",",
149
- "-",
150
- "<",
151
- ">",
152
- ]
153
- ### Action Table
154
- action_table = [
155
- [ nil, nil, 1, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
156
- [ nil, nil, nil, nil, nil, nil, nil, nil, 5, nil, nil, nil, nil, nil, ],
157
- [ ACC, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
158
- [ nil, nil, nil, nil, 6, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
159
- [ nil, nil, nil, 8, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
160
- [ nil, nil, nil, nil, nil, 10, nil, nil, nil, 9, nil, nil, nil, nil, ],
161
- [ nil, nil, nil, 12, nil, nil, nil, nil, nil, nil, nil, nil, 16, nil, ],
162
- [ nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, nil, nil, nil, nil, ],
163
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
164
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
165
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
166
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, 21, 22, nil, nil, nil, ],
167
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
168
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
169
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 16, nil, ],
170
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
171
- [ nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, nil, nil, nil, nil, ],
172
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
173
- [ nil, nil, nil, nil, nil, nil, 25, nil, nil, nil, nil, nil, nil, nil, ],
174
- [ nil, nil, nil, nil, nil, nil, nil, nil, 5, nil, nil, nil, nil, nil, ],
175
- [ nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, nil, nil, nil, nil, ],
176
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
177
- [ nil, nil, nil, nil, nil, 28, nil, nil, nil, nil, nil, nil, nil, nil, ],
178
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
179
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 29, ],
180
- [ nil, nil, nil, nil, nil, 31, nil, 34, nil, nil, nil, 32, nil, nil, ],
181
- [ nil, nil, nil, 12, nil, nil, nil, nil, nil, nil, nil, nil, 16, nil, ],
182
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
183
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
184
- [ nil, nil, nil, 36, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
185
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
186
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
187
- [ nil, nil, nil, nil, nil, 37, nil, nil, nil, nil, nil, nil, nil, nil, ],
188
- [ nil, nil, nil, nil, nil, nil, nil, 39, nil, nil, 38, nil, nil, nil, ],
189
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
190
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
191
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
192
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
193
- [ nil, nil, nil, nil, nil, 31, nil, nil, nil, nil, nil, 32, nil, nil, ],
194
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
195
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
196
- ]
197
- ### Default Reduce Table
198
- defred_table = [
199
- -2,
200
- -11,
201
- nil,
202
- -4,
203
- nil,
204
- nil,
205
- -20,
206
- nil,
207
- -3,
208
- -12,
209
- -18,
210
- nil,
211
- -21,
212
- -5,
213
- -22,
214
- -23,
215
- nil,
216
- -6,
217
- nil,
218
- -11,
219
- -1,
220
- -13,
221
- nil,
222
- -24,
223
- nil,
224
- nil,
225
- -20,
226
- -7,
227
- -19,
228
- nil,
229
- -14,
230
- -16,
231
- nil,
232
- nil,
233
- -9,
234
- -8,
235
- -25,
236
- -17,
237
- nil,
238
- -10,
239
- -15,
240
- ]
241
- defred_after_shift_table = [
242
- nil,
243
- nil,
244
- nil,
245
- nil,
246
- nil,
247
- nil,
248
- nil,
249
- nil,
250
- -3,
251
- -12,
252
- -18,
253
- nil,
254
- -21,
255
- -5,
256
- nil,
257
- -23,
258
- nil,
259
- -6,
260
- nil,
261
- nil,
262
- nil,
263
- -13,
264
- nil,
265
- -24,
266
- nil,
267
- nil,
268
- nil,
269
- -7,
270
- -19,
271
- nil,
272
- -14,
273
- -16,
274
- nil,
275
- nil,
276
- -9,
277
- -8,
278
- -25,
279
- -17,
280
- nil,
281
- -10,
282
- -15,
283
- ]
284
- ### Nonterm to Int
285
- nt2i = {
286
- :start => 0,
287
- :opt_defnode => 1,
288
- :opt_defvis => 2,
289
- :defnode_list => 3,
290
- :opt_attr => 4,
291
- :opt_action => 5,
292
- :defnode => 6,
293
- :defnode_header => 7,
294
- :fact_list => 8,
295
- :id_list => 9,
296
- :fact => 10,
297
- :pass_action_list => 11,
298
- :pass_action => 12,
299
- }
300
- ### Int to Nonterm
301
- i2nt = [
302
- :start,
303
- :opt_defnode,
304
- :opt_defvis,
305
- :defnode_list,
306
- :opt_attr,
307
- :opt_action,
308
- :defnode,
309
- :defnode_header,
310
- :fact_list,
311
- :id_list,
312
- :fact,
313
- :pass_action_list,
314
- :pass_action,
315
- ]
316
- ### Goto Table
317
- goto_table = [
318
- [ 2, 3, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
319
- [ nil, nil, nil, nil, 4, nil, nil, nil, nil, nil, nil, nil, nil, ],
320
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
321
- [ nil, nil, 7, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
322
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
323
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, 11, nil, nil, nil, ],
324
- [ nil, nil, nil, nil, nil, 13, nil, nil, nil, nil, nil, 14, 15, ],
325
- [ nil, nil, nil, 20, nil, nil, 17, 19, nil, nil, nil, nil, nil, ],
326
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
327
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
328
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
329
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
330
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
331
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
332
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 23, ],
333
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
334
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
335
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
336
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
337
- [ nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, nil, nil, nil, ],
338
- [ nil, nil, nil, nil, nil, nil, 27, 19, nil, nil, nil, nil, nil, ],
339
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
340
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
341
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
342
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
343
- [ nil, nil, nil, nil, nil, nil, nil, nil, 33, nil, 30, nil, nil, ],
344
- [ nil, nil, nil, nil, nil, 35, nil, nil, nil, nil, nil, 14, 15, ],
345
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
346
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
347
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
348
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
349
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
350
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
351
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
352
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
353
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
354
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
355
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
356
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, ],
357
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
358
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
359
- ]
360
-
361
- Tables = [ reduce_table, nparams, action_table,
362
- defred_table, defred_after_shift_table, goto_table,
363
- t2i, i2t, nt2i, i2nt ]
364
-
365
- attr_accessor :p, :m
366
- def initialize p, nparam, master = nil
367
- super()
368
- @g_parser = @p = p
369
- @master = @m = master
370
- @nparam = nparam
371
- @dect = D4ASTBuilderExtension_pre_rule_list::NVAction.new(self)
372
- init_parser
373
- end
374
-
375
-
376
- def do_parse?
377
- if @line =~ /^\s*%AST\{\s*\Z/
378
- @line = $'
379
- true
380
- else
381
- false
382
- end
383
- end
384
-
385
-
386
- def banner
387
- "%AST{ ... } / #{@master.class.name}"
388
- end
389
-
390
- ### Inner Code
391
-
392
- def lex
393
- begin
394
- until @line.empty?
395
- case @line
396
-
397
- when /\A\s+/, /\A#.*/
398
- @oldline = @line; @line = $'
399
-
400
-
401
-
402
- when /\A%\}\s*\Z/
403
- @oldline = @line; @line = $'
404
- @line = $'; yield nil,nil
405
-
406
-
407
- when /\ANode/
408
- @oldline = @line; @line = $'
409
- yield token(:NODE, $&)
410
-
411
-
412
- when /\AVisitor/
413
- @oldline = @line; @line = $'
414
- yield token(:VISITOR, $&)
415
-
416
-
417
- when /\A[a-zA-Z][a-zA-Z0-9_]*/
418
- @oldline = @line; @line = $'
419
- yield token(:ID, $&)
420
-
421
-
422
- when /\A\{/
423
- #
424
- ln = lineno; yield token(:ACTION, parse_action, ln)
425
-
426
-
427
- when /\A./
428
- @oldline = @line; @line = $'
429
- yield token($&, $&)
430
-
431
-
432
- else
433
- raise RuntimeError, "must not happen #{@line}"
434
- end
435
- end
436
- end while @line0 = @line = getline
437
- yield nil, nil
438
- end
439
-
440
- end
441
-
442
- ### Outer Code
443
-
444
- class D4ASTBuilderExtension_pre_rule_list::NVAction < Depager::LALR::Action #:nodoc:all
445
- include Depager::DecoratorUtils
446
-
447
- on_reduce = [
448
- nil,
449
- :_act_0,
450
- :_act_1,
451
- :_act_2,
452
- :_act_3,
453
- :_act_4,
454
- :_act_5,
455
- :_act_6,
456
- :_act_7,
457
- :_act_8,
458
- :_act_9,
459
- :_act_10,
460
- :_act_11,
461
- :_act_12,
462
- :_act_13,
463
- :_act_14,
464
- :_act_15,
465
- :_act_16,
466
- :_act_17,
467
- :_act_18,
468
- :_act_19,
469
- :_act_20,
470
- :_act_21,
471
- :_act_22,
472
- :_act_23,
473
- :_act_24,
474
-
475
- ]
476
- Tables = [on_reduce]
477
- def initialize inside
478
- super inside, 'NVAction'
479
- @on_reduce, = self.class::Tables
480
- init_parser
481
- end
482
-
483
-
484
- module_eval <<-'.,.,122745803347277.,.,', 'ast.dr', 55
485
- def _act_0 val
486
- _opt_defnode, _opt_defvis, _defnode_list, = *val
487
-
488
- code = _opt_defnode
489
- code << val[2] << %{
490
- class Visitor
491
- def visit node
492
- node.accept(self)
493
- end
494
- #{master.visitor[nil].join}
495
- end
496
- };#code
497
- master.visitor.each do |k, v|
498
- next unless k
499
- code << %{
500
- class Visitor_#{k}
501
- #{v.join}
502
- end
503
- };#code
504
- end
505
- if master.output_file_name
506
- File.open(master.output_file_name, 'w') do |f|
507
- f.write code
508
- end
509
- g_parser.optouter << %!require '#{master.output_file_name}'\n!
510
- else
511
- g_parser.optouter << code
512
- end
513
-
514
- end
515
- .,.,122745803347277.,.,
516
-
517
- module_eval <<-'.,.,122745803338304.,.,', 'ast.dr', 84
518
- def _act_1 val
519
- ""
520
-
521
- end
522
- .,.,122745803338304.,.,
523
-
524
- module_eval <<-'.,.,122745803334064.,.,', 'ast.dr', 86
525
- def _act_2 val
526
- _NODE, _opt_attr, _ACTION, = *val
527
-
528
- ini = %{
529
- def initialize
530
- #{_ACTION.value}
531
- end
532
- };#code
533
- ERB.new(master.class::TMPL_NODE_BASE).result(binding)
534
-
535
- end
536
- .,.,122745803334064.,.,
537
-
538
- module_eval <<-'.,.,122745803350390.,.,', 'ast.dr', 96
539
- def _act_3 val
540
- []
541
-
542
- end
543
- .,.,122745803350390.,.,
544
-
545
- module_eval <<-'.,.,122745803327135.,.,', 'ast.dr', 98
546
- def _act_4 val
547
- _VISITOR, _opt_action, = *val
548
-
549
- _opt_action[nil] ||= Token['', 0]
550
- _opt_action.each do |pass, act|
551
- master.visitor[pass].unshift(
552
- master.gen_meval_code(act.lineno, 0, act.value.to_s))
553
- end
554
-
555
- end
556
- .,.,122745803327135.,.,
557
-
558
- module_eval <<-'.,.,1227458033227.,.,', 'ast.dr', 107
559
- def _act_5 val
560
- _defnode, = *val
561
- _defnode
562
-
563
- end
564
- .,.,1227458033227.,.,
565
-
566
- module_eval <<-'.,.,122745803349542.,.,', 'ast.dr', 108
567
- def _act_6 val
568
- _defnode_list, _defnode, = *val
569
- _defnode_list << _defnode
570
-
571
- end
572
- .,.,122745803349542.,.,
573
-
574
- module_eval <<-'.,.,122745803342203.,.,', 'ast.dr', 112
575
- def _act_7 val
576
- _defnode_header, _opt_attr, _opt_action, = *val
577
-
578
- name, args = _defnode_header
579
- nodes, accept, attrs = [], '', _opt_attr
580
- args.each do |i|
581
- if i =~ /\-(.*)/
582
- nodes.push $1
583
- attrs.push $1
584
- else
585
- nodes.push i
586
- accept << master.gen_accept_code(i)
587
- end
588
- end
589
- _opt_action[nil] = Token['', 0] unless _opt_action[nil]
590
- _opt_action.each do |pass, act|
591
- vis_code = master.modify_action_code(act.value, nodes - attrs)
592
- master.visitor[pass] <<
593
- master.gen_defm_code("visit_Node_#{name} node",
594
- vis_code, act.lineno)
595
- end
596
- ERB.new(master.class::TMPL_NODE).result(binding)
597
-
598
- end
599
- .,.,122745803342203.,.,
600
-
601
- module_eval <<-'.,.,122745803342598.,.,', 'ast.dr', 135
602
- def _act_8 val
603
- _ID, _, _, = *val
604
- [_ID.value, []]
605
-
606
- end
607
- .,.,122745803342598.,.,
608
-
609
- module_eval <<-'.,.,122745803344032.,.,', 'ast.dr', 136
610
- def _act_9 val
611
- _ID, _, _fact_list, _, = *val
612
- [_ID.value, _fact_list]
613
-
614
- end
615
- .,.,122745803344032.,.,
616
-
617
- module_eval <<-'.,.,122745803361859.,.,', 'ast.dr', 139
618
- def _act_10 val
619
- []
620
-
621
- end
622
- .,.,122745803361859.,.,
623
-
624
- module_eval <<-'.,.,122745803323572.,.,', 'ast.dr', 140
625
- def _act_11 val
626
- _, _, = *val
627
- []
628
-
629
- end
630
- .,.,122745803323572.,.,
631
-
632
- module_eval <<-'.,.,122745803313754.,.,', 'ast.dr', 141
633
- def _act_12 val
634
- _, _id_list, _, = *val
635
- _id_list
636
-
637
- end
638
- .,.,122745803313754.,.,
639
-
640
- module_eval <<-'.,.,12274580331318.,.,', 'ast.dr', 144
641
- def _act_13 val
642
- _fact, = *val
643
- [_fact]
644
-
645
- end
646
- .,.,12274580331318.,.,
647
-
648
- module_eval <<-'.,.,1227458033572.,.,', 'ast.dr', 145
649
- def _act_14 val
650
- _fact_list, _, _fact, = *val
651
- _fact_list.push _fact
652
-
653
- end
654
- .,.,1227458033572.,.,
655
-
656
- module_eval <<-'.,.,12274580337279.,.,', 'ast.dr', 148
657
- def _act_15 val
658
- _ID, = *val
659
- _ID.value
660
-
661
- end
662
- .,.,12274580337279.,.,
663
-
664
- module_eval <<-'.,.,122745803312359.,.,', 'ast.dr', 149
665
- def _act_16 val
666
- _, _ID, = *val
667
- '-' + _ID.value
668
-
669
- end
670
- .,.,122745803312359.,.,
671
-
672
- module_eval <<-'.,.,122745803363891.,.,', 'ast.dr', 152
673
- def _act_17 val
674
- _ID, = *val
675
- [ _ID.value ]
676
-
677
- end
678
- .,.,122745803363891.,.,
679
-
680
- module_eval <<-'.,.,122745803346333.,.,', 'ast.dr', 153
681
- def _act_18 val
682
- _id_list, _, _ID, = *val
683
- _id_list.push _ID.value
684
-
685
- end
686
- .,.,122745803346333.,.,
687
-
688
- module_eval <<-'.,.,122745803358364.,.,', 'ast.dr', 156
689
- def _act_19 val
690
- {nil => Token['', 0]}
691
-
692
- end
693
- .,.,122745803358364.,.,
694
-
695
- module_eval <<-'.,.,122745803347204.,.,', 'ast.dr', 157
696
- def _act_20 val
697
- _ACTION, = *val
698
- {nil => _ACTION}
699
-
700
- end
701
- .,.,122745803347204.,.,
702
-
703
- module_eval <<-'.,.,122745803352244.,.,', 'ast.dr', 159
704
- def _act_21 val
705
- _pass_action_list, = *val
706
-
707
- Hash[ *_pass_action_list.flatten ].merge({nil => Token['', 0]})
708
-
709
- end
710
- .,.,122745803352244.,.,
711
-
712
- module_eval <<-'.,.,122745803353056.,.,', 'ast.dr', 164
713
- def _act_22 val
714
- _pass_action, = *val
715
- [ _pass_action ]
716
-
717
- end
718
- .,.,122745803353056.,.,
719
-
720
- module_eval <<-'.,.,122745803358655.,.,', 'ast.dr', 165
721
- def _act_23 val
722
- _pass_action_list, _pass_action, = *val
723
- _pass_action_list << _pass_action
724
-
725
- end
726
- .,.,122745803358655.,.,
727
-
728
- module_eval <<-'.,.,122745803347204.,.,', 'ast.dr', 169
729
- def _act_24 val
730
- _, _ID, _, _ACTION, = *val
731
- [_ID.value, _ACTION]
732
-
733
- end
734
- .,.,122745803347204.,.,
735
-
736
- end
737
-
738
-
739
- ###
740
- ### ASTBuilderExtension_post_rhs - Part of Depager Extension (slave)
741
- ###
742
- module D4ASTBuilderExtension_post_rhs #:nodoc:all
743
- end
744
-
745
- class ASTBuilderExtension_post_rhs < Depager::LALR::Basis #:nodoc:all
746
- include Depager::ExtensionUtils
747
-
748
-
749
- ### Reduce Table
750
- reduce_table = [
751
- [ -1, 1 ],
752
- [ 0, 1 ],
753
- [ 2, 3 ],
754
- [ 2, 4 ],
755
- [ 3, 1 ],
756
- [ 3, 3 ],
757
- [ 1, 1 ],
758
- [ 1, 1 ],
759
- [ 1, 1 ],
760
- [ 4, 2 ],
761
- [ 4, 1 ],
762
- [ 4, 1 ],
763
- [ 4, 1 ],
764
- [ 4, 1 ],
765
- [ 4, 1 ],
766
- [ 4, 1 ],
767
- [ 6, 0 ],
768
- [ 6, 1 ],
769
- [ 5, 2 ],
770
- [ 5, 3 ],
771
- [ 5, 3 ],
772
- [ 5, 3 ],
773
- ]
774
- ### Extension Params
775
- nparams = {
776
- 'NVAction' => 2,
777
- }
778
- ### Term to Int
779
- t2i = {
780
- nil => 0,
781
- false => 1,
782
- :ID => 2,
783
- "(" => 3,
784
- ")" => 4,
785
- "," => 5,
786
- :CONST => 6,
787
- :SYMBOL => 7,
788
- :STR => 8,
789
- :NILNODE => 9,
790
- :NUMBER => 10,
791
- :NIL => 11,
792
- :EMBED => 12,
793
- "[" => 13,
794
- "]" => 14,
795
- :LL => 15,
796
- "@" => 16,
797
- }
798
- ### Int to Term
799
- i2t = [
800
- nil,
801
- false,
802
- :ID,
803
- "(",
804
- ")",
805
- ",",
806
- :CONST,
807
- :SYMBOL,
808
- :STR,
809
- :NILNODE,
810
- :NUMBER,
811
- :NIL,
812
- :EMBED,
813
- "[",
814
- "]",
815
- :LL,
816
- "@",
817
- ]
818
- ### Action Table
819
- action_table = [
820
- [ nil, nil, 13, nil, nil, nil, 9, 11, 1, 3, 6, 8, nil, 12, nil, nil, nil, ],
821
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
822
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
823
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
824
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
825
- [ ACC, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
826
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
827
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 14, 15, ],
828
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
829
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
830
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
831
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
832
- [ nil, nil, 13, nil, nil, nil, 9, 11, 1, 3, 6, 8, nil, 12, 16, nil, nil, ],
833
- [ nil, nil, nil, 19, nil, nil, nil, nil, nil, nil, nil, nil, 21, nil, nil, nil, nil, ],
834
- [ nil, nil, 13, nil, nil, nil, 9, 11, 1, 3, 6, 8, nil, 12, nil, nil, nil, ],
835
- [ nil, nil, 13, nil, nil, nil, 9, 11, 1, 3, 6, 8, nil, 12, nil, nil, nil, ],
836
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
837
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 14, 15, ],
838
- [ nil, nil, nil, nil, nil, 25, nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, ],
839
- [ nil, nil, 13, nil, 26, nil, 9, 11, 1, 3, 6, 8, nil, 12, nil, nil, nil, ],
840
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
841
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
842
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 14, 15, ],
843
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 14, 15, ],
844
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
845
- [ nil, nil, 13, nil, nil, nil, 9, 11, 1, 3, 6, 8, nil, 12, nil, nil, nil, ],
846
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
847
- [ nil, nil, nil, nil, 29, 25, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
848
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 14, 15, ],
849
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
850
- ]
851
- ### Default Reduce Table
852
- defred_table = [
853
- nil,
854
- -12,
855
- -6,
856
- -13,
857
- -8,
858
- nil,
859
- -14,
860
- -1,
861
- -15,
862
- -10,
863
- -7,
864
- -11,
865
- nil,
866
- -16,
867
- nil,
868
- nil,
869
- -18,
870
- -4,
871
- nil,
872
- nil,
873
- -9,
874
- -17,
875
- -20,
876
- -21,
877
- -19,
878
- nil,
879
- -2,
880
- nil,
881
- -5,
882
- -3,
883
- ]
884
- defred_after_shift_table = [
885
- nil,
886
- -12,
887
- -6,
888
- -13,
889
- -8,
890
- nil,
891
- -14,
892
- nil,
893
- -15,
894
- -10,
895
- -7,
896
- -11,
897
- nil,
898
- nil,
899
- nil,
900
- nil,
901
- -18,
902
- nil,
903
- nil,
904
- nil,
905
- -9,
906
- -17,
907
- nil,
908
- nil,
909
- -19,
910
- nil,
911
- -2,
912
- nil,
913
- nil,
914
- -3,
915
- ]
916
- ### Nonterm to Int
917
- nt2i = {
918
- :start => 0,
919
- :fnl => 1,
920
- :node => 2,
921
- :fnlpair => 3,
922
- :fact => 4,
923
- :list => 5,
924
- :opt_embed => 6,
925
- }
926
- ### Int to Nonterm
927
- i2nt = [
928
- :start,
929
- :fnl,
930
- :node,
931
- :fnlpair,
932
- :fact,
933
- :list,
934
- :opt_embed,
935
- ]
936
- ### Goto Table
937
- goto_table = [
938
- [ 5, 7, 10, nil, 2, 4, nil, ],
939
- [ nil, nil, nil, nil, nil, nil, nil, ],
940
- [ nil, nil, nil, nil, nil, nil, nil, ],
941
- [ nil, nil, nil, nil, nil, nil, nil, ],
942
- [ nil, nil, nil, nil, nil, nil, nil, ],
943
- [ nil, nil, nil, nil, nil, nil, nil, ],
944
- [ nil, nil, nil, nil, nil, nil, nil, ],
945
- [ nil, nil, nil, nil, nil, nil, nil, ],
946
- [ nil, nil, nil, nil, nil, nil, nil, ],
947
- [ nil, nil, nil, nil, nil, nil, nil, ],
948
- [ nil, nil, nil, nil, nil, nil, nil, ],
949
- [ nil, nil, nil, nil, nil, nil, nil, ],
950
- [ nil, 17, 10, 18, 2, 4, nil, ],
951
- [ nil, nil, nil, nil, nil, nil, 20, ],
952
- [ nil, 22, 10, nil, 2, 4, nil, ],
953
- [ nil, 23, 10, nil, 2, 4, nil, ],
954
- [ nil, nil, nil, nil, nil, nil, nil, ],
955
- [ nil, nil, nil, nil, nil, nil, nil, ],
956
- [ nil, nil, nil, nil, nil, nil, nil, ],
957
- [ nil, 17, 10, 27, 2, 4, nil, ],
958
- [ nil, nil, nil, nil, nil, nil, nil, ],
959
- [ nil, nil, nil, nil, nil, nil, nil, ],
960
- [ nil, nil, nil, nil, nil, nil, nil, ],
961
- [ nil, nil, nil, nil, nil, nil, nil, ],
962
- [ nil, nil, nil, nil, nil, nil, nil, ],
963
- [ nil, 28, 10, nil, 2, 4, nil, ],
964
- [ nil, nil, nil, nil, nil, nil, nil, ],
965
- [ nil, nil, nil, nil, nil, nil, nil, ],
966
- [ nil, nil, nil, nil, nil, nil, nil, ],
967
- [ nil, nil, nil, nil, nil, nil, nil, ],
968
- ]
969
-
970
- Tables = [ reduce_table, nparams, action_table,
971
- defred_table, defred_after_shift_table, goto_table,
972
- t2i, i2t, nt2i, i2nt ]
973
-
974
- attr_accessor :p, :m
975
- def initialize p, nparam, master = nil
976
- super()
977
- @g_parser = @p = p
978
- @master = @m = master
979
- @nparam = nparam
980
- @dect = D4ASTBuilderExtension_post_rhs::NVAction.new(self)
981
- init_parser
982
- end
983
-
984
-
985
- def do_parse?
986
- if @line =~ /^\s*=>/
987
- @line = $'
988
- true
989
- else
990
- false
991
- end
992
- end
993
-
994
-
995
- def banner
996
- "=>... / #{@master.class.name}"
997
- end
998
-
999
- ### Inner Code
1000
-
1001
- def lex
1002
- begin
1003
- until @line.empty?
1004
- case @line
1005
-
1006
- when /\A[ \t]+/
1007
- @oldline = @line; @line = $'
1008
-
1009
-
1010
-
1011
- when /\A\r?\n/
1012
- @oldline = @line; @line = $'
1013
- yield nil, nil
1014
-
1015
-
1016
- when /\A<</
1017
- @oldline = @line; @line = $'
1018
- yield token(:LL, $&)
1019
-
1020
-
1021
- when /\A%([a-zA-Z0-9_]+)((::[a-zA-Z0-9_]+)*)/
1022
- @oldline = @line; @line = $'
1023
- yield token(:CONST, $1+$2)
1024
-
1025
-
1026
- when /\A%\((.+)\)%/
1027
- @oldline = @line; @line = $'
1028
- yield token(:EMBED, $1)
1029
-
1030
-
1031
- when /\Anil/
1032
- @oldline = @line; @line = $'
1033
- yield token(:NIL, $&)
1034
-
1035
-
1036
- when /\ANilNode/
1037
- @oldline = @line; @line = $'
1038
- yield token(:NILNODE, $&)
1039
-
1040
-
1041
- when /\A[0-9]+/
1042
- @oldline = @line; @line = $'
1043
- yield token(:NUMBER, $&.to_i)
1044
-
1045
-
1046
- when /\A:[a-zA-Z0-9_]+/
1047
- @oldline = @line; @line = $'
1048
- yield token(:SYMBOL, $&)
1049
-
1050
-
1051
- when /\A[a-zA-Z][a-zA-Z0-9_]*/
1052
- @oldline = @line; @line = $'
1053
- yield token(:ID, $&)
1054
-
1055
-
1056
- when /\A'(.+)'/
1057
- @oldline = @line; @line = $'
1058
- yield token(:STR, $1)
1059
-
1060
-
1061
- when /\A./
1062
- @oldline = @line; @line = $'
1063
- yield token($&, $&)
1064
-
1065
-
1066
- else
1067
- raise RuntimeError, "must not happen #{@line}"
1068
- end
1069
- end
1070
- end while @line0 = @line = getline
1071
- yield nil, nil
1072
- end
1073
- def do_default
1074
- n = master.nrules
1075
- master.optouter <<
1076
- master.gen_defm_code("_ast_#{n} val", "NilNode.new(basis.file.lineno)", lineno)
1077
- master.on_reduce[n] = ":_ast_#{n}"
1078
- end
1079
-
1080
- end
1081
-
1082
- ### Outer Code
1083
-
1084
- class D4ASTBuilderExtension_post_rhs::NVAction < Depager::LALR::Action #:nodoc:all
1085
- include Depager::DecoratorUtils
1086
-
1087
- on_reduce = [
1088
- nil,
1089
- :_act_0,
1090
- :_act_1,
1091
- :_act_2,
1092
- :_act_3,
1093
- :_act_4,
1094
- :_act_5,
1095
- :_act_6,
1096
- :_act_7,
1097
- :_act_8,
1098
- :_act_9,
1099
- :_act_10,
1100
- :_act_11,
1101
- :_act_12,
1102
- :_act_13,
1103
- :_act_14,
1104
- :_act_15,
1105
- :_act_16,
1106
- :_act_17,
1107
- :_act_18,
1108
- :_act_19,
1109
- :_act_20,
1110
-
1111
- ]
1112
- Tables = [on_reduce]
1113
- def initialize inside
1114
- super inside, 'NVAction'
1115
- @on_reduce, = self.class::Tables
1116
- init_parser
1117
- end
1118
-
1119
-
1120
- module_eval <<-'.,.,122745803323544.,.,', 'ast.dr', 206
1121
- def _act_0 val
1122
- _fnl, = *val
1123
-
1124
- n = master.nrules
1125
- master.optouter <<
1126
- master.gen_defm_code("_ast_#{n} val", _fnl, basis.file.lineno)
1127
- master.on_reduce[n] = ":_ast_#{n}"
1128
-
1129
- end
1130
- .,.,122745803323544.,.,
1131
-
1132
- module_eval <<-'.,.,122745803342416.,.,', 'ast.dr', 214
1133
- def _act_1 val
1134
- _ID, _, _, = *val
1135
- "Node_#{_ID.value}.new(basis.file.lineno)"
1136
-
1137
- end
1138
- .,.,122745803342416.,.,
1139
-
1140
- module_eval <<-'.,.,122745803355262.,.,', 'ast.dr', 216
1141
- def _act_2 val
1142
- _ID, _, _fnlpair, _, = *val
1143
-
1144
- if g_parser.rhs.size > 0
1145
- "Node_#{_ID.value}.new(val[0].lineno, #{_fnlpair.join(', ')})"
1146
- else
1147
- "Node_#{_ID.value}.new(basis.file.lineno, #{_fnlpair.join(', ')})"
1148
- end
1149
-
1150
- end
1151
- .,.,122745803355262.,.,
1152
-
1153
- module_eval <<-'.,.,122745803363965.,.,', 'ast.dr', 225
1154
- def _act_3 val
1155
- _fnl, = *val
1156
- [_fnl]
1157
-
1158
- end
1159
- .,.,122745803363965.,.,
1160
-
1161
- module_eval <<-'.,.,122745803314919.,.,', 'ast.dr', 226
1162
- def _act_4 val
1163
- _fnlpair, _, _fnl, = *val
1164
- _fnlpair << _fnl
1165
-
1166
- end
1167
- .,.,122745803314919.,.,
1168
-
1169
- module_eval <<-'.,.,122745803310521.,.,', 'ast.dr', 229
1170
- def _act_5 val
1171
- _fact, = *val
1172
- _fact
1173
-
1174
- end
1175
- .,.,122745803310521.,.,
1176
-
1177
- module_eval <<-'.,.,122745803362726.,.,', 'ast.dr', 230
1178
- def _act_6 val
1179
- _node, = *val
1180
- _node
1181
-
1182
- end
1183
- .,.,122745803362726.,.,
1184
-
1185
- module_eval <<-'.,.,122745803349195.,.,', 'ast.dr', 231
1186
- def _act_7 val
1187
- _list, = *val
1188
- _list
1189
-
1190
- end
1191
- .,.,122745803349195.,.,
1192
-
1193
- module_eval <<-'.,.,122745803359728.,.,', 'ast.dr', 235
1194
- def _act_8 val
1195
- _ID, _opt_embed, = *val
1196
-
1197
- unless i = g_parser.name_to_rhs_index(_ID.value)
1198
- warn "#{g_parser.lineno}: ?#{_ID.value}"
1199
- raise
1200
- end
1201
- "val[#{i}]#{val[1]}"
1202
-
1203
- end
1204
- .,.,122745803359728.,.,
1205
-
1206
- module_eval <<-'.,.,122745803321128.,.,', 'ast.dr', 242
1207
- def _act_9 val
1208
- _CONST, = *val
1209
- "Depager::Token[#{_CONST.value}]"
1210
-
1211
- end
1212
- .,.,122745803321128.,.,
1213
-
1214
- module_eval <<-'.,.,122745803364413.,.,', 'ast.dr', 243
1215
- def _act_10 val
1216
- _SYMBOL, = *val
1217
- "Depager::Token[#{_SYMBOL.value}]"
1218
-
1219
- end
1220
- .,.,122745803364413.,.,
1221
-
1222
- module_eval <<-'.,.,122745803318993.,.,', 'ast.dr', 244
1223
- def _act_11 val
1224
- _STR, = *val
1225
- "Depager::Token['#{_STR.value}']"
1226
-
1227
- end
1228
- .,.,122745803318993.,.,
1229
-
1230
- module_eval <<-'.,.,122745803313763.,.,', 'ast.dr', 245
1231
- def _act_12 val
1232
- _NILNODE, = *val
1233
- "NilNode.new(basis.file.lineno)"
1234
-
1235
- end
1236
- .,.,122745803313763.,.,
1237
-
1238
- module_eval <<-'.,.,122745803311965.,.,', 'ast.dr', 246
1239
- def _act_13 val
1240
- _NUMBER, = *val
1241
- "Depager::Token[#{_NUMBER.value}]"
1242
-
1243
- end
1244
- .,.,122745803311965.,.,
1245
-
1246
- module_eval <<-'.,.,122745803349781.,.,', 'ast.dr', 247
1247
- def _act_14 val
1248
- _NIL, = *val
1249
- "nil"
1250
-
1251
- end
1252
- .,.,122745803349781.,.,
1253
-
1254
- module_eval <<-'.,.,122745803334484.,.,', 'ast.dr', 250
1255
- def _act_15 val
1256
- ''
1257
-
1258
- end
1259
- .,.,122745803334484.,.,
1260
-
1261
- module_eval <<-'.,.,122745803333629.,.,', 'ast.dr', 251
1262
- def _act_16 val
1263
- _EMBED, = *val
1264
- _EMBED.value
1265
-
1266
- end
1267
- .,.,122745803333629.,.,
1268
-
1269
- module_eval <<-'.,.,122745803344085.,.,', 'ast.dr', 254
1270
- def _act_17 val
1271
- _, _, = *val
1272
- "NodeList.new(basis.file.lineno, [])"
1273
-
1274
- end
1275
- .,.,122745803344085.,.,
1276
-
1277
- module_eval <<-'.,.,122745803324936.,.,', 'ast.dr', 256
1278
- def _act_18 val
1279
- _, _fnlpair, _, = *val
1280
-
1281
- if g_parser.rhs.size > 0
1282
- "NodeList.new(val[0].lineno, [#{_fnlpair.join(', ')}])"
1283
- else
1284
- "NodeList.new(basis.file.lineno, #{_fnlpair.join(', ')})"
1285
- end
1286
-
1287
- end
1288
- .,.,122745803324936.,.,
1289
-
1290
- module_eval <<-'.,.,122745803328741.,.,', 'ast.dr', 263
1291
- def _act_19 val
1292
- _l, _LL, _r, = *val
1293
- "#{_l}.push(#{_r})"
1294
-
1295
- end
1296
- .,.,122745803328741.,.,
1297
-
1298
- module_eval <<-'.,.,122745803318918.,.,', 'ast.dr', 264
1299
- def _act_20 val
1300
- _l, _, _r, = *val
1301
- "#{_l}.concat(#{_r})"
1302
-
1303
- end
1304
- .,.,122745803318918.,.,
1305
-
1306
- end
1307
-
1308
-
1
+ # -*- coding: utf-8 -*-
2
+
3
+ ###
4
+ ### Depager::ASTBuilderExtension - Depager Extension (master)
5
+ ###
6
+ require 'depager/parser.rb'
7
+
8
+
9
+ module Depager ; end
10
+
11
+ class Depager::ASTBuilderExtension < Depager::Extension
12
+
13
+ def initialize
14
+ @master = self
15
+ @slaves = []
16
+ end
17
+
18
+ def extension_registered g_parser
19
+ super g_parser
20
+
21
+ @slaves[0] = Depager::ASTBuilderExtension::Slave_pre_rule_list::Parser.new(g_parser, self)
22
+ g_parser.hooks[:pre_rule_list].push [@slaves[0], :do_parse]
23
+ @slaves[1] = Depager::ASTBuilderExtension::Slave_post_rhs::Parser.new(g_parser, self)
24
+ g_parser.hooks[:post_rhs].push [@slaves[1], :do_parse]
25
+ end
26
+
27
+ module_eval <<'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 8
28
+ attr_accessor :action_code, :on_reduce, :visitors
29
+ def init_extension
30
+ @visitors = Hash.new{|hash, key| hash[key] = []}
31
+ @action_code = ''
32
+ @on_reduce = []
33
+ @output_file_name = nil
34
+ end
35
+ def term_extension
36
+ g_parser.outer_code <<
37
+ generate_action_decorator_code(@on_reduce, @action_code)
38
+ end
39
+
40
+ def modify_action_code code, nodes=[]
41
+ code = code.gsub(/\$\.([a-z_])/, 'node.\1')
42
+ code << %{
43
+ rescue
44
+ warn "raise at src:\#{node.lineno}/\#{node.class.name}"
45
+ raise
46
+ }
47
+ end
48
+
49
+ def gen_accept_code sym
50
+ return ''
51
+ end
52
+
53
+ def node_name name
54
+ name = name == '@List' ? "NodeList" : "Node_#{name}"
55
+ "#{target_namespace}::#{name}"
56
+ end
57
+
58
+ attr_reader :output_file_name
59
+ def output_file_name= name
60
+ name = name.match(/'(.+)'/) ? $1 : name
61
+ @output_file_name = name
62
+ end
63
+
64
+ DEPAGER_EXPANDED_CODE
65
+
66
+ end
67
+
68
+ ###
69
+ ### Depager::ASTBuilderExtension::Slave_pre_rule_list - Part of Depager Extension (slave)
70
+ ###
71
+
72
+ module Depager::ASTBuilderExtension::Slave_pre_rule_list #:nodoc:all
73
+ class Parser < Depager::LALR::Basis #:nodoc:all
74
+ include Depager::Utils::ExtensionSlaveMethods
75
+
76
+
77
+ ### Reduce Table
78
+ reduce_table = [
79
+ [ -1, 1 ],
80
+ [ 0, 3 ],
81
+ [ 1, 0 ],
82
+ [ 1, 3 ],
83
+ [ 2, 0 ],
84
+ [ 2, 2 ],
85
+ [ 3, 1 ],
86
+ [ 3, 2 ],
87
+ [ 6, 3 ],
88
+ [ 7, 3 ],
89
+ [ 7, 4 ],
90
+ [ 4, 0 ],
91
+ [ 4, 2 ],
92
+ [ 4, 3 ],
93
+ [ 8, 1 ],
94
+ [ 8, 3 ],
95
+ [ 10, 1 ],
96
+ [ 10, 2 ],
97
+ [ 9, 1 ],
98
+ [ 9, 3 ],
99
+ [ 5, 0 ],
100
+ [ 5, 1 ],
101
+ [ 5, 1 ],
102
+ [ 11, 1 ],
103
+ [ 11, 2 ],
104
+ [ 12, 4 ],
105
+ ]
106
+ ### Term to Int
107
+ term_to_int = {
108
+ nil => 0,
109
+ false => 1,
110
+ :NODE => 2,
111
+ :ACTION => 3,
112
+ :VISITOR => 4,
113
+ :ID => 5,
114
+ "(" => 6,
115
+ ")" => 7,
116
+ "[" => 8,
117
+ "]" => 9,
118
+ "," => 10,
119
+ "-" => 11,
120
+ "<" => 12,
121
+ ">" => 13,
122
+ }
123
+ ### Int to Term
124
+ int_to_term = [
125
+ nil,
126
+ false,
127
+ :NODE,
128
+ :ACTION,
129
+ :VISITOR,
130
+ :ID,
131
+ "(",
132
+ ")",
133
+ "[",
134
+ "]",
135
+ ",",
136
+ "-",
137
+ "<",
138
+ ">",
139
+ ]
140
+ ### Action Table
141
+ action_table = [
142
+ [ nil, nil, 3, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
143
+ [ ACC, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
144
+ [ nil, nil, nil, nil, 5, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
145
+ [ nil, nil, nil, nil, nil, nil, nil, nil, 7, nil, nil, nil, nil, nil, ],
146
+ [ nil, nil, nil, nil, nil, 11, nil, nil, nil, nil, nil, nil, nil, nil, ],
147
+ [ nil, nil, nil, 13, nil, nil, nil, nil, nil, nil, nil, nil, 16, nil, ],
148
+ [ nil, nil, nil, 17, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
149
+ [ nil, nil, nil, nil, nil, 20, nil, nil, nil, 18, nil, nil, nil, nil, ],
150
+ [ nil, nil, nil, nil, nil, 11, nil, nil, nil, nil, nil, nil, nil, nil, ],
151
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
152
+ [ nil, nil, nil, nil, nil, nil, nil, nil, 7, nil, nil, nil, nil, nil, ],
153
+ [ nil, nil, nil, nil, nil, nil, 23, nil, nil, nil, nil, nil, nil, nil, ],
154
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
155
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
156
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 16, nil, ],
157
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
158
+ [ nil, nil, nil, nil, nil, 25, nil, nil, nil, nil, nil, nil, nil, nil, ],
159
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
160
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
161
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, 26, 27, nil, nil, nil, ],
162
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
163
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
164
+ [ nil, nil, nil, 13, nil, nil, nil, nil, nil, nil, nil, nil, 16, nil, ],
165
+ [ nil, nil, nil, nil, nil, 32, nil, 29, nil, nil, nil, 33, nil, nil, ],
166
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
167
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 34, ],
168
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
169
+ [ nil, nil, nil, nil, nil, 35, nil, nil, nil, nil, nil, nil, nil, nil, ],
170
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
171
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
172
+ [ nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, 37, nil, nil, nil, ],
173
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
174
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
175
+ [ nil, nil, nil, nil, nil, 38, nil, nil, nil, nil, nil, nil, nil, nil, ],
176
+ [ nil, nil, nil, 39, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
177
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
178
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
179
+ [ nil, nil, nil, nil, nil, 32, nil, nil, nil, nil, nil, 33, nil, nil, ],
180
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
181
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
182
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
183
+ ]
184
+ ### Default Reduce Table
185
+ defred_table = [
186
+ -2,
187
+ nil,
188
+ -4,
189
+ -11,
190
+ nil,
191
+ -20,
192
+ nil,
193
+ nil,
194
+ -1,
195
+ -6,
196
+ -11,
197
+ nil,
198
+ -5,
199
+ -21,
200
+ -22,
201
+ -23,
202
+ nil,
203
+ -3,
204
+ -12,
205
+ nil,
206
+ -18,
207
+ -7,
208
+ -20,
209
+ nil,
210
+ -24,
211
+ nil,
212
+ -13,
213
+ nil,
214
+ -8,
215
+ -9,
216
+ nil,
217
+ -14,
218
+ -16,
219
+ nil,
220
+ nil,
221
+ -19,
222
+ -10,
223
+ nil,
224
+ -17,
225
+ -25,
226
+ -15,
227
+ ]
228
+ defred_after_shift_table = [
229
+ nil,
230
+ nil,
231
+ nil,
232
+ nil,
233
+ nil,
234
+ nil,
235
+ nil,
236
+ nil,
237
+ nil,
238
+ -6,
239
+ nil,
240
+ nil,
241
+ -5,
242
+ -21,
243
+ nil,
244
+ -23,
245
+ nil,
246
+ -3,
247
+ -12,
248
+ nil,
249
+ -18,
250
+ -7,
251
+ nil,
252
+ nil,
253
+ -24,
254
+ nil,
255
+ -13,
256
+ nil,
257
+ -8,
258
+ -9,
259
+ nil,
260
+ -14,
261
+ -16,
262
+ nil,
263
+ nil,
264
+ -19,
265
+ -10,
266
+ nil,
267
+ -17,
268
+ -25,
269
+ -15,
270
+ ]
271
+ ### Nonterm to Int
272
+ nonterm_to_int = {
273
+ :start => 0,
274
+ :opt_defnode => 1,
275
+ :opt_defvis => 2,
276
+ :defnode_list => 3,
277
+ :opt_attr => 4,
278
+ :opt_action => 5,
279
+ :defnode => 6,
280
+ :defnode_header => 7,
281
+ :fact_list => 8,
282
+ :id_list => 9,
283
+ :fact => 10,
284
+ :pass_action_list => 11,
285
+ :pass_action => 12,
286
+ }
287
+ ### Int to Nonterm
288
+ int_to_nonterm = [
289
+ :start,
290
+ :opt_defnode,
291
+ :opt_defvis,
292
+ :defnode_list,
293
+ :opt_attr,
294
+ :opt_action,
295
+ :defnode,
296
+ :defnode_header,
297
+ :fact_list,
298
+ :id_list,
299
+ :fact,
300
+ :pass_action_list,
301
+ :pass_action,
302
+ ]
303
+ ### Goto Table
304
+ goto_table = [
305
+ [ 1, 2, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
306
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
307
+ [ nil, nil, 4, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
308
+ [ nil, nil, nil, nil, 6, nil, nil, nil, nil, nil, nil, nil, nil, ],
309
+ [ nil, nil, nil, 8, nil, nil, 9, 10, nil, nil, nil, nil, nil, ],
310
+ [ nil, nil, nil, nil, nil, 12, nil, nil, nil, nil, nil, 14, 15, ],
311
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
312
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, 19, nil, nil, nil, ],
313
+ [ nil, nil, nil, nil, nil, nil, 21, 10, nil, nil, nil, nil, nil, ],
314
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
315
+ [ nil, nil, nil, nil, 22, nil, nil, nil, nil, nil, nil, nil, nil, ],
316
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
317
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
318
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
319
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 24, ],
320
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
321
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
322
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
323
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
324
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
325
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
326
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
327
+ [ nil, nil, nil, nil, nil, 28, nil, nil, nil, nil, nil, 14, 15, ],
328
+ [ nil, nil, nil, nil, nil, nil, nil, nil, 30, nil, 31, nil, nil, ],
329
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
330
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
331
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
332
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
333
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
334
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
335
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
336
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
337
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
338
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
339
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
340
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
341
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
342
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, ],
343
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
344
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
345
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
346
+ ]
347
+
348
+ Tables = [ reduce_table, action_table,
349
+ defred_table, defred_after_shift_table, goto_table,
350
+ term_to_int, int_to_term, nonterm_to_int, int_to_nonterm ]
351
+
352
+ def initialize g_parser, master
353
+ super()
354
+ @g_parser = g_parser
355
+ @d_parser = g_parser.d_parser
356
+ @master = master
357
+ @decorated = Action.new(self)
358
+ end
359
+
360
+
361
+ def do_parse?
362
+ if @line.match(/^\s*%AST\{\s*\Z/)
363
+ @line = $'
364
+ true
365
+ else
366
+ false
367
+ end
368
+ end
369
+
370
+
371
+ def banner
372
+ "%AST{ ... } / Depager::ASTBuilderExtension"
373
+ end
374
+
375
+
376
+ def lex
377
+ begin
378
+ until @line.empty?
379
+ case @line
380
+
381
+ when /\A\s+/, /\A#.*/
382
+ @line = $'
383
+
384
+
385
+
386
+ when /\A%\}\s*\Z/
387
+ @line = $'
388
+ @line = $'; yield nil,nil
389
+
390
+
391
+ when /\ANode/
392
+ @line = $'
393
+ yield token(:NODE, $&)
394
+
395
+
396
+ when /\AVisitor/
397
+ @line = $'
398
+ yield token(:VISITOR, $&)
399
+
400
+
401
+ when /\A[a-zA-Z][a-zA-Z0-9_]*/
402
+ @line = $'
403
+ yield token(:ID, $&)
404
+
405
+
406
+ when /\A\{/
407
+ #
408
+ lineno = file.lineno; yield token(:ACTION, parse_block, lineno)
409
+
410
+
411
+ when /\A./
412
+ @line = $'
413
+ yield token($&, $&)
414
+
415
+
416
+ else
417
+ raise RuntimeError, "must not happen #{@line}"
418
+ end
419
+ end
420
+ end while @original_line = @line = file.gets
421
+ yield nil, nil
422
+ end
423
+
424
+ end
425
+ end
426
+
427
+
428
+ class Depager::ASTBuilderExtension::Slave_pre_rule_list::Action < Depager::LALR::Action #:nodoc:all
429
+ include Depager::Utils::ExtensionSlaveDecoratorMethods
430
+
431
+ on_reduce = [
432
+ nil,
433
+ :_act_1,
434
+ :_act_2,
435
+ :_act_3,
436
+ :_act_4,
437
+ :_act_5,
438
+ :_act_6,
439
+ :_act_7,
440
+ :_act_8,
441
+ :_act_9,
442
+ :_act_10,
443
+ :_act_11,
444
+ :_act_12,
445
+ :_act_13,
446
+ :_act_14,
447
+ :_act_15,
448
+ :_act_16,
449
+ :_act_17,
450
+ :_act_18,
451
+ :_act_19,
452
+ :_act_20,
453
+ :_act_21,
454
+ :_act_22,
455
+ :_act_23,
456
+ :_act_24,
457
+ :_act_25,
458
+
459
+ ]
460
+ Tables = [ on_reduce ]
461
+
462
+
463
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 59
464
+ def _act_1 val
465
+ _opt_defnode, _opt_defvis, _defnode_list, = *val
466
+
467
+ code = "module #{target_namespace}\n"
468
+ code << _opt_defnode
469
+ code << val[2]
470
+ master.visitors.each do |name, body|
471
+ code << ERB.new(master.class::VISITOR_TEMPLATE, nil, '-').result(binding)
472
+ end
473
+ code << "end\n"
474
+ if master.output_file_name
475
+ File.open(master.output_file_name, 'w') do |f|
476
+ f.write code
477
+ end
478
+ g_parser.outer_code << %!require '#{master.output_file_name}'\n!
479
+ else
480
+ g_parser.outer_code << code
481
+ end
482
+
483
+ end
484
+ DEPAGER_EXPANDED_CODE
485
+
486
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 78
487
+ def _act_2 val
488
+ ""
489
+
490
+ end
491
+ DEPAGER_EXPANDED_CODE
492
+
493
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 80
494
+ def _act_3 val
495
+ _NODE, _opt_attr, _ACTION, = *val
496
+
497
+ ini = %{
498
+ def initialize
499
+ #{_ACTION.value}
500
+ end
501
+ };#code
502
+ ERB.new(master.class::BASE_NODE_TEMPLATE, nil, '-').result(binding)
503
+
504
+ end
505
+ DEPAGER_EXPANDED_CODE
506
+
507
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 90
508
+ def _act_4 val
509
+ []
510
+
511
+ end
512
+ DEPAGER_EXPANDED_CODE
513
+
514
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 92
515
+ def _act_5 val
516
+ _VISITOR, _opt_action, = *val
517
+
518
+ _opt_action[nil] ||= Token.new('', 0)
519
+ _opt_action.each do |pass, act|
520
+ master.visitors[pass].unshift(
521
+ master.expand_inline_code(act.value.to_s, act.lineno))
522
+ end
523
+
524
+ end
525
+ DEPAGER_EXPANDED_CODE
526
+
527
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 101
528
+ def _act_6 val
529
+ _defnode, = *val
530
+ _defnode
531
+
532
+ end
533
+ DEPAGER_EXPANDED_CODE
534
+
535
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 102
536
+ def _act_7 val
537
+ _defnode_list, _defnode, = *val
538
+ _defnode_list << _defnode
539
+
540
+ end
541
+ DEPAGER_EXPANDED_CODE
542
+
543
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 106
544
+ def _act_8 val
545
+ _defnode_header, _opt_attr, _opt_action, = *val
546
+
547
+ name, args = _defnode_header
548
+ nodes, accept, attrs = [], '', _opt_attr
549
+ args.each do |i|
550
+ if i =~ /\-(.*)/
551
+ nodes.push $1
552
+ attrs.push $1
553
+ else
554
+ nodes.push i
555
+ accept << master.gen_accept_code(i)
556
+ end
557
+ end
558
+ _opt_action[nil] = Token.new('', 0) unless _opt_action[nil]
559
+ _opt_action.each do |pass, act|
560
+ vis_code = master.modify_action_code(act.value, nodes - attrs)
561
+ master.visitors[pass] <<
562
+ master.expand_inline_code(vis_code, act.lineno, :wrap => "def visit_Node_#{name} node")
563
+ end
564
+ ERB.new(master.class::NODE_TEMPLATE, nil, '-').result(binding)
565
+
566
+ end
567
+ DEPAGER_EXPANDED_CODE
568
+
569
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 128
570
+ def _act_9 val
571
+ _ID, _, _, = *val
572
+ [_ID.value, []]
573
+
574
+ end
575
+ DEPAGER_EXPANDED_CODE
576
+
577
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 129
578
+ def _act_10 val
579
+ _ID, _, _fact_list, _, = *val
580
+ [_ID.value, _fact_list]
581
+
582
+ end
583
+ DEPAGER_EXPANDED_CODE
584
+
585
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 132
586
+ def _act_11 val
587
+ []
588
+
589
+ end
590
+ DEPAGER_EXPANDED_CODE
591
+
592
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 133
593
+ def _act_12 val
594
+ _, _, = *val
595
+ []
596
+
597
+ end
598
+ DEPAGER_EXPANDED_CODE
599
+
600
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 134
601
+ def _act_13 val
602
+ _, _id_list, _, = *val
603
+ _id_list
604
+
605
+ end
606
+ DEPAGER_EXPANDED_CODE
607
+
608
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 137
609
+ def _act_14 val
610
+ _fact, = *val
611
+ [_fact]
612
+
613
+ end
614
+ DEPAGER_EXPANDED_CODE
615
+
616
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 138
617
+ def _act_15 val
618
+ _fact_list, _, _fact, = *val
619
+ _fact_list.push _fact
620
+
621
+ end
622
+ DEPAGER_EXPANDED_CODE
623
+
624
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 141
625
+ def _act_16 val
626
+ _ID, = *val
627
+ _ID.value
628
+
629
+ end
630
+ DEPAGER_EXPANDED_CODE
631
+
632
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 142
633
+ def _act_17 val
634
+ _, _ID, = *val
635
+ '-' + _ID.value
636
+
637
+ end
638
+ DEPAGER_EXPANDED_CODE
639
+
640
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 145
641
+ def _act_18 val
642
+ _ID, = *val
643
+ [ _ID.value ]
644
+
645
+ end
646
+ DEPAGER_EXPANDED_CODE
647
+
648
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 146
649
+ def _act_19 val
650
+ _id_list, _, _ID, = *val
651
+ _id_list.push _ID.value
652
+
653
+ end
654
+ DEPAGER_EXPANDED_CODE
655
+
656
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 149
657
+ def _act_20 val
658
+ {nil => Token.new('', 0)}
659
+
660
+ end
661
+ DEPAGER_EXPANDED_CODE
662
+
663
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 150
664
+ def _act_21 val
665
+ _ACTION, = *val
666
+ {nil => _ACTION}
667
+
668
+ end
669
+ DEPAGER_EXPANDED_CODE
670
+
671
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 152
672
+ def _act_22 val
673
+ _pass_action_list, = *val
674
+
675
+ Hash[ *_pass_action_list.flatten ].merge({nil => Token.new('', 0)})
676
+
677
+ end
678
+ DEPAGER_EXPANDED_CODE
679
+
680
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 157
681
+ def _act_23 val
682
+ _pass_action, = *val
683
+ [ _pass_action ]
684
+
685
+ end
686
+ DEPAGER_EXPANDED_CODE
687
+
688
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 158
689
+ def _act_24 val
690
+ _pass_action_list, _pass_action, = *val
691
+ _pass_action_list << _pass_action
692
+
693
+ end
694
+ DEPAGER_EXPANDED_CODE
695
+
696
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 162
697
+ def _act_25 val
698
+ _, _ID, _, _ACTION, = *val
699
+ [_ID.value, _ACTION]
700
+
701
+ end
702
+ DEPAGER_EXPANDED_CODE
703
+
704
+
705
+ end
706
+
707
+ ###
708
+ ### Depager::ASTBuilderExtension::Slave_post_rhs - Part of Depager Extension (slave)
709
+ ###
710
+
711
+ module Depager::ASTBuilderExtension::Slave_post_rhs #:nodoc:all
712
+ class Parser < Depager::LALR::Basis #:nodoc:all
713
+ include Depager::Utils::ExtensionSlaveMethods
714
+
715
+
716
+ ### Reduce Table
717
+ reduce_table = [
718
+ [ -1, 1 ],
719
+ [ 0, 1 ],
720
+ [ 2, 3 ],
721
+ [ 2, 4 ],
722
+ [ 3, 1 ],
723
+ [ 3, 3 ],
724
+ [ 1, 1 ],
725
+ [ 1, 1 ],
726
+ [ 1, 1 ],
727
+ [ 4, 2 ],
728
+ [ 4, 1 ],
729
+ [ 4, 1 ],
730
+ [ 4, 1 ],
731
+ [ 4, 1 ],
732
+ [ 4, 1 ],
733
+ [ 4, 1 ],
734
+ [ 6, 0 ],
735
+ [ 6, 1 ],
736
+ [ 5, 2 ],
737
+ [ 5, 3 ],
738
+ [ 5, 3 ],
739
+ [ 5, 3 ],
740
+ ]
741
+ ### Term to Int
742
+ term_to_int = {
743
+ nil => 0,
744
+ false => 1,
745
+ :ID => 2,
746
+ "(" => 3,
747
+ ")" => 4,
748
+ "," => 5,
749
+ :CONST => 6,
750
+ :SYMBOL => 7,
751
+ :STR => 8,
752
+ :NILNODE => 9,
753
+ :NUMBER => 10,
754
+ :NIL => 11,
755
+ :EMBED => 12,
756
+ "[" => 13,
757
+ "]" => 14,
758
+ :LL => 15,
759
+ "@" => 16,
760
+ }
761
+ ### Int to Term
762
+ int_to_term = [
763
+ nil,
764
+ false,
765
+ :ID,
766
+ "(",
767
+ ")",
768
+ ",",
769
+ :CONST,
770
+ :SYMBOL,
771
+ :STR,
772
+ :NILNODE,
773
+ :NUMBER,
774
+ :NIL,
775
+ :EMBED,
776
+ "[",
777
+ "]",
778
+ :LL,
779
+ "@",
780
+ ]
781
+ ### Action Table
782
+ action_table = [
783
+ [ nil, nil, 6, nil, nil, nil, 7, 8, 9, 10, 11, 12, nil, 13, nil, nil, nil, ],
784
+ [ ACC, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
785
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 14, 15, ],
786
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
787
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
788
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
789
+ [ nil, nil, nil, 18, nil, nil, nil, nil, nil, nil, nil, nil, 17, nil, nil, nil, nil, ],
790
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
791
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
792
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
793
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
794
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
795
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
796
+ [ nil, nil, 6, nil, nil, nil, 7, 8, 9, 10, 11, 12, nil, 13, 19, nil, nil, ],
797
+ [ nil, nil, 6, nil, nil, nil, 7, 8, 9, 10, 11, 12, nil, 13, nil, nil, nil, ],
798
+ [ nil, nil, 6, nil, nil, nil, 7, 8, 9, 10, 11, 12, nil, 13, nil, nil, nil, ],
799
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
800
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
801
+ [ nil, nil, 6, nil, 24, nil, 7, 8, 9, 10, 11, 12, nil, 13, nil, nil, nil, ],
802
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
803
+ [ nil, nil, nil, nil, nil, 27, nil, nil, nil, nil, nil, nil, nil, nil, 26, nil, nil, ],
804
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 14, 15, ],
805
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 14, 15, ],
806
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 14, 15, ],
807
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
808
+ [ nil, nil, nil, nil, 28, 27, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
809
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
810
+ [ nil, nil, 6, nil, nil, nil, 7, 8, 9, 10, 11, 12, nil, 13, nil, nil, nil, ],
811
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
812
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 14, 15, ],
813
+ ]
814
+ ### Default Reduce Table
815
+ defred_table = [
816
+ nil,
817
+ nil,
818
+ -1,
819
+ -6,
820
+ -7,
821
+ -8,
822
+ -16,
823
+ -10,
824
+ -11,
825
+ -12,
826
+ -13,
827
+ -14,
828
+ -15,
829
+ nil,
830
+ nil,
831
+ nil,
832
+ -9,
833
+ -17,
834
+ nil,
835
+ -18,
836
+ nil,
837
+ -4,
838
+ -20,
839
+ -21,
840
+ -2,
841
+ nil,
842
+ -19,
843
+ nil,
844
+ -3,
845
+ -5,
846
+ ]
847
+ defred_after_shift_table = [
848
+ nil,
849
+ nil,
850
+ nil,
851
+ -6,
852
+ -7,
853
+ -8,
854
+ nil,
855
+ -10,
856
+ -11,
857
+ -12,
858
+ -13,
859
+ -14,
860
+ -15,
861
+ nil,
862
+ nil,
863
+ nil,
864
+ -9,
865
+ -17,
866
+ nil,
867
+ -18,
868
+ nil,
869
+ nil,
870
+ nil,
871
+ nil,
872
+ -2,
873
+ nil,
874
+ -19,
875
+ nil,
876
+ -3,
877
+ nil,
878
+ ]
879
+ ### Nonterm to Int
880
+ nonterm_to_int = {
881
+ :start => 0,
882
+ :fnl => 1,
883
+ :node => 2,
884
+ :fnlpair => 3,
885
+ :fact => 4,
886
+ :list => 5,
887
+ :opt_embed => 6,
888
+ }
889
+ ### Int to Nonterm
890
+ int_to_nonterm = [
891
+ :start,
892
+ :fnl,
893
+ :node,
894
+ :fnlpair,
895
+ :fact,
896
+ :list,
897
+ :opt_embed,
898
+ ]
899
+ ### Goto Table
900
+ goto_table = [
901
+ [ 1, 2, 4, nil, 3, 5, nil, ],
902
+ [ nil, nil, nil, nil, nil, nil, nil, ],
903
+ [ nil, nil, nil, nil, nil, nil, nil, ],
904
+ [ nil, nil, nil, nil, nil, nil, nil, ],
905
+ [ nil, nil, nil, nil, nil, nil, nil, ],
906
+ [ nil, nil, nil, nil, nil, nil, nil, ],
907
+ [ nil, nil, nil, nil, nil, nil, 16, ],
908
+ [ nil, nil, nil, nil, nil, nil, nil, ],
909
+ [ nil, nil, nil, nil, nil, nil, nil, ],
910
+ [ nil, nil, nil, nil, nil, nil, nil, ],
911
+ [ nil, nil, nil, nil, nil, nil, nil, ],
912
+ [ nil, nil, nil, nil, nil, nil, nil, ],
913
+ [ nil, nil, nil, nil, nil, nil, nil, ],
914
+ [ nil, 21, 4, 20, 3, 5, nil, ],
915
+ [ nil, 22, 4, nil, 3, 5, nil, ],
916
+ [ nil, 23, 4, nil, 3, 5, nil, ],
917
+ [ nil, nil, nil, nil, nil, nil, nil, ],
918
+ [ nil, nil, nil, nil, nil, nil, nil, ],
919
+ [ nil, 21, 4, 25, 3, 5, nil, ],
920
+ [ nil, nil, nil, nil, nil, nil, nil, ],
921
+ [ nil, nil, nil, nil, nil, nil, nil, ],
922
+ [ nil, nil, nil, nil, nil, nil, nil, ],
923
+ [ nil, nil, nil, nil, nil, nil, nil, ],
924
+ [ nil, nil, nil, nil, nil, nil, nil, ],
925
+ [ nil, nil, nil, nil, nil, nil, nil, ],
926
+ [ nil, nil, nil, nil, nil, nil, nil, ],
927
+ [ nil, nil, nil, nil, nil, nil, nil, ],
928
+ [ nil, 29, 4, nil, 3, 5, nil, ],
929
+ [ nil, nil, nil, nil, nil, nil, nil, ],
930
+ [ nil, nil, nil, nil, nil, nil, nil, ],
931
+ ]
932
+
933
+ Tables = [ reduce_table, action_table,
934
+ defred_table, defred_after_shift_table, goto_table,
935
+ term_to_int, int_to_term, nonterm_to_int, int_to_nonterm ]
936
+
937
+ def initialize g_parser, master
938
+ super()
939
+ @g_parser = g_parser
940
+ @d_parser = g_parser.d_parser
941
+ @master = master
942
+ @decorated = Action.new(self)
943
+ end
944
+
945
+
946
+ def do_parse?
947
+ if @line.match(/^\s*=>/)
948
+ @line = $'
949
+ true
950
+ else
951
+ false
952
+ end
953
+ end
954
+
955
+
956
+ def banner
957
+ "=>... / Depager::ASTBuilderExtension"
958
+ end
959
+
960
+
961
+ def lex
962
+ begin
963
+ until @line.empty?
964
+ case @line
965
+
966
+ when /\A[ \t]+/
967
+ @line = $'
968
+
969
+
970
+
971
+ when /\A\r?\n/
972
+ @line = $'
973
+ yield nil, nil
974
+
975
+
976
+ when /\A<</
977
+ @line = $'
978
+ yield token(:LL, $&)
979
+
980
+
981
+ when /\A%([a-zA-Z0-9_]+)((::[a-zA-Z0-9_]+)*)/
982
+ @line = $'
983
+ yield token(:CONST, $1+$2)
984
+
985
+
986
+ when /\A%\((.+)\)%/
987
+ @line = $'
988
+ yield token(:EMBED, $1)
989
+
990
+
991
+ when /\Anil/
992
+ @line = $'
993
+ yield token(:NIL, $&)
994
+
995
+
996
+ when /\ANilNode/
997
+ @line = $'
998
+ yield token(:NILNODE, $&)
999
+
1000
+
1001
+ when /\A[0-9]+/
1002
+ @line = $'
1003
+ yield token(:NUMBER, $&.to_i)
1004
+
1005
+
1006
+ when /\A:[a-zA-Z0-9_]+/
1007
+ @line = $'
1008
+ yield token(:SYMBOL, $&)
1009
+
1010
+
1011
+ when /\A[a-zA-Z][a-zA-Z0-9_]*/
1012
+ @line = $'
1013
+ yield token(:ID, $&)
1014
+
1015
+
1016
+ when /\A'(.+)'/
1017
+ @line = $'
1018
+ yield token(:STR, $1)
1019
+
1020
+
1021
+ when /\A./
1022
+ @line = $'
1023
+ yield token($&, $&)
1024
+
1025
+
1026
+ else
1027
+ raise RuntimeError, "must not happen #{@line}"
1028
+ end
1029
+ end
1030
+ end while @original_line = @line = file.gets
1031
+ yield nil, nil
1032
+ end
1033
+ module_eval <<'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 174
1034
+ def do_default
1035
+ n = g_parser.rules.size-1
1036
+ master.action_code << %{
1037
+ def _ast_#{n} val
1038
+ NilNode.new(basis.file.lineno)
1039
+ end
1040
+ }.unindent #code
1041
+ master.on_reduce[n] = ":_ast_#{n}"
1042
+ end
1043
+
1044
+ DEPAGER_EXPANDED_CODE
1045
+
1046
+ end
1047
+ end
1048
+
1049
+
1050
+ class Depager::ASTBuilderExtension::Slave_post_rhs::Action < Depager::LALR::Action #:nodoc:all
1051
+ include Depager::Utils::ExtensionSlaveDecoratorMethods
1052
+
1053
+ on_reduce = [
1054
+ nil,
1055
+ :_act_1,
1056
+ :_act_2,
1057
+ :_act_3,
1058
+ :_act_4,
1059
+ :_act_5,
1060
+ :_act_6,
1061
+ :_act_7,
1062
+ :_act_8,
1063
+ :_act_9,
1064
+ :_act_10,
1065
+ :_act_11,
1066
+ :_act_12,
1067
+ :_act_13,
1068
+ :_act_14,
1069
+ :_act_15,
1070
+ :_act_16,
1071
+ :_act_17,
1072
+ :_act_18,
1073
+ :_act_19,
1074
+ :_act_20,
1075
+ :_act_21,
1076
+
1077
+ ]
1078
+ Tables = [ on_reduce ]
1079
+
1080
+
1081
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 202
1082
+ def _act_1 val
1083
+ _fnl, = *val
1084
+
1085
+ n = g_parser.rules.size-1
1086
+ master.action_code <<
1087
+ master.expand_inline_code(_fnl, basis.file.lineno, :wrap => "def _ast_#{n} val")
1088
+ master.on_reduce[n] = ":_ast_#{n}"
1089
+
1090
+ end
1091
+ DEPAGER_EXPANDED_CODE
1092
+
1093
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 210
1094
+ def _act_2 val
1095
+ _ID, _, _, = *val
1096
+ "#{master.node_name _ID.value}.new(basis.file.lineno)"
1097
+
1098
+ end
1099
+ DEPAGER_EXPANDED_CODE
1100
+
1101
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 212
1102
+ def _act_3 val
1103
+ _ID, _, _fnlpair, _, = *val
1104
+
1105
+ if g_parser.rhs.size > 0
1106
+ "#{master.node_name _ID.value}.new(val[0].lineno, #{_fnlpair.join(', ')})"
1107
+ else
1108
+ "#{master.node_name _ID.value}.new(basis.file.lineno, #{_fnlpair.join(', ')})"
1109
+ end
1110
+
1111
+ end
1112
+ DEPAGER_EXPANDED_CODE
1113
+
1114
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 221
1115
+ def _act_4 val
1116
+ _fnl, = *val
1117
+ [_fnl]
1118
+
1119
+ end
1120
+ DEPAGER_EXPANDED_CODE
1121
+
1122
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 222
1123
+ def _act_5 val
1124
+ _fnlpair, _, _fnl, = *val
1125
+ _fnlpair << _fnl
1126
+
1127
+ end
1128
+ DEPAGER_EXPANDED_CODE
1129
+
1130
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 225
1131
+ def _act_6 val
1132
+ _fact, = *val
1133
+ _fact
1134
+
1135
+ end
1136
+ DEPAGER_EXPANDED_CODE
1137
+
1138
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 226
1139
+ def _act_7 val
1140
+ _node, = *val
1141
+ _node
1142
+
1143
+ end
1144
+ DEPAGER_EXPANDED_CODE
1145
+
1146
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 227
1147
+ def _act_8 val
1148
+ _list, = *val
1149
+ _list
1150
+
1151
+ end
1152
+ DEPAGER_EXPANDED_CODE
1153
+
1154
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 231
1155
+ def _act_9 val
1156
+ _ID, _opt_embed, = *val
1157
+
1158
+ unless i = g_parser.name_to_rhs_index(_ID.value)
1159
+ warn "#{g_parser.lineno}: ?#{_ID.value}"
1160
+ raise
1161
+ end
1162
+ "val[#{i}]#{val[1]}"
1163
+
1164
+ end
1165
+ DEPAGER_EXPANDED_CODE
1166
+
1167
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 238
1168
+ def _act_10 val
1169
+ _CONST, = *val
1170
+ "Depager::Token.new(#{_CONST.value})"
1171
+
1172
+ end
1173
+ DEPAGER_EXPANDED_CODE
1174
+
1175
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 239
1176
+ def _act_11 val
1177
+ _SYMBOL, = *val
1178
+ "Depager::Token.new(#{_SYMBOL.value})"
1179
+
1180
+ end
1181
+ DEPAGER_EXPANDED_CODE
1182
+
1183
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 240
1184
+ def _act_12 val
1185
+ _STR, = *val
1186
+ "Depager::Token.new('#{_STR.value}')"
1187
+
1188
+ end
1189
+ DEPAGER_EXPANDED_CODE
1190
+
1191
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 241
1192
+ def _act_13 val
1193
+ _NILNODE, = *val
1194
+ "NilNode.new(basis.file.lineno)"
1195
+
1196
+ end
1197
+ DEPAGER_EXPANDED_CODE
1198
+
1199
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 242
1200
+ def _act_14 val
1201
+ _NUMBER, = *val
1202
+ "Depager::Token.new(#{_NUMBER.value})"
1203
+
1204
+ end
1205
+ DEPAGER_EXPANDED_CODE
1206
+
1207
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 243
1208
+ def _act_15 val
1209
+ _NIL, = *val
1210
+ "nil"
1211
+
1212
+ end
1213
+ DEPAGER_EXPANDED_CODE
1214
+
1215
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 246
1216
+ def _act_16 val
1217
+ ''
1218
+
1219
+ end
1220
+ DEPAGER_EXPANDED_CODE
1221
+
1222
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 247
1223
+ def _act_17 val
1224
+ _EMBED, = *val
1225
+ _EMBED.value
1226
+
1227
+ end
1228
+ DEPAGER_EXPANDED_CODE
1229
+
1230
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 250
1231
+ def _act_18 val
1232
+ _, _, = *val
1233
+ "#{master.node_name '@List'}.new(basis.file.lineno, [])"
1234
+
1235
+ end
1236
+ DEPAGER_EXPANDED_CODE
1237
+
1238
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 252
1239
+ def _act_19 val
1240
+ _, _fnlpair, _, = *val
1241
+
1242
+ if g_parser.rhs.size > 0
1243
+ "#{master.node_name '@List'}.new(val[0].lineno, [#{_fnlpair.join(', ')}])"
1244
+ else
1245
+ "#{master.node_name '@List'}.new(basis.file.lineno, #{_fnlpair.join(', ')})"
1246
+ end
1247
+
1248
+ end
1249
+ DEPAGER_EXPANDED_CODE
1250
+
1251
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 259
1252
+ def _act_20 val
1253
+ _l, _LL, _r, = *val
1254
+ "#{_l}.push(#{_r})"
1255
+
1256
+ end
1257
+ DEPAGER_EXPANDED_CODE
1258
+
1259
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/ast.dr', 260
1260
+ def _act_21 val
1261
+ _l, _, _r, = *val
1262
+ "#{_l}.concat(#{_r})"
1263
+
1264
+ end
1265
+ DEPAGER_EXPANDED_CODE
1266
+
1267
+
1268
+ end
1269
+
1270
+
1271
+ class Depager::ASTBuilderExtension
1272
+ BASE_NODE_TEMPLATE = <<-'EOS'
1273
+ class Node
1274
+ attr_accessor :lineno
1275
+ attr_accessor <%= _opt_attr.map{|i| ":#{i}" }.join(', ') %>
1276
+ <%= ini %>
1277
+
1278
+ def self.[] lineno, *args
1279
+ self.new lineno, *args
1280
+ end
1281
+
1282
+ def accept v
1283
+ end
1284
+ end
1285
+
1286
+ class NodeList < Node
1287
+ attr_accessor :lineno
1288
+ def initialize(lineno, lst=[])
1289
+ @lineno = lineno
1290
+ @lst = lst.to_a.select{|i| ! i.is_a?(NilNode)}
1291
+ end
1292
+
1293
+ <%- _opt_attr.each do |i| -%>
1294
+ def all_<%= i %>
1295
+ @lst.map{|i| i.<%= i %>}
1296
+ end
1297
+ <%- end -%>
1298
+
1299
+ def size
1300
+ @lst.size
1301
+ end
1302
+ alias length size
1303
+
1304
+ def push(i)
1305
+ @lst.push i unless i.is_a? NilNode
1306
+ self
1307
+ end
1308
+
1309
+ def concat(i)
1310
+ @lst.concat i
1311
+ self
1312
+ end
1313
+
1314
+ def to_ary()
1315
+ @lst
1316
+ end
1317
+
1318
+ alias to_a to_ary
1319
+ alias list to_ary
1320
+
1321
+ def accept(v)
1322
+ @lst.each{|i| i.accept(v) }
1323
+ end
1324
+ end
1325
+
1326
+ class NilNode
1327
+ attr_accessor :lineno
1328
+ attr_accessor <%= _opt_attr.map{|i| ":#{i}" }.join(', ') %>
1329
+
1330
+ def initialize(lineno, *args)
1331
+ @lineno = lineno
1332
+ end
1333
+
1334
+ def accept v
1335
+ end
1336
+ end
1337
+ EOS
1338
+
1339
+ NODE_TEMPLATE = <<-'EOS'
1340
+ class Node_<%= name %> < Node
1341
+ attr_accessor <%= nodes.map{|i| ":#{i}" }.join(', ') %>
1342
+ attr_accessor <%= attrs.map{|i| ":#{i}" }.join(', ') %>
1343
+
1344
+ def initialize <%= nodes.unshift('lineno').join(', ') %>
1345
+ super()
1346
+ @lineno = lineno
1347
+ <%= nodes.inject(''){|r,i| r << " @#{i} = #{i}\n"} %>
1348
+ end
1349
+
1350
+ def accept v
1351
+ warn @lineno.to_s+':'+self.class.to_s if $DEBUG
1352
+ <%= accept %>
1353
+ v.visit_Node_<%= name %>(self)
1354
+ self
1355
+ end
1356
+ end
1357
+ EOS
1358
+
1359
+ VISITOR_TEMPLATE = <<-'EOS'
1360
+ class Visitor<%= name ? '_' + name : '' %>
1361
+ def visit node
1362
+ node.accept(self)
1363
+ end
1364
+ <%= body.join %>
1365
+ end # Visitor<%= name ? '_' + name : '' %>
1366
+ EOS
1367
+ end