depager 0.2.3 → 0.3.0.b20160729

Sign up to get free protection for your applications and to get access to all the features.
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