depager 0.2.3 → 0.3.0.b20250423

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 (106) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +44 -0
  3. data/.simplecov +5 -0
  4. data/Gemfile +12 -0
  5. data/LICENSE.gpl +339 -0
  6. data/Manifest.txt +73 -0
  7. data/README.en +7 -21
  8. data/README.ja +19 -99
  9. data/Rakefile +31 -0
  10. data/bin/depager +7 -45
  11. data/examples/action_pl0d/pl0d.action.dr +421 -0
  12. data/examples/action_pl0d/test.pl0ds +48 -0
  13. data/examples/c89/c89.dr +493 -496
  14. data/examples/c89/test.c89 +10 -10
  15. data/examples/extension/astdf.rb +9 -0
  16. data/examples/extension/atree.dr +55 -0
  17. data/examples/{sample_calc → extension}/calc.atree.dr +42 -43
  18. data/examples/{sample_calc/calc.action.dr → extension/calc.simple_action.dr} +33 -33
  19. data/examples/extension/paction.dr +16 -15
  20. data/examples/extension/pactiontest.dr +14 -14
  21. data/examples/extension/simple_action.rb +46 -0
  22. data/examples/pl0d/pl0ds.dr +337 -334
  23. data/examples/pl0d/test.pl0ds +33 -33
  24. data/examples/rie_calc/calc.rie.dr +57 -0
  25. data/examples/rie_calc/test.calc +4 -0
  26. data/examples/rie_dcuse/dcuse.rie.dr +71 -0
  27. data/examples/rie_dcuse/test.dcuse +1 -0
  28. data/examples/rie_pl0/orig_ex/exerrdg.pl0 +44 -0
  29. data/examples/rie_pl0/orig_ex/exerrm.pl0 +19 -0
  30. data/examples/rie_pl0/orig_ex/exerrmre.pl0 +20 -0
  31. data/examples/rie_pl0/orig_ex/exerrtok.pl0 +18 -0
  32. data/examples/rie_pl0/orig_ex/exmdg.pl0 +40 -0
  33. data/examples/rie_pl0/orig_ex/exmdgwwl.pl0 +43 -0
  34. data/examples/rie_pl0/orig_ex/exmrw.pl0 +22 -0
  35. data/examples/rie_pl0/orig_ex/exmwwl.pl0 +18 -0
  36. data/examples/rie_pl0/orig_ex/exnorw.pl0 +17 -0
  37. data/examples/rie_pl0/pl0.rie.dr +450 -0
  38. data/examples/rie_pl0/test.pl0 +10 -0
  39. data/examples/slex_test/divreg.slex.dr +29 -29
  40. data/examples/slex_test/ljoin.slex.dr +36 -36
  41. data/examples/slex_test/test.divreg +1 -1
  42. data/examples/slex_test/test.ljoin +3 -3
  43. data/examples/{sample_calc/calc.nvaction.dr → tiny_calc/calc.action.dr} +33 -33
  44. data/examples/{sample_calc → tiny_calc}/calc.ast.action.dr +76 -66
  45. data/examples/{sample_calc → tiny_calc}/calc.ast.dr +67 -55
  46. data/examples/tiny_calc/calc.cst.dr +50 -0
  47. data/examples/{sample_calc → tiny_calc}/calc.dr +43 -43
  48. data/examples/{sample_calc → tiny_calc}/calc.lex.dr +29 -29
  49. data/examples/{sample_calc/calc_prec.nvaction.dr → tiny_calc/calc_prec.action.dr} +31 -31
  50. data/lib/depager/cli.rb +44 -0
  51. data/lib/depager/grammar.rb +253 -291
  52. data/lib/depager/lr.rb +589 -579
  53. data/lib/depager/parser.rb +269 -277
  54. data/lib/depager/plugins/_rie_debug.rb +63 -0
  55. data/lib/depager/plugins/action.rb +47 -0
  56. data/lib/depager/plugins/ast.dr +367 -0
  57. data/lib/depager/plugins/ast.rb +1329 -0
  58. data/lib/depager/{ruby/plugins → plugins}/cst.dr +174 -180
  59. data/lib/depager/plugins/cst.rb +591 -0
  60. data/lib/depager/{ruby/plugins → plugins}/lex.dr +85 -89
  61. data/lib/depager/plugins/lex.rb +313 -0
  62. data/lib/depager/plugins/rie.dr +725 -0
  63. data/lib/depager/plugins/rie.rb +1614 -0
  64. data/lib/depager/{ruby/plugins → plugins}/slex.dr +201 -200
  65. data/lib/depager/plugins/slex.rb +769 -0
  66. data/lib/depager/plugins/srp.rb +46 -0
  67. data/lib/depager/ruby/templates/extension_lalr_master.erb +40 -51
  68. data/lib/depager/ruby/templates/extension_lalr_slave.erb +113 -107
  69. data/lib/depager/ruby/templates/single_lalr_parser.erb +124 -117
  70. data/lib/depager/utils.rb +158 -318
  71. data/lib/depager/version.rb +3 -3
  72. data/lib/depager.rb +572 -670
  73. metadata +77 -80
  74. data/ChangeLog +0 -16
  75. data/data/depager/pre-setup.rb +0 -3
  76. data/examples/c89/c89.tab.rb +0 -7127
  77. data/examples/pl0d/pl0ds.tab.rb +0 -2698
  78. data/examples/sample_calc/calc.action.tab.rb +0 -457
  79. data/examples/sample_calc/calc.ast.action.tab.rb +0 -749
  80. data/examples/sample_calc/calc.ast.tab.rb +0 -665
  81. data/examples/sample_calc/calc.astdf.dr +0 -54
  82. data/examples/sample_calc/calc.astdf.tab.rb +0 -672
  83. data/examples/sample_calc/calc.atree.tab.rb +0 -451
  84. data/examples/sample_calc/calc.cst.dr +0 -45
  85. data/examples/sample_calc/calc.cst.tab.rb +0 -644
  86. data/examples/sample_calc/calc.lex.tab.rb +0 -374
  87. data/examples/sample_calc/calc.nvaction.tab.rb +0 -465
  88. data/examples/sample_calc/calc.tab.rb +0 -365
  89. data/examples/sample_calc/calc_prec.nvaction.tab.rb +0 -431
  90. data/examples/slex_test/divreg.slex.tab.rb +0 -303
  91. data/examples/slex_test/ljoin.slex.tab.rb +0 -370
  92. data/lib/depager/ruby/plugins/_ast_tmpl.rb +0 -73
  93. data/lib/depager/ruby/plugins/action.rb +0 -43
  94. data/lib/depager/ruby/plugins/ast.dr +0 -269
  95. data/lib/depager/ruby/plugins/ast.rb +0 -1308
  96. data/lib/depager/ruby/plugins/astdf.rb +0 -6
  97. data/lib/depager/ruby/plugins/atree.dr +0 -55
  98. data/lib/depager/ruby/plugins/atree.rb +0 -347
  99. data/lib/depager/ruby/plugins/cst.rb +0 -626
  100. data/lib/depager/ruby/plugins/lex.rb +0 -336
  101. data/lib/depager/ruby/plugins/nvaction.rb +0 -19
  102. data/lib/depager/ruby/plugins/slex.rb +0 -817
  103. data/lib/depager/ruby/plugins/srp.rb +0 -51
  104. data/lib/depager/ruby/templates/simple.erb +0 -23
  105. data/setup.rb +0 -1585
  106. /data/examples/{sample_calc → tiny_calc}/test.calc +0 -0
@@ -1,451 +0,0 @@
1
-
2
- begin; require 'rubygems'; rescue Exception; end
3
- require 'depager/parser.rb'
4
-
5
-
6
- module Depager::DecoratorUtils; end
7
- module D4TinyCalc; 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
-
142
- alias orig_error error
143
- def error
144
- orig_error
145
- warn "current state: #{StateInfo[@stack.last]}"
146
- end
147
-
148
- ### States
149
- StateInfo = [
150
- <<'----------',
151
- I000 =
152
- ( 0) $start : _ expr
153
-
154
- NUM shift, and goto to state 5
155
- '(' shift, and goto to state 1
156
-
157
-
158
- ----------
159
-
160
- <<'----------',
161
- I001 =
162
- ( 8) fact : '(' _ expr ')'
163
-
164
- NUM shift, and goto to state 5
165
- '(' shift, and goto to state 1
166
-
167
-
168
- ----------
169
-
170
- <<'----------',
171
- I002 =
172
- ( 0) $start : expr _
173
- ( 1) expr : expr _ '+' term
174
- ( 2) expr : expr _ '-' term
175
-
176
- '+' shift, and goto to state 7
177
- '-' shift, and goto to state 8
178
-
179
-
180
- $end accept
181
-
182
- ----------
183
-
184
- <<'----------',
185
- I003 =
186
- ( 3) expr : term _
187
- ( 4) term : term _ '*' fact
188
- ( 5) term : term _ '/' fact
189
-
190
- '*' shift, and goto to state 9
191
- '/' shift, and goto to state 10
192
-
193
- $default reduce using rule 3 (expr)
194
-
195
- ----------
196
-
197
- <<'----------',
198
- I004 =
199
- ( 6) term : fact _
200
-
201
-
202
- $default reduce using rule 6 (term) [after shift]
203
-
204
- ----------
205
-
206
- <<'----------',
207
- I005 =
208
- ( 7) fact : NUM _
209
-
210
-
211
- $default reduce using rule 7 (fact) [after shift]
212
-
213
- ----------
214
-
215
- <<'----------',
216
- I006 =
217
- ( 8) fact : '(' expr _ ')'
218
- ( 1) expr : expr _ '+' term
219
- ( 2) expr : expr _ '-' term
220
-
221
- '+' shift, and goto to state 7
222
- '-' shift, and goto to state 8
223
- ')' shift, and goto to state 11
224
-
225
-
226
- ----------
227
-
228
- <<'----------',
229
- I007 =
230
- ( 1) expr : expr '+' _ term
231
-
232
- NUM shift, and goto to state 5
233
- '(' shift, and goto to state 1
234
-
235
-
236
- ----------
237
-
238
- <<'----------',
239
- I008 =
240
- ( 2) expr : expr '-' _ term
241
-
242
- NUM shift, and goto to state 5
243
- '(' shift, and goto to state 1
244
-
245
-
246
- ----------
247
-
248
- <<'----------',
249
- I009 =
250
- ( 4) term : term '*' _ fact
251
-
252
- NUM shift, and goto to state 5
253
- '(' shift, and goto to state 1
254
-
255
-
256
- ----------
257
-
258
- <<'----------',
259
- I010 =
260
- ( 5) term : term '/' _ fact
261
-
262
- NUM shift, and goto to state 5
263
- '(' shift, and goto to state 1
264
-
265
-
266
- ----------
267
-
268
- <<'----------',
269
- I011 =
270
- ( 8) fact : '(' expr ')' _
271
-
272
-
273
- $default reduce using rule 8 (fact) [after shift]
274
-
275
- ----------
276
-
277
- <<'----------',
278
- I012 =
279
- ( 1) expr : expr '+' term _
280
- ( 4) term : term _ '*' fact
281
- ( 5) term : term _ '/' fact
282
-
283
- '*' shift, and goto to state 9
284
- '/' shift, and goto to state 10
285
-
286
- $default reduce using rule 1 (expr)
287
-
288
- ----------
289
-
290
- <<'----------',
291
- I013 =
292
- ( 2) expr : expr '-' term _
293
- ( 4) term : term _ '*' fact
294
- ( 5) term : term _ '/' fact
295
-
296
- '*' shift, and goto to state 9
297
- '/' shift, and goto to state 10
298
-
299
- $default reduce using rule 2 (expr)
300
-
301
- ----------
302
-
303
- <<'----------',
304
- I014 =
305
- ( 4) term : term '*' fact _
306
-
307
-
308
- $default reduce using rule 4 (term) [after shift]
309
-
310
- ----------
311
-
312
- <<'----------',
313
- I015 =
314
- ( 5) term : term '/' fact _
315
-
316
-
317
- $default reduce using rule 5 (term) [after shift]
318
-
319
- ----------
320
- ]
321
-
322
-
323
- Tables = [ reduce_table, nparams, action_table,
324
- defred_table, defred_after_shift_table, goto_table,
325
- t2i, i2t, nt2i, i2nt ]
326
-
327
- def self.createDecoratedParser
328
- D4TinyCalc::ATreeBuilder.new(TinyCalc.new())
329
- end
330
-
331
- ### Inner Code
332
-
333
- def lex
334
- begin
335
- until @line.empty?
336
- case @line
337
-
338
- when /\A\s+/, /\A\#.*/
339
- @oldline = @line; @line = $'
340
-
341
-
342
-
343
- when /\A[1-9][0-9]*/
344
- @oldline = @line; @line = $'
345
- yield token(:NUM, $&.to_i)
346
-
347
-
348
- when /\A./
349
- @oldline = @line; @line = $'
350
- yield token($&, $&)
351
-
352
-
353
- else
354
- raise RuntimeError, "must not happen #{@line}"
355
- end
356
- end
357
- end while @line0 = @line = getline
358
- yield nil, nil
359
- end
360
-
361
- end
362
-
363
- ### Outer Code
364
-
365
- class D4TinyCalc::ATreeBuilder < Depager::LALR::Action #:nodoc:all
366
- include Depager::DecoratorUtils
367
-
368
- on_reduce = [
369
- nil,
370
- :_atree_0,
371
- :_atree_1,
372
- :_atree_2,
373
- :_atree_3,
374
- :_atree_4,
375
- :_atree_5,
376
- :_atree_6,
377
- :_atree_7,
378
-
379
- ]
380
- Tables = [on_reduce]
381
- def initialize inside
382
- super inside, 'ATreeBuilder'
383
- @on_reduce, = self.class::Tables
384
- init_parser
385
- end
386
-
387
-
388
- module_eval <<-'.,.,122745803830157.,.,', 'sample_calc/calc.atree.dr', 17
389
- def _atree_0 val
390
- [:add, val[0],val[2]]
391
- end
392
- .,.,122745803830157.,.,
393
-
394
- module_eval <<-'.,.,122745803819966.,.,', 'sample_calc/calc.atree.dr', 19
395
- def _atree_1 val
396
- [:sub, val[0],val[2]]
397
- end
398
- .,.,122745803819966.,.,
399
-
400
- module_eval <<-'.,.,122745803811215.,.,', 'sample_calc/calc.atree.dr', 21
401
- def _atree_2 val
402
- val[0]
403
- end
404
- .,.,122745803811215.,.,
405
-
406
- module_eval <<-'.,.,122745803854915.,.,', 'sample_calc/calc.atree.dr', 25
407
- def _atree_3 val
408
- [:mul, val[0],val[2]]
409
- end
410
- .,.,122745803854915.,.,
411
-
412
- module_eval <<-'.,.,12274580384152.,.,', 'sample_calc/calc.atree.dr', 27
413
- def _atree_4 val
414
- [:div, val[0],val[2]]
415
- end
416
- .,.,12274580384152.,.,
417
-
418
- module_eval <<-'.,.,122745803842692.,.,', 'sample_calc/calc.atree.dr', 29
419
- def _atree_5 val
420
- val[0]
421
- end
422
- .,.,122745803842692.,.,
423
-
424
- module_eval <<-'.,.,122745803834536.,.,', 'sample_calc/calc.atree.dr', 33
425
- def _atree_6 val
426
- [:literal, val[0]]
427
- end
428
- .,.,122745803834536.,.,
429
-
430
- module_eval <<-'.,.,122745803843700.,.,', 'sample_calc/calc.atree.dr', 35
431
- def _atree_7 val
432
- val[1]
433
- end
434
- .,.,122745803843700.,.,
435
-
436
- end
437
-
438
-
439
- def createDecoratedTinyCalc
440
- D4TinyCalc::ATreeBuilder.new(TinyCalc.new())
441
- end
442
-
443
- ### main
444
- if __FILE__ == $0
445
- ### Main Code
446
- require 'pp'
447
- parser = createDecoratedTinyCalc
448
- r, = parser.parse(STDIN)
449
- pp r
450
-
451
- end
@@ -1,45 +0,0 @@
1
- %class TinyCalc
2
- %extend Lexer ('plugins/lex.rb')
3
- %extend CSTBuilder ('plugins/cst.rb')
4
- %decorate @CSTBuilder
5
- %%
6
-
7
- %LEX{
8
- /\s+/, /\#.*/ { }
9
- /[1-9][0-9]*/ { yield token(:NUM, $&.to_i) }
10
- /./ { yield token($&, $&) }
11
- %}
12
-
13
- %CST{
14
- Node {
15
- attr_accessor :value
16
- def initialize
17
- @value = nil
18
- end
19
- }
20
- %}
21
-
22
- #begin-rule
23
- expr :
24
- expr '+' term { ~value = ~expr.value + ~term.value }
25
- | expr '-' term { ~value = ~expr.value + ~term.value }
26
- | term { ~value = ~term.value }
27
- ;
28
- term :
29
- term '*' fact { ~value = ~term.value * ~fact.value }
30
- | term '/' fact { ~value = ~term.value / ~fact.value }
31
- | fact { ~value = ~fact.value }
32
- ;
33
- fact :
34
- NUM { ~value = ~num.value }
35
- | '(' expr ')' { ~value = ~expr }
36
- ;
37
- #end-rule
38
- %%
39
- require 'pp'
40
- parser = createDecoratedTinyCalc
41
- r, = parser.parse(STDIN)
42
- v = Visitor.new
43
- r.accept(v)
44
- pp r
45
- puts r.value