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,277 @@
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
+ 'ATreeBuilder' => 2,
28
+ }
29
+ ### Term to Int
30
+ t2i = {
31
+ nil => 0,
32
+ false => 1,
33
+ "+" => 2,
34
+ "-" => 3,
35
+ "*" => 4,
36
+ "/" => 5,
37
+ :NUM => 6,
38
+ "(" => 7,
39
+ ")" => 8,
40
+ }
41
+ ### Int to Term
42
+ i2t = [
43
+ nil,
44
+ false,
45
+ "+",
46
+ "-",
47
+ "*",
48
+ "/",
49
+ :NUM,
50
+ "(",
51
+ ")",
52
+ ]
53
+ ### Action Table
54
+ action_table = [
55
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
56
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
57
+ [ ACC, nil, 7, 8, nil, nil, nil, nil, nil, ],
58
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
59
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
60
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
61
+ [ nil, nil, 7, 8, nil, nil, nil, nil, 11, ],
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, 5, 1, nil, ],
66
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
67
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
68
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
69
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
70
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
71
+ ]
72
+ ### Default Reduce Table
73
+ defred_table = [
74
+ nil,
75
+ nil,
76
+ nil,
77
+ -3,
78
+ -6,
79
+ -7,
80
+ nil,
81
+ nil,
82
+ nil,
83
+ nil,
84
+ nil,
85
+ -8,
86
+ -1,
87
+ -2,
88
+ -4,
89
+ -5,
90
+ ]
91
+ defred_after_shift_table = [
92
+ nil,
93
+ nil,
94
+ nil,
95
+ nil,
96
+ -6,
97
+ -7,
98
+ nil,
99
+ nil,
100
+ nil,
101
+ nil,
102
+ nil,
103
+ -8,
104
+ nil,
105
+ nil,
106
+ -4,
107
+ -5,
108
+ ]
109
+ ### Nonterm to Int
110
+ nt2i = {
111
+ :expr => 0,
112
+ :term => 1,
113
+ :fact => 2,
114
+ }
115
+ ### Int to Nonterm
116
+ i2nt = [
117
+ :expr,
118
+ :term,
119
+ :fact,
120
+ ]
121
+ ### Goto Table
122
+ goto_table = [
123
+ [ 2, 3, 4, ],
124
+ [ 6, 3, 4, ],
125
+ [ nil, nil, nil, ],
126
+ [ nil, nil, nil, ],
127
+ [ nil, nil, nil, ],
128
+ [ nil, nil, nil, ],
129
+ [ nil, nil, nil, ],
130
+ [ nil, 12, 4, ],
131
+ [ nil, 13, 4, ],
132
+ [ nil, nil, 14, ],
133
+ [ nil, nil, 15, ],
134
+ [ nil, nil, nil, ],
135
+ [ nil, nil, nil, ],
136
+ [ nil, nil, nil, ],
137
+ [ nil, nil, nil, ],
138
+ [ nil, nil, nil, ],
139
+ ]
140
+
141
+ Tables = [ reduce_table, nparams, action_table,
142
+ defred_table, defred_after_shift_table, goto_table,
143
+ t2i, i2t, nt2i, i2nt ]
144
+
145
+ def self.createDecoratedParser
146
+ D4TinyCalc::ATreeBuilder.new(TinyCalc.new())
147
+ end
148
+
149
+ ### Inner Code
150
+
151
+ def lex
152
+ begin
153
+ until @line.empty?
154
+ case @line
155
+
156
+ when /\A\s+/, /\A\#.*/
157
+ @oldline = @line; @line = $'
158
+
159
+
160
+
161
+ when /\A[1-9][0-9]*/
162
+ @oldline = @line; @line = $'
163
+ yield _Token(:NUM, $&.to_i)
164
+
165
+
166
+ when /\A./
167
+ @oldline = @line; @line = $'
168
+ yield _Token($&, $&)
169
+
170
+
171
+ else
172
+ raise RuntimeError, "must not happen #{@line}"
173
+ end
174
+ end
175
+ end while @line0 = @line = getline
176
+ yield nil, nil
177
+ end
178
+
179
+ end
180
+
181
+ ### Outer Code
182
+
183
+ class D4TinyCalc::ATreeBuilder < Depager::LALR::Action #:nodoc:all
184
+ include Depager::DecoratorUtils
185
+
186
+ on_reduce = [
187
+ nil,
188
+ :_atree_0,
189
+ :_atree_1,
190
+ :_atree_2,
191
+ :_atree_3,
192
+ :_atree_4,
193
+ :_atree_5,
194
+ :_atree_6,
195
+ :_atree_7,
196
+
197
+ ]
198
+ Tables = [on_reduce]
199
+ def initialize inside
200
+ super inside, 'ATreeBuilder'
201
+ @on_reduce, = self.class::Tables
202
+ init_parser
203
+ end
204
+
205
+
206
+ module_eval <<-'.,.,118754109027636.,.,', 'sample_calc/calc.atree.dr', 17
207
+ def _atree_0 val
208
+ [:add, val[0],val[2]]
209
+ end
210
+
211
+ .,.,118754109027636.,.,
212
+
213
+ module_eval <<-'.,.,118754109032509.,.,', 'sample_calc/calc.atree.dr', 19
214
+ def _atree_1 val
215
+ [:sub, val[0],val[2]]
216
+ end
217
+
218
+ .,.,118754109032509.,.,
219
+
220
+ module_eval <<-'.,.,118754109043231.,.,', 'sample_calc/calc.atree.dr', 21
221
+ def _atree_2 val
222
+ val[0]
223
+ end
224
+
225
+ .,.,118754109043231.,.,
226
+
227
+ module_eval <<-'.,.,11875410902130.,.,', 'sample_calc/calc.atree.dr', 25
228
+ def _atree_3 val
229
+ [:mul, val[0],val[2]]
230
+ end
231
+
232
+ .,.,11875410902130.,.,
233
+
234
+ module_eval <<-'.,.,11875410909726.,.,', 'sample_calc/calc.atree.dr', 27
235
+ def _atree_4 val
236
+ [:div, val[0],val[2]]
237
+ end
238
+
239
+ .,.,11875410909726.,.,
240
+
241
+ module_eval <<-'.,.,11875410909992.,.,', 'sample_calc/calc.atree.dr', 29
242
+ def _atree_5 val
243
+ val[0]
244
+ end
245
+
246
+ .,.,11875410909992.,.,
247
+
248
+ module_eval <<-'.,.,118754109027407.,.,', 'sample_calc/calc.atree.dr', 33
249
+ def _atree_6 val
250
+ [:literal, val[0]]
251
+ end
252
+
253
+ .,.,118754109027407.,.,
254
+
255
+ module_eval <<-'.,.,118754109041552.,.,', 'sample_calc/calc.atree.dr', 35
256
+ def _atree_7 val
257
+ val[1]
258
+ end
259
+
260
+ .,.,118754109041552.,.,
261
+
262
+ end
263
+
264
+
265
+ def createDecoratedTinyCalc
266
+ D4TinyCalc::ATreeBuilder.new(TinyCalc.new())
267
+ end
268
+
269
+ ### main
270
+ if __FILE__ == $0
271
+ ### Main Code
272
+ require 'pp'
273
+ parser = createDecoratedTinyCalc
274
+ r, = parser.yyparse(STDIN)
275
+ pp r
276
+
277
+ end
@@ -0,0 +1,478 @@
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
+ 'CSTBuilder' => 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::CSTBuilder.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
+ def accept
184
+ end
185
+ end
186
+
187
+ class Visitor
188
+
189
+ module_eval <<-'.,.,118754109035322.,.,', 'sample_calc/calc.cst.dr', 23
190
+ def visit_Node_expr_0 node
191
+ node.value = node.expr.value + node.term.value
192
+
193
+ end
194
+
195
+ .,.,118754109035322.,.,
196
+
197
+ module_eval <<-'.,.,118754109055219.,.,', 'sample_calc/calc.cst.dr', 24
198
+ def visit_Node_expr_1 node
199
+ node.value = node.expr.value + node.term.value
200
+
201
+ end
202
+
203
+ .,.,118754109055219.,.,
204
+
205
+ module_eval <<-'.,.,118754109026591.,.,', 'sample_calc/calc.cst.dr', 25
206
+ def visit_Node_expr_2 node
207
+ node.value = node.term.value
208
+
209
+ end
210
+
211
+ .,.,118754109026591.,.,
212
+
213
+ module_eval <<-'.,.,118754109017048.,.,', 'sample_calc/calc.cst.dr', 28
214
+ def visit_Node_term_0 node
215
+ node.value = node.term.value * node.fact.value
216
+
217
+ end
218
+
219
+ .,.,118754109017048.,.,
220
+
221
+ module_eval <<-'.,.,118754109059012.,.,', 'sample_calc/calc.cst.dr', 29
222
+ def visit_Node_term_1 node
223
+ node.value = node.term.value / node.fact.value
224
+
225
+ end
226
+
227
+ .,.,118754109059012.,.,
228
+
229
+ module_eval <<-'.,.,118754109013457.,.,', 'sample_calc/calc.cst.dr', 30
230
+ def visit_Node_term_2 node
231
+ node.value = node.fact.value
232
+
233
+ end
234
+
235
+ .,.,118754109013457.,.,
236
+
237
+ module_eval <<-'.,.,118754109020434.,.,', 'sample_calc/calc.cst.dr', 33
238
+ def visit_Node_fact_0 node
239
+ node.value = node.num.value
240
+
241
+ end
242
+
243
+ .,.,118754109020434.,.,
244
+
245
+ module_eval <<-'.,.,118754109063699.,.,', 'sample_calc/calc.cst.dr', 34
246
+ def visit_Node_fact_1 node
247
+ node.value = node.expr
248
+
249
+ end
250
+
251
+ .,.,118754109063699.,.,
252
+
253
+ end
254
+
255
+ class Node
256
+
257
+ attr_accessor :value
258
+ def initialize
259
+ @value = nil
260
+ end
261
+
262
+ end
263
+ class Visitor
264
+
265
+ end
266
+
267
+ class Node_expr < Node
268
+ def initialize
269
+ super()
270
+ end
271
+ end
272
+
273
+ class Node_expr_0 < Node_expr
274
+ attr_accessor :expr, :tx2b, :term
275
+ def initialize expr, tx2b, term
276
+ super()
277
+ @expr = expr; @tx2b = tx2b; @term = term
278
+ end
279
+ def accept v
280
+ expr.accept(v); term.accept(v);
281
+ v.visit_Node_expr_0(self)
282
+ end
283
+ end
284
+
285
+ class Node_expr_1 < Node_expr
286
+ attr_accessor :expr, :tx2d, :term
287
+ def initialize expr, tx2d, term
288
+ super()
289
+ @expr = expr; @tx2d = tx2d; @term = term
290
+ end
291
+ def accept v
292
+ expr.accept(v); term.accept(v);
293
+ v.visit_Node_expr_1(self)
294
+ end
295
+ end
296
+
297
+ class Node_expr_2 < Node_expr
298
+ attr_accessor :term
299
+ def initialize term
300
+ super()
301
+ @term = term
302
+ end
303
+ def accept v
304
+ term.accept(v);
305
+ v.visit_Node_expr_2(self)
306
+ end
307
+ end
308
+
309
+ class Node_term < Node
310
+ def initialize
311
+ super()
312
+ end
313
+ end
314
+
315
+ class Node_term_0 < Node_term
316
+ attr_accessor :term, :tx2a, :fact
317
+ def initialize term, tx2a, fact
318
+ super()
319
+ @term = term; @tx2a = tx2a; @fact = fact
320
+ end
321
+ def accept v
322
+ term.accept(v); fact.accept(v);
323
+ v.visit_Node_term_0(self)
324
+ end
325
+ end
326
+
327
+ class Node_term_1 < Node_term
328
+ attr_accessor :term, :tx2f, :fact
329
+ def initialize term, tx2f, fact
330
+ super()
331
+ @term = term; @tx2f = tx2f; @fact = fact
332
+ end
333
+ def accept v
334
+ term.accept(v); fact.accept(v);
335
+ v.visit_Node_term_1(self)
336
+ end
337
+ end
338
+
339
+ class Node_term_2 < Node_term
340
+ attr_accessor :fact
341
+ def initialize fact
342
+ super()
343
+ @fact = fact
344
+ end
345
+ def accept v
346
+ fact.accept(v);
347
+ v.visit_Node_term_2(self)
348
+ end
349
+ end
350
+
351
+ class Node_fact < Node
352
+ def initialize
353
+ super()
354
+ end
355
+ end
356
+
357
+ class Node_fact_0 < Node_fact
358
+ attr_accessor :num
359
+ def initialize num
360
+ super()
361
+ @num = num
362
+ end
363
+ def accept v
364
+
365
+ v.visit_Node_fact_0(self)
366
+ end
367
+ end
368
+
369
+ class Node_fact_1 < Node_fact
370
+ attr_accessor :tx28, :expr, :tx29
371
+ def initialize tx28, expr, tx29
372
+ super()
373
+ @tx28 = tx28; @expr = expr; @tx29 = tx29
374
+ end
375
+ def accept v
376
+ expr.accept(v);
377
+ v.visit_Node_fact_1(self)
378
+ end
379
+ end
380
+
381
+ class D4TinyCalc::CSTBuilder < Depager::LALR::Action #:nodoc:all
382
+ include Depager::DecoratorUtils
383
+
384
+ on_reduce = [
385
+ nil,
386
+ :_cst_0,
387
+ :_cst_1,
388
+ :_cst_2,
389
+ :_cst_3,
390
+ :_cst_4,
391
+ :_cst_5,
392
+ :_cst_6,
393
+ :_cst_7,
394
+
395
+ ]
396
+ Tables = [on_reduce]
397
+ def initialize inside
398
+ super inside, 'CSTBuilder'
399
+ @on_reduce, = self.class::Tables
400
+ init_parser
401
+ end
402
+
403
+
404
+ module_eval <<-'.,.,118754109050531.,.,', 'sample_calc/calc.cst.dr', 23
405
+ def _cst_0 val
406
+ Node_expr_0.new(val[0], val[1], val[2])
407
+ end
408
+
409
+ .,.,118754109050531.,.,
410
+
411
+ module_eval <<-'.,.,118754109039698.,.,', 'sample_calc/calc.cst.dr', 24
412
+ def _cst_1 val
413
+ Node_expr_1.new(val[0], val[1], val[2])
414
+ end
415
+
416
+ .,.,118754109039698.,.,
417
+
418
+ module_eval <<-'.,.,1187541090475.,.,', 'sample_calc/calc.cst.dr', 25
419
+ def _cst_2 val
420
+ Node_expr_2.new(val[0])
421
+ end
422
+
423
+ .,.,1187541090475.,.,
424
+
425
+ module_eval <<-'.,.,118754109053937.,.,', 'sample_calc/calc.cst.dr', 28
426
+ def _cst_3 val
427
+ Node_term_0.new(val[0], val[1], val[2])
428
+ end
429
+
430
+ .,.,118754109053937.,.,
431
+
432
+ module_eval <<-'.,.,118754109039336.,.,', 'sample_calc/calc.cst.dr', 29
433
+ def _cst_4 val
434
+ Node_term_1.new(val[0], val[1], val[2])
435
+ end
436
+
437
+ .,.,118754109039336.,.,
438
+
439
+ module_eval <<-'.,.,118754109031052.,.,', 'sample_calc/calc.cst.dr', 30
440
+ def _cst_5 val
441
+ Node_term_2.new(val[0])
442
+ end
443
+
444
+ .,.,118754109031052.,.,
445
+
446
+ module_eval <<-'.,.,11875410903088.,.,', 'sample_calc/calc.cst.dr', 33
447
+ def _cst_6 val
448
+ Node_fact_0.new(val[0])
449
+ end
450
+
451
+ .,.,11875410903088.,.,
452
+
453
+ module_eval <<-'.,.,11875410905263.,.,', 'sample_calc/calc.cst.dr', 34
454
+ def _cst_7 val
455
+ Node_fact_1.new(val[0], val[1], val[2])
456
+ end
457
+
458
+ .,.,11875410905263.,.,
459
+
460
+ end
461
+
462
+
463
+ def createDecoratedTinyCalc
464
+ D4TinyCalc::CSTBuilder.new(TinyCalc.new())
465
+ end
466
+
467
+ ### main
468
+ if __FILE__ == $0
469
+ ### Main Code
470
+ require 'pp'
471
+ parser = createDecoratedTinyCalc
472
+ r, = parser.yyparse(STDIN)
473
+ v = Visitor.new
474
+ r.accept(v)
475
+ pp r
476
+ puts r.value
477
+
478
+ end