depager 0.1.9 → 0.2.0

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 (63) hide show
  1. data/ChangeLog +4 -0
  2. data/bin/depager +1 -0
  3. data/data/depager/misc/depager-mode.el +35 -24
  4. data/data/depager/pre-setup.rb +3 -0
  5. data/examples/Rakefile +36 -0
  6. data/examples/c89/c89.dr +496 -0
  7. data/examples/c89/c89.tab.rb +2197 -0
  8. data/examples/c89/test.c89 +10 -0
  9. data/{data/depager/sample → examples}/extension/paction.dr +0 -0
  10. data/{data/depager/sample → examples}/extension/pactiontest.dr +0 -0
  11. data/{data/depager/sample → examples}/pl0d/pl0ds.dr +0 -0
  12. data/examples/pl0d/pl0ds.tab.rb +1702 -0
  13. data/{data/depager/sample/pl0d/pl0test.pl0 → examples/pl0d/test.pl0ds} +0 -0
  14. data/{data/depager/sample → examples}/sample_calc/calc.action.dr +0 -0
  15. data/examples/sample_calc/calc.action.tab.rb +283 -0
  16. data/{data/depager/sample → examples}/sample_calc/calc.astdf.dr +0 -0
  17. data/examples/sample_calc/calc.astdf.tab.rb +476 -0
  18. data/{data/depager/sample → examples}/sample_calc/calc.astl.action.dr +0 -0
  19. data/examples/sample_calc/calc.astl.action.tab.rb +593 -0
  20. data/{data/depager/sample → examples}/sample_calc/calc.astl.dr +0 -0
  21. data/examples/sample_calc/calc.astl.tab.rb +501 -0
  22. data/{data/depager/sample → examples}/sample_calc/calc.atree.dr +0 -0
  23. data/examples/sample_calc/calc.atree.tab.rb +277 -0
  24. data/{data/depager/sample → examples}/sample_calc/calc.cst.dr +0 -0
  25. data/examples/sample_calc/calc.cst.tab.rb +478 -0
  26. data/{data/depager/sample → examples}/sample_calc/calc.dr +0 -0
  27. data/{data/depager/sample → examples}/sample_calc/calc.lex.dr +0 -0
  28. data/examples/sample_calc/calc.lex.tab.rb +192 -0
  29. data/{data/depager/sample → examples}/sample_calc/calc.nvaction.dr +0 -0
  30. data/examples/sample_calc/calc.nvaction.tab.rb +291 -0
  31. data/examples/sample_calc/calc.tab.rb +183 -0
  32. data/{data/depager/sample → examples}/sample_calc/calc_prec.nvaction.dr +0 -0
  33. data/examples/sample_calc/calc_prec.nvaction.tab.rb +257 -0
  34. data/examples/sample_calc/test.calc +1 -0
  35. data/{data/depager/sample/slex_test/slextest1.dr → examples/slex_test/divreg.slex.dr} +3 -11
  36. data/examples/slex_test/divreg.slex.tab.rb +227 -0
  37. data/{data/depager/sample/slex_test/slextest2.dr → examples/slex_test/ljoin.slex.dr} +10 -7
  38. data/examples/slex_test/ljoin.slex.tab.rb +277 -0
  39. data/examples/slex_test/test.divreg +1 -0
  40. data/examples/slex_test/test.ljoin +3 -0
  41. data/lib/depager.rb +194 -127
  42. data/lib/depager/Rakefile +8 -4
  43. data/lib/depager/ast_base.dr +3 -3
  44. data/lib/depager/ast_base.rb +197 -144
  45. data/lib/depager/atree.rb +55 -36
  46. data/lib/depager/cst.dr +6 -4
  47. data/lib/depager/cst.rb +69 -49
  48. data/lib/depager/grammar.rb +136 -0
  49. data/lib/depager/lex.dr +22 -8
  50. data/lib/depager/lex.rb +94 -53
  51. data/lib/depager/lr.rb +101 -167
  52. data/lib/depager/parse_action.rb +1 -1
  53. data/lib/depager/parser.rb +34 -7
  54. data/lib/depager/slex.dr +76 -36
  55. data/lib/depager/slex.rb +345 -151
  56. data/lib/depager/srp.rb +3 -2
  57. data/lib/depager/template/extension_lalr_slave.erb +1 -1
  58. data/lib/depager/template/single_lalr_parser.erb +1 -1
  59. data/lib/depager/utils.rb +2 -1
  60. data/lib/depager/version.rb +2 -2
  61. metadata +42 -28
  62. data/Manifest.txt +0 -52
  63. data/lib/depager/psrtmpl.rb +0 -33
@@ -0,0 +1,593 @@
1
+
2
+ begin; require 'rubygems'; rescue Exception; end
3
+ require 'depager/parser.rb'
4
+
5
+
6
+ module D4TinyCalc
7
+ end
8
+
9
+ class TinyCalc < Depager::LALR::Basis
10
+
11
+ include Depager
12
+
13
+ ### Reduce Table
14
+ reduce_table = [
15
+ [ -1, 1 ], # ( 0) $start : expr
16
+ [ 0, 3 ], # ( 1) expr : expr + term
17
+ [ 0, 3 ], # ( 2) expr : expr - term
18
+ [ 0, 1 ], # ( 3) expr : term
19
+ [ 1, 3 ], # ( 4) term : term * fact
20
+ [ 1, 3 ], # ( 5) term : term / fact
21
+ [ 1, 1 ], # ( 6) term : fact
22
+ [ 2, 1 ], # ( 7) fact : NUM
23
+ [ 2, 3 ], # ( 8) fact : ( expr )
24
+ ]
25
+ ### Extension Params
26
+ nparams = {
27
+ 'Action' => 3,
28
+ 'ASTBuilderLazy' => 2,
29
+ }
30
+ ### Term to Int
31
+ t2i = {
32
+ nil => 0,
33
+ false => 1,
34
+ "+" => 2,
35
+ "-" => 3,
36
+ "*" => 4,
37
+ "/" => 5,
38
+ :NUM => 6,
39
+ "(" => 7,
40
+ ")" => 8,
41
+ }
42
+ ### Int to Term
43
+ i2t = [
44
+ nil,
45
+ false,
46
+ "+",
47
+ "-",
48
+ "*",
49
+ "/",
50
+ :NUM,
51
+ "(",
52
+ ")",
53
+ ]
54
+ ### Action Table
55
+ action_table = [
56
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
57
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
58
+ [ ACC, nil, 7, 8, nil, nil, nil, nil, nil, ],
59
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
60
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
61
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
62
+ [ nil, nil, 7, 8, nil, nil, nil, nil, 11, ],
63
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
64
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
65
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
66
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
67
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
68
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
69
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
70
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
71
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
72
+ ]
73
+ ### Default Reduce Table
74
+ defred_table = [
75
+ nil,
76
+ nil,
77
+ nil,
78
+ -3,
79
+ -6,
80
+ -7,
81
+ nil,
82
+ nil,
83
+ nil,
84
+ nil,
85
+ nil,
86
+ -8,
87
+ -1,
88
+ -2,
89
+ -4,
90
+ -5,
91
+ ]
92
+ defred_after_shift_table = [
93
+ nil,
94
+ nil,
95
+ nil,
96
+ nil,
97
+ -6,
98
+ -7,
99
+ nil,
100
+ nil,
101
+ nil,
102
+ nil,
103
+ nil,
104
+ -8,
105
+ nil,
106
+ nil,
107
+ -4,
108
+ -5,
109
+ ]
110
+ ### Nonterm to Int
111
+ nt2i = {
112
+ :expr => 0,
113
+ :term => 1,
114
+ :fact => 2,
115
+ }
116
+ ### Int to Nonterm
117
+ i2nt = [
118
+ :expr,
119
+ :term,
120
+ :fact,
121
+ ]
122
+ ### Goto Table
123
+ goto_table = [
124
+ [ 2, 3, 4, ],
125
+ [ 6, 3, 4, ],
126
+ [ nil, nil, nil, ],
127
+ [ nil, nil, nil, ],
128
+ [ nil, nil, nil, ],
129
+ [ nil, nil, nil, ],
130
+ [ nil, nil, nil, ],
131
+ [ nil, 12, 4, ],
132
+ [ nil, 13, 4, ],
133
+ [ nil, nil, 14, ],
134
+ [ nil, nil, 15, ],
135
+ [ nil, nil, nil, ],
136
+ [ nil, nil, nil, ],
137
+ [ nil, nil, nil, ],
138
+ [ nil, nil, nil, ],
139
+ [ nil, nil, nil, ],
140
+ ]
141
+
142
+ Tables = [ reduce_table, nparams, action_table,
143
+ defred_table, defred_after_shift_table, goto_table,
144
+ t2i, i2t, nt2i, i2nt ]
145
+
146
+ def self.createDecoratedParser
147
+ D4TinyCalc::Action.new(D4TinyCalc::ASTBuilderLazy.new(TinyCalc.new()))
148
+ end
149
+
150
+ ### Inner Code
151
+
152
+ def lex
153
+ begin
154
+ until @line.empty?
155
+ case @line
156
+
157
+ when /\A\s+/, /\A\#.*/, /\A\n/
158
+ @oldline = @line; @line = $'
159
+
160
+
161
+
162
+ when /\A[1-9][0-9]*/
163
+ @oldline = @line; @line = $'
164
+ yield _Token(:NUM, $&.to_i)
165
+
166
+
167
+ when /\A./
168
+ @oldline = @line; @line = $'
169
+ yield _Token($&, $&)
170
+
171
+
172
+ else
173
+ raise RuntimeError, "must not happen #{@line}"
174
+ end
175
+ end
176
+ end while @line0 = @line = getline
177
+ yield nil, nil
178
+ end
179
+
180
+ end
181
+
182
+ ### Outer Code
183
+
184
+ class Node
185
+ attr_accessor :lineno
186
+ attr_accessor :value
187
+
188
+ def initialize
189
+ @value = nil
190
+
191
+ end
192
+
193
+ def to_ary
194
+ [self]
195
+ end
196
+ def self.[] lineno, *args
197
+ self.new lineno, *args
198
+ end
199
+ def accept v
200
+ end
201
+ end
202
+ require 'forwardable'
203
+ class NodeList < Node
204
+ attr_accessor :lineno
205
+ extend Forwardable
206
+ _methods = Array.instance_methods -
207
+ Object.instance_methods -
208
+ ['push', 'concat', 'to_ary', 'map']
209
+ def_delegators(:@lst, *_methods)
210
+ def initialize(lineno, lst=[])
211
+ @lineno = lineno
212
+ @lst = lst.to_a
213
+ end
214
+
215
+ def value
216
+ @lst.map{|i| "i.value"}
217
+ end
218
+
219
+ def push(i) @lst.push i; self; end
220
+ def concat(i) @lst.concat i; self; end
221
+ def map(&b) @lst.map(&b); end
222
+ def to_ary() @lst; end
223
+ def accept(v)
224
+ @lst.each{|i| i.accept(v) }
225
+ end
226
+ end
227
+
228
+ class Node_add < Node
229
+ attr_accessor :left, :right
230
+ attr_accessor
231
+ def initialize lineno, left, right
232
+ super()
233
+ @lineno = lineno
234
+ @lineno = lineno
235
+ @left = left
236
+ @right = right
237
+
238
+ end
239
+
240
+ def _left_ v
241
+ @left.accept(v); @left
242
+ end
243
+
244
+ def _right_ v
245
+ @right.accept(v); @right
246
+ end
247
+
248
+ def accept v
249
+ warn @lineno.to_s+':'+self.class.to_s if $DEBUG
250
+ v.visit_Node_add(self)
251
+ self
252
+ end
253
+ end
254
+
255
+ class Node_sub < Node
256
+ attr_accessor :left, :right
257
+ attr_accessor
258
+ def initialize lineno, left, right
259
+ super()
260
+ @lineno = lineno
261
+ @lineno = lineno
262
+ @left = left
263
+ @right = right
264
+
265
+ end
266
+
267
+ def _left_ v
268
+ @left.accept(v); @left
269
+ end
270
+
271
+ def _right_ v
272
+ @right.accept(v); @right
273
+ end
274
+
275
+ def accept v
276
+ warn @lineno.to_s+':'+self.class.to_s if $DEBUG
277
+ v.visit_Node_sub(self)
278
+ self
279
+ end
280
+ end
281
+
282
+ class Node_mul < Node
283
+ attr_accessor :left, :right
284
+ attr_accessor
285
+ def initialize lineno, left, right
286
+ super()
287
+ @lineno = lineno
288
+ @lineno = lineno
289
+ @left = left
290
+ @right = right
291
+
292
+ end
293
+
294
+ def _left_ v
295
+ @left.accept(v); @left
296
+ end
297
+
298
+ def _right_ v
299
+ @right.accept(v); @right
300
+ end
301
+
302
+ def accept v
303
+ warn @lineno.to_s+':'+self.class.to_s if $DEBUG
304
+ v.visit_Node_mul(self)
305
+ self
306
+ end
307
+ end
308
+
309
+ class Node_div < Node
310
+ attr_accessor :left, :right
311
+ attr_accessor
312
+ def initialize lineno, left, right
313
+ super()
314
+ @lineno = lineno
315
+ @lineno = lineno
316
+ @left = left
317
+ @right = right
318
+
319
+ end
320
+
321
+ def _left_ v
322
+ @left.accept(v); @left
323
+ end
324
+
325
+ def _right_ v
326
+ @right.accept(v); @right
327
+ end
328
+
329
+ def accept v
330
+ warn @lineno.to_s+':'+self.class.to_s if $DEBUG
331
+ v.visit_Node_div(self)
332
+ self
333
+ end
334
+ end
335
+
336
+ class Node_literal < Node
337
+ attr_accessor :n
338
+ attr_accessor :n
339
+ def initialize lineno, n
340
+ super()
341
+ @lineno = lineno
342
+ @lineno = lineno
343
+ @n = n
344
+
345
+ end
346
+
347
+ def accept v
348
+ warn @lineno.to_s+':'+self.class.to_s if $DEBUG
349
+ v.visit_Node_literal(self)
350
+ self
351
+ end
352
+ end
353
+
354
+ class Visitor
355
+ def visit node
356
+ node.accept(self)
357
+ end
358
+
359
+ module_eval <<-'.,.,118754108857908.,.,', 'sample_calc/calc.astl.action.dr', 19
360
+
361
+
362
+ .,.,118754108857908.,.,
363
+
364
+ module_eval <<-'.,.,118754108863035.,.,', 'sample_calc/calc.astl.action.dr', 19
365
+ def visit_Node_add node
366
+ node.value = visit(node.left).value + visit(node.right).value
367
+
368
+ end
369
+
370
+ .,.,118754108863035.,.,
371
+
372
+ module_eval <<-'.,.,11875410891486.,.,', 'sample_calc/calc.astl.action.dr', 20
373
+ def visit_Node_sub node
374
+ node.value = visit(node.left).value - visit(node.right).value
375
+
376
+ end
377
+
378
+ .,.,11875410891486.,.,
379
+
380
+ module_eval <<-'.,.,118754108931106.,.,', 'sample_calc/calc.astl.action.dr', 21
381
+ def visit_Node_mul node
382
+ node.value = visit(node.left).value * visit(node.right).value
383
+
384
+ end
385
+
386
+ .,.,118754108931106.,.,
387
+
388
+ module_eval <<-'.,.,118754108926185.,.,', 'sample_calc/calc.astl.action.dr', 22
389
+ def visit_Node_div node
390
+ node.value = visit(node.left).value / visit(node.right).value
391
+
392
+ end
393
+
394
+ .,.,118754108926185.,.,
395
+
396
+ module_eval <<-'.,.,118754108942617.,.,', 'sample_calc/calc.astl.action.dr', 23
397
+ def visit_Node_literal node
398
+ node.value = node.n.value
399
+
400
+ end
401
+
402
+ .,.,118754108942617.,.,
403
+
404
+ end
405
+
406
+ class D4TinyCalc::ASTBuilderLazy < Depager::LALR::Action #:nodoc:all
407
+ include Depager::DecoratorUtils
408
+
409
+ on_reduce = [
410
+ nil,
411
+ :_ast_0,
412
+ :_ast_1,
413
+ :_ast_2,
414
+ :_ast_3,
415
+ :_ast_4,
416
+ :_ast_5,
417
+ :_ast_6,
418
+ :_ast_7,
419
+
420
+ ]
421
+ Tables = [on_reduce]
422
+ def initialize inside
423
+ super inside, 'ASTBuilderLazy'
424
+ @on_reduce, = self.class::Tables
425
+ init_parser
426
+ end
427
+
428
+
429
+ module_eval <<-'.,.,11875410898722.,.,', 'sample_calc/calc.astl.action.dr', 29
430
+ def _ast_0 val
431
+ Node_add.new(val[0].lineno, val[0], val[2])
432
+ end
433
+
434
+ .,.,11875410898722.,.,
435
+
436
+ module_eval <<-'.,.,118754108942559.,.,', 'sample_calc/calc.astl.action.dr', 32
437
+ def _ast_1 val
438
+ Node_sub.new(val[0].lineno, val[0], val[2])
439
+ end
440
+
441
+ .,.,118754108942559.,.,
442
+
443
+ module_eval <<-'.,.,11875410893975.,.,', 'sample_calc/calc.astl.action.dr', 35
444
+ def _ast_2 val
445
+ val[0]
446
+ end
447
+
448
+ .,.,11875410893975.,.,
449
+
450
+ module_eval <<-'.,.,11875410897017.,.,', 'sample_calc/calc.astl.action.dr', 40
451
+ def _ast_3 val
452
+ Node_mul.new(val[0].lineno, val[0], val[2])
453
+ end
454
+
455
+ .,.,11875410897017.,.,
456
+
457
+ module_eval <<-'.,.,118754108932608.,.,', 'sample_calc/calc.astl.action.dr', 43
458
+ def _ast_4 val
459
+ Node_div.new(val[0].lineno, val[0], val[2])
460
+ end
461
+
462
+ .,.,118754108932608.,.,
463
+
464
+ module_eval <<-'.,.,11875410897850.,.,', 'sample_calc/calc.astl.action.dr', 46
465
+ def _ast_5 val
466
+ val[0]
467
+ end
468
+
469
+ .,.,11875410897850.,.,
470
+
471
+ module_eval <<-'.,.,11875410893154.,.,', 'sample_calc/calc.astl.action.dr', 51
472
+ def _ast_6 val
473
+ Node_literal.new(val[0].lineno, val[0])
474
+ end
475
+
476
+ .,.,11875410893154.,.,
477
+
478
+ module_eval <<-'.,.,118754108961354.,.,', 'sample_calc/calc.astl.action.dr', 54
479
+ def _ast_7 val
480
+ val[1]
481
+ end
482
+
483
+ .,.,118754108961354.,.,
484
+
485
+ end
486
+
487
+ class D4TinyCalc::Action < Depager::LALR::Action #:nodoc:all
488
+ include Depager::DecoratorUtils
489
+ include Depager
490
+
491
+ on_reduce = [
492
+ nil,
493
+ :_act_0,
494
+ :_act_1,
495
+ :_act_2,
496
+ :_act_3,
497
+ :_act_4,
498
+ :_act_5,
499
+ :_act_6,
500
+ :_act_7,
501
+
502
+ ]
503
+ Tables = [on_reduce]
504
+ def initialize inside
505
+ super inside, 'Action'
506
+ @on_reduce, = self.class::Tables
507
+ init_parser
508
+ end
509
+
510
+
511
+ module_eval <<-'.,.,118754108929417.,.,', 'sample_calc/calc.astl.action.dr', 30
512
+ def _act_0 val
513
+ val[0] + val[2]
514
+
515
+ end
516
+
517
+ .,.,118754108929417.,.,
518
+
519
+ module_eval <<-'.,.,118754108959230.,.,', 'sample_calc/calc.astl.action.dr', 33
520
+ def _act_1 val
521
+ val[0] - val[2]
522
+
523
+ end
524
+
525
+ .,.,118754108959230.,.,
526
+
527
+ module_eval <<-'.,.,118754108949805.,.,', 'sample_calc/calc.astl.action.dr', 36
528
+ def _act_2 val
529
+ val[0]
530
+
531
+ end
532
+
533
+ .,.,118754108949805.,.,
534
+
535
+ module_eval <<-'.,.,118754108963438.,.,', 'sample_calc/calc.astl.action.dr', 41
536
+ def _act_3 val
537
+ val[0] * val[2]
538
+
539
+ end
540
+
541
+ .,.,118754108963438.,.,
542
+
543
+ module_eval <<-'.,.,118754108920628.,.,', 'sample_calc/calc.astl.action.dr', 44
544
+ def _act_4 val
545
+ val[0] / val[2]
546
+
547
+ end
548
+
549
+ .,.,118754108920628.,.,
550
+
551
+ module_eval <<-'.,.,11875410896708.,.,', 'sample_calc/calc.astl.action.dr', 47
552
+ def _act_5 val
553
+ val[0]
554
+
555
+ end
556
+
557
+ .,.,11875410896708.,.,
558
+
559
+ module_eval <<-'.,.,118754108933319.,.,', 'sample_calc/calc.astl.action.dr', 52
560
+ def _act_6 val
561
+ val[0].value
562
+
563
+ end
564
+
565
+ .,.,118754108933319.,.,
566
+
567
+ module_eval <<-'.,.,118754108926354.,.,', 'sample_calc/calc.astl.action.dr', 55
568
+ def _act_7 val
569
+ val[1].value
570
+
571
+ end
572
+
573
+ .,.,118754108926354.,.,
574
+
575
+ end
576
+
577
+
578
+ def createDecoratedTinyCalc
579
+ D4TinyCalc::Action.new(D4TinyCalc::ASTBuilderLazy.new(TinyCalc.new()))
580
+ end
581
+
582
+ ### main
583
+ if __FILE__ == $0
584
+ ### Main Code
585
+ require 'pp'
586
+ parser = createDecoratedTinyCalc()
587
+ t, r = parser.yyparse(STDIN)
588
+ v = Visitor.new
589
+ pp r
590
+ pp t.accept(v).value
591
+ pp t
592
+
593
+ end