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,283 @@
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
+
12
+ ### Reduce Table
13
+ reduce_table = [
14
+ [ -1, 1 ], # ( 0) $start : expr
15
+ [ 0, 3 ], # ( 1) expr : expr + term
16
+ [ 0, 3 ], # ( 2) expr : expr - term
17
+ [ 0, 1 ], # ( 3) expr : term
18
+ [ 1, 3 ], # ( 4) term : term * fact
19
+ [ 1, 3 ], # ( 5) term : term / fact
20
+ [ 1, 1 ], # ( 6) term : fact
21
+ [ 2, 1 ], # ( 7) fact : NUM
22
+ [ 2, 3 ], # ( 8) fact : ( expr )
23
+ ]
24
+ ### Extension Params
25
+ nparams = {
26
+ 'Action' => 2,
27
+ }
28
+ ### Term to Int
29
+ t2i = {
30
+ nil => 0,
31
+ false => 1,
32
+ "+" => 2,
33
+ "-" => 3,
34
+ "*" => 4,
35
+ "/" => 5,
36
+ :NUM => 6,
37
+ "(" => 7,
38
+ ")" => 8,
39
+ }
40
+ ### Int to Term
41
+ i2t = [
42
+ nil,
43
+ false,
44
+ "+",
45
+ "-",
46
+ "*",
47
+ "/",
48
+ :NUM,
49
+ "(",
50
+ ")",
51
+ ]
52
+ ### Action Table
53
+ action_table = [
54
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
55
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
56
+ [ ACC, nil, 7, 8, nil, nil, nil, nil, nil, ],
57
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
58
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
59
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
60
+ [ nil, nil, 7, 8, nil, nil, nil, nil, 11, ],
61
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
62
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
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, nil, nil, nil, ],
66
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
67
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
68
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
69
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
70
+ ]
71
+ ### Default Reduce Table
72
+ defred_table = [
73
+ nil,
74
+ nil,
75
+ nil,
76
+ -3,
77
+ -6,
78
+ -7,
79
+ nil,
80
+ nil,
81
+ nil,
82
+ nil,
83
+ nil,
84
+ -8,
85
+ -1,
86
+ -2,
87
+ -4,
88
+ -5,
89
+ ]
90
+ defred_after_shift_table = [
91
+ nil,
92
+ nil,
93
+ nil,
94
+ nil,
95
+ -6,
96
+ -7,
97
+ nil,
98
+ nil,
99
+ nil,
100
+ nil,
101
+ nil,
102
+ -8,
103
+ nil,
104
+ nil,
105
+ -4,
106
+ -5,
107
+ ]
108
+ ### Nonterm to Int
109
+ nt2i = {
110
+ :expr => 0,
111
+ :term => 1,
112
+ :fact => 2,
113
+ }
114
+ ### Int to Nonterm
115
+ i2nt = [
116
+ :expr,
117
+ :term,
118
+ :fact,
119
+ ]
120
+ ### Goto Table
121
+ goto_table = [
122
+ [ 2, 3, 4, ],
123
+ [ 6, 3, 4, ],
124
+ [ nil, nil, nil, ],
125
+ [ nil, nil, nil, ],
126
+ [ nil, nil, nil, ],
127
+ [ nil, nil, nil, ],
128
+ [ nil, nil, nil, ],
129
+ [ nil, 12, 4, ],
130
+ [ nil, 13, 4, ],
131
+ [ nil, nil, 14, ],
132
+ [ nil, nil, 15, ],
133
+ [ nil, nil, nil, ],
134
+ [ nil, nil, nil, ],
135
+ [ nil, nil, nil, ],
136
+ [ nil, nil, nil, ],
137
+ [ nil, nil, nil, ],
138
+ ]
139
+
140
+ Tables = [ reduce_table, nparams, action_table,
141
+ defred_table, defred_after_shift_table, goto_table,
142
+ t2i, i2t, nt2i, i2nt ]
143
+
144
+ def self.createDecoratedParser
145
+ D4TinyCalc::Action.new(TinyCalc.new())
146
+ end
147
+
148
+ ### Inner Code
149
+
150
+ def lex
151
+ begin
152
+ until @line.empty?
153
+ case @line
154
+
155
+ when /\A\s+/, /\A\#.*/
156
+ @oldline = @line; @line = $'
157
+
158
+
159
+
160
+ when /\A[1-9][0-9]*/
161
+ @oldline = @line; @line = $'
162
+ yield _Token(:NUM, $&.to_i)
163
+
164
+
165
+ when /\A./
166
+ @oldline = @line; @line = $'
167
+ yield _Token($&, $&)
168
+
169
+
170
+ else
171
+ raise RuntimeError, "must not happen #{@line}"
172
+ end
173
+ end
174
+ end while @line0 = @line = getline
175
+ yield nil, nil
176
+ end
177
+
178
+ end
179
+
180
+ ### Outer Code
181
+
182
+ class D4TinyCalc::Action < Depager::LALR::Action #:nodoc:all
183
+ include Depager::DecoratorUtils
184
+
185
+ on_reduce = [
186
+ nil,
187
+ :_act_0,
188
+ :_act_1,
189
+ :_act_2,
190
+ :_act_3,
191
+ :_act_4,
192
+ :_act_5,
193
+ :_act_6,
194
+ :_act_7,
195
+
196
+ ]
197
+ Tables = [on_reduce]
198
+ def initialize inside
199
+ super inside, 'Action'
200
+ @on_reduce, = self.class::Tables
201
+ init_parser
202
+ end
203
+
204
+
205
+ module_eval <<-'.,.,118754108827289.,.,', 'sample_calc/calc.action.dr', 15
206
+ def _act_0 val
207
+ val[0] + val[2]
208
+
209
+ end
210
+
211
+ .,.,118754108827289.,.,
212
+
213
+ module_eval <<-'.,.,118754108850101.,.,', 'sample_calc/calc.action.dr', 16
214
+ def _act_1 val
215
+ val[0] - val[2]
216
+
217
+ end
218
+
219
+ .,.,118754108850101.,.,
220
+
221
+ module_eval <<-'.,.,118754108859938.,.,', 'sample_calc/calc.action.dr', 17
222
+ def _act_2 val
223
+ val[0]
224
+
225
+ end
226
+
227
+ .,.,118754108859938.,.,
228
+
229
+ module_eval <<-'.,.,118754108817909.,.,', 'sample_calc/calc.action.dr', 20
230
+ def _act_3 val
231
+ val[0] * val[2]
232
+
233
+ end
234
+
235
+ .,.,118754108817909.,.,
236
+
237
+ module_eval <<-'.,.,11875410886381.,.,', 'sample_calc/calc.action.dr', 21
238
+ def _act_4 val
239
+ val[0] / val[2]
240
+
241
+ end
242
+
243
+ .,.,11875410886381.,.,
244
+
245
+ module_eval <<-'.,.,118754108815401.,.,', 'sample_calc/calc.action.dr', 22
246
+ def _act_5 val
247
+ val[0]
248
+
249
+ end
250
+
251
+ .,.,118754108815401.,.,
252
+
253
+ module_eval <<-'.,.,118754108820197.,.,', 'sample_calc/calc.action.dr', 25
254
+ def _act_6 val
255
+ val[0].value
256
+
257
+ end
258
+
259
+ .,.,118754108820197.,.,
260
+
261
+ module_eval <<-'.,.,11875410882848.,.,', 'sample_calc/calc.action.dr', 26
262
+ def _act_7 val
263
+ val[1]
264
+
265
+ end
266
+
267
+ .,.,11875410882848.,.,
268
+
269
+ end
270
+
271
+
272
+ def createDecoratedTinyCalc
273
+ D4TinyCalc::Action.new(TinyCalc.new())
274
+ end
275
+
276
+ ### main
277
+ if __FILE__ == $0
278
+ ### Main Code
279
+ parser = TinyCalc::createDecoratedParser
280
+ r, = parser.yyparse(STDIN)
281
+ puts r
282
+
283
+ end
@@ -0,0 +1,476 @@
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
+
12
+ ### Reduce Table
13
+ reduce_table = [
14
+ [ -1, 1 ], # ( 0) $start : expr
15
+ [ 0, 3 ], # ( 1) expr : expr + term
16
+ [ 0, 3 ], # ( 2) expr : expr - term
17
+ [ 0, 1 ], # ( 3) expr : term
18
+ [ 1, 3 ], # ( 4) term : term * fact
19
+ [ 1, 3 ], # ( 5) term : term / fact
20
+ [ 1, 1 ], # ( 6) term : fact
21
+ [ 2, 1 ], # ( 7) fact : NUM
22
+ [ 2, 3 ], # ( 8) fact : ( expr )
23
+ ]
24
+ ### Extension Params
25
+ nparams = {
26
+ 'ASTBuilderDepthFirst' => 2,
27
+ }
28
+ ### Term to Int
29
+ t2i = {
30
+ nil => 0,
31
+ false => 1,
32
+ "+" => 2,
33
+ "-" => 3,
34
+ "*" => 4,
35
+ "/" => 5,
36
+ :NUM => 6,
37
+ "(" => 7,
38
+ ")" => 8,
39
+ }
40
+ ### Int to Term
41
+ i2t = [
42
+ nil,
43
+ false,
44
+ "+",
45
+ "-",
46
+ "*",
47
+ "/",
48
+ :NUM,
49
+ "(",
50
+ ")",
51
+ ]
52
+ ### Action Table
53
+ action_table = [
54
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
55
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
56
+ [ ACC, nil, 7, 8, nil, nil, nil, nil, nil, ],
57
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
58
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
59
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
60
+ [ nil, nil, 7, 8, nil, nil, nil, nil, 11, ],
61
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
62
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
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, nil, nil, nil, ],
66
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
67
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
68
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
69
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
70
+ ]
71
+ ### Default Reduce Table
72
+ defred_table = [
73
+ nil,
74
+ nil,
75
+ nil,
76
+ -3,
77
+ -6,
78
+ -7,
79
+ nil,
80
+ nil,
81
+ nil,
82
+ nil,
83
+ nil,
84
+ -8,
85
+ -1,
86
+ -2,
87
+ -4,
88
+ -5,
89
+ ]
90
+ defred_after_shift_table = [
91
+ nil,
92
+ nil,
93
+ nil,
94
+ nil,
95
+ -6,
96
+ -7,
97
+ nil,
98
+ nil,
99
+ nil,
100
+ nil,
101
+ nil,
102
+ -8,
103
+ nil,
104
+ nil,
105
+ -4,
106
+ -5,
107
+ ]
108
+ ### Nonterm to Int
109
+ nt2i = {
110
+ :expr => 0,
111
+ :term => 1,
112
+ :fact => 2,
113
+ }
114
+ ### Int to Nonterm
115
+ i2nt = [
116
+ :expr,
117
+ :term,
118
+ :fact,
119
+ ]
120
+ ### Goto Table
121
+ goto_table = [
122
+ [ 2, 3, 4, ],
123
+ [ 6, 3, 4, ],
124
+ [ nil, nil, nil, ],
125
+ [ nil, nil, nil, ],
126
+ [ nil, nil, nil, ],
127
+ [ nil, nil, nil, ],
128
+ [ nil, nil, nil, ],
129
+ [ nil, 12, 4, ],
130
+ [ nil, 13, 4, ],
131
+ [ nil, nil, 14, ],
132
+ [ nil, nil, 15, ],
133
+ [ nil, nil, nil, ],
134
+ [ nil, nil, nil, ],
135
+ [ nil, nil, nil, ],
136
+ [ nil, nil, nil, ],
137
+ [ nil, nil, nil, ],
138
+ ]
139
+
140
+ Tables = [ reduce_table, nparams, action_table,
141
+ defred_table, defred_after_shift_table, goto_table,
142
+ t2i, i2t, nt2i, i2nt ]
143
+
144
+ def self.createDecoratedParser
145
+ D4TinyCalc::ASTBuilderDepthFirst.new(TinyCalc.new())
146
+ end
147
+
148
+ ### Inner Code
149
+
150
+ def lex
151
+ begin
152
+ until @line.empty?
153
+ case @line
154
+
155
+ when /\A\s+/, /\A\#.*/
156
+ @oldline = @line; @line = $'
157
+
158
+
159
+
160
+ when /\A[1-9][0-9]*/
161
+ @oldline = @line; @line = $'
162
+ yield _Token(:NUM, $&.to_i)
163
+
164
+
165
+ when /\A./
166
+ @oldline = @line; @line = $'
167
+ yield _Token($&, $&)
168
+
169
+
170
+ else
171
+ raise RuntimeError, "must not happen #{@line}"
172
+ end
173
+ end
174
+ end while @line0 = @line = getline
175
+ yield nil, nil
176
+ end
177
+
178
+ end
179
+
180
+ ### Outer Code
181
+
182
+ class Node
183
+ attr_accessor :lineno
184
+ attr_accessor :value
185
+
186
+ def initialize
187
+ @value = nil
188
+
189
+ end
190
+
191
+ def to_ary
192
+ [self]
193
+ end
194
+ def self.[] lineno, *args
195
+ self.new lineno, *args
196
+ end
197
+ def accept v
198
+ end
199
+ end
200
+ require 'forwardable'
201
+ class NodeList < Node
202
+ attr_accessor :lineno
203
+ extend Forwardable
204
+ _methods = Array.instance_methods -
205
+ Object.instance_methods -
206
+ ['push', 'concat', 'to_ary', 'map']
207
+ def_delegators(:@lst, *_methods)
208
+ def initialize(lineno, lst=[])
209
+ @lineno = lineno
210
+ @lst = lst.to_a
211
+ end
212
+
213
+ def value
214
+ @lst.map{|i| "i.value"}
215
+ end
216
+
217
+ def push(i) @lst.push i; self; end
218
+ def concat(i) @lst.concat i; self; end
219
+ def map(&b) @lst.map(&b); end
220
+ def to_ary() @lst; end
221
+ def accept(v)
222
+ @lst.each{|i| i.accept(v) }
223
+ end
224
+ end
225
+
226
+ class Node_add < Node
227
+ attr_accessor :left, :right
228
+ attr_accessor
229
+ def initialize lineno, left, right
230
+ super()
231
+ @lineno = lineno
232
+ @lineno = lineno
233
+ @left = left
234
+ @right = right
235
+
236
+ end
237
+ def accept v
238
+ warn @lineno.to_s+':'+self.class.to_s if $DEBUG
239
+ @left.accept(v)
240
+ @right.accept(v)
241
+
242
+ v.visit_Node_add(self)
243
+ self
244
+ end
245
+ end
246
+
247
+ class Node_sub < Node
248
+ attr_accessor :left, :right
249
+ attr_accessor
250
+ def initialize lineno, left, right
251
+ super()
252
+ @lineno = lineno
253
+ @lineno = lineno
254
+ @left = left
255
+ @right = right
256
+
257
+ end
258
+ def accept v
259
+ warn @lineno.to_s+':'+self.class.to_s if $DEBUG
260
+ @left.accept(v)
261
+ @right.accept(v)
262
+
263
+ v.visit_Node_sub(self)
264
+ self
265
+ end
266
+ end
267
+
268
+ class Node_mul < Node
269
+ attr_accessor :left, :right
270
+ attr_accessor
271
+ def initialize lineno, left, right
272
+ super()
273
+ @lineno = lineno
274
+ @lineno = lineno
275
+ @left = left
276
+ @right = right
277
+
278
+ end
279
+ def accept v
280
+ warn @lineno.to_s+':'+self.class.to_s if $DEBUG
281
+ @left.accept(v)
282
+ @right.accept(v)
283
+
284
+ v.visit_Node_mul(self)
285
+ self
286
+ end
287
+ end
288
+
289
+ class Node_div < Node
290
+ attr_accessor :left, :right
291
+ attr_accessor
292
+ def initialize lineno, left, right
293
+ super()
294
+ @lineno = lineno
295
+ @lineno = lineno
296
+ @left = left
297
+ @right = right
298
+
299
+ end
300
+ def accept v
301
+ warn @lineno.to_s+':'+self.class.to_s if $DEBUG
302
+ @left.accept(v)
303
+ @right.accept(v)
304
+
305
+ v.visit_Node_div(self)
306
+ self
307
+ end
308
+ end
309
+
310
+ class Node_literal < Node
311
+ attr_accessor :n
312
+ attr_accessor :n
313
+ def initialize lineno, n
314
+ super()
315
+ @lineno = lineno
316
+ @lineno = lineno
317
+ @n = n
318
+
319
+ end
320
+ def accept v
321
+ warn @lineno.to_s+':'+self.class.to_s if $DEBUG
322
+
323
+ v.visit_Node_literal(self)
324
+ self
325
+ end
326
+ end
327
+
328
+ class Visitor
329
+ def visit node
330
+ node.accept(self)
331
+ end
332
+
333
+ module_eval <<-'.,.,118754108843671.,.,', 'sample_calc/calc.astdf.dr', 16
334
+
335
+
336
+ .,.,118754108843671.,.,
337
+
338
+ module_eval <<-'.,.,118754108831511.,.,', 'sample_calc/calc.astdf.dr', 16
339
+ def visit_Node_add node
340
+ node.value = node.left.value + node.right.value
341
+
342
+ end
343
+
344
+ .,.,118754108831511.,.,
345
+
346
+ module_eval <<-'.,.,118754108811762.,.,', 'sample_calc/calc.astdf.dr', 17
347
+ def visit_Node_sub node
348
+ node.value = node.left.value - node.right.value
349
+
350
+ end
351
+
352
+ .,.,118754108811762.,.,
353
+
354
+ module_eval <<-'.,.,118754108823654.,.,', 'sample_calc/calc.astdf.dr', 18
355
+ def visit_Node_mul node
356
+ node.value = node.left.value * node.right.value
357
+
358
+ end
359
+
360
+ .,.,118754108823654.,.,
361
+
362
+ module_eval <<-'.,.,118754108858414.,.,', 'sample_calc/calc.astdf.dr', 19
363
+ def visit_Node_div node
364
+ node.value = node.left.value / node.right.value
365
+
366
+ end
367
+
368
+ .,.,118754108858414.,.,
369
+
370
+ module_eval <<-'.,.,118754108849141.,.,', 'sample_calc/calc.astdf.dr', 20
371
+ def visit_Node_literal node
372
+ node.value = node.n.value
373
+
374
+ end
375
+
376
+ .,.,118754108849141.,.,
377
+
378
+ end
379
+
380
+ class D4TinyCalc::ASTBuilderDepthFirst < Depager::LALR::Action #:nodoc:all
381
+ include Depager::DecoratorUtils
382
+
383
+ on_reduce = [
384
+ nil,
385
+ :_ast_0,
386
+ :_ast_1,
387
+ :_ast_2,
388
+ :_ast_3,
389
+ :_ast_4,
390
+ :_ast_5,
391
+ :_ast_6,
392
+ :_ast_7,
393
+
394
+ ]
395
+ Tables = [on_reduce]
396
+ def initialize inside
397
+ super inside, 'ASTBuilderDepthFirst'
398
+ @on_reduce, = self.class::Tables
399
+ init_parser
400
+ end
401
+
402
+
403
+ module_eval <<-'.,.,118754108836976.,.,', 'sample_calc/calc.astdf.dr', 26
404
+ def _ast_0 val
405
+ Node_add.new(val[0].lineno, val[0], val[2])
406
+ end
407
+
408
+ .,.,118754108836976.,.,
409
+
410
+ module_eval <<-'.,.,118754108859323.,.,', 'sample_calc/calc.astdf.dr', 28
411
+ def _ast_1 val
412
+ Node_sub.new(val[0].lineno, val[0], val[2])
413
+ end
414
+
415
+ .,.,118754108859323.,.,
416
+
417
+ module_eval <<-'.,.,11875410886924.,.,', 'sample_calc/calc.astdf.dr', 30
418
+ def _ast_2 val
419
+ val[0]
420
+ end
421
+
422
+ .,.,11875410886924.,.,
423
+
424
+ module_eval <<-'.,.,118754108848739.,.,', 'sample_calc/calc.astdf.dr', 34
425
+ def _ast_3 val
426
+ Node_mul.new(val[0].lineno, val[0], val[2])
427
+ end
428
+
429
+ .,.,118754108848739.,.,
430
+
431
+ module_eval <<-'.,.,118754108840033.,.,', 'sample_calc/calc.astdf.dr', 36
432
+ def _ast_4 val
433
+ Node_div.new(val[0].lineno, val[0], val[2])
434
+ end
435
+
436
+ .,.,118754108840033.,.,
437
+
438
+ module_eval <<-'.,.,118754108834371.,.,', 'sample_calc/calc.astdf.dr', 38
439
+ def _ast_5 val
440
+ val[0]
441
+ end
442
+
443
+ .,.,118754108834371.,.,
444
+
445
+ module_eval <<-'.,.,118754108849607.,.,', 'sample_calc/calc.astdf.dr', 42
446
+ def _ast_6 val
447
+ Node_literal.new(val[0].lineno, val[0])
448
+ end
449
+
450
+ .,.,118754108849607.,.,
451
+
452
+ module_eval <<-'.,.,118754108811811.,.,', 'sample_calc/calc.astdf.dr', 44
453
+ def _ast_7 val
454
+ val[1]
455
+ end
456
+
457
+ .,.,118754108811811.,.,
458
+
459
+ end
460
+
461
+
462
+ def createDecoratedTinyCalc
463
+ D4TinyCalc::ASTBuilderDepthFirst.new(TinyCalc.new())
464
+ end
465
+
466
+ ### main
467
+ if __FILE__ == $0
468
+ ### Main Code
469
+ require 'pp'
470
+ parser = createDecoratedTinyCalc()
471
+ t, = parser.yyparse(STDIN)
472
+ v = Visitor.new
473
+ pp t.accept(v).value
474
+ pp t
475
+
476
+ end