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,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