depager 0.1.9 → 0.2.0

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