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,336 +0,0 @@
1
-
2
- ###
3
- ### LexerExtension - Depager Extension (master)
4
- ###
5
- require 'pp.rb'
6
- require 'depager/parser.rb'
7
-
8
-
9
- module D4LexerExtension #:nodoc:all
10
- end
11
-
12
- class LexerExtension #:nodoc:all
13
- include Depager::ExtensionUtils
14
-
15
- attr_accessor :h2p
16
-
17
- def initialize
18
- @master = self
19
- @hook = []
20
- @h2p = {}
21
- init_parser
22
- end
23
-
24
- def __regext__ p
25
- super p, :none, nil
26
-
27
- @hook[0] = LexerExtension_pre_rule_list.new(p, @nparam, self)
28
- @h2p['pre_rule_list'] = @hook[0]
29
- p.hooks[:pre_rule_list].push [@hook[0], :do_parse]
30
-
31
- regext p
32
- end
33
-
34
- ### Inner Code
35
-
36
- end
37
-
38
- ### Outer Code
39
-
40
- ###
41
- ### LexerExtension_pre_rule_list - Part of Depager Extension (slave)
42
- ###
43
- module D4LexerExtension_pre_rule_list #:nodoc:all
44
- end
45
-
46
- class LexerExtension_pre_rule_list < Depager::LALR::Basis #:nodoc:all
47
- include Depager::ExtensionUtils
48
-
49
-
50
- ### Reduce Table
51
- reduce_table = [
52
- [ -1, 1 ],
53
- [ 0, 1 ],
54
- [ 1, 1 ],
55
- [ 1, 2 ],
56
- [ 2, 3 ],
57
- [ 4, 0 ],
58
- [ 4, 1 ],
59
- [ 3, 1 ],
60
- [ 3, 3 ],
61
- ]
62
- ### Extension Params
63
- nparams = {
64
- 'NVAction' => 2,
65
- }
66
- ### Term to Int
67
- t2i = {
68
- nil => 0,
69
- false => 1,
70
- :ACTION => 2,
71
- "!" => 3,
72
- :LEX => 4,
73
- "," => 5,
74
- }
75
- ### Int to Term
76
- i2t = [
77
- nil,
78
- false,
79
- :ACTION,
80
- "!",
81
- :LEX,
82
- ",",
83
- ]
84
- ### Action Table
85
- action_table = [
86
- [ nil, nil, nil, nil, 5, nil, ],
87
- [ ACC, nil, nil, nil, nil, nil, ],
88
- [ nil, nil, nil, nil, 5, nil, ],
89
- [ nil, nil, nil, nil, nil, nil, ],
90
- [ nil, nil, nil, 9, nil, 8, ],
91
- [ nil, nil, nil, nil, nil, nil, ],
92
- [ nil, nil, nil, nil, nil, nil, ],
93
- [ nil, nil, 10, nil, nil, nil, ],
94
- [ nil, nil, nil, nil, 11, nil, ],
95
- [ nil, nil, nil, nil, nil, nil, ],
96
- [ nil, nil, nil, nil, nil, nil, ],
97
- [ nil, nil, nil, nil, nil, nil, ],
98
- ]
99
- ### Default Reduce Table
100
- defred_table = [
101
- nil,
102
- nil,
103
- -1,
104
- -2,
105
- -5,
106
- -7,
107
- -3,
108
- nil,
109
- nil,
110
- -6,
111
- -4,
112
- -8,
113
- ]
114
- defred_after_shift_table = [
115
- nil,
116
- nil,
117
- nil,
118
- -2,
119
- nil,
120
- -7,
121
- -3,
122
- nil,
123
- nil,
124
- -6,
125
- -4,
126
- -8,
127
- ]
128
- ### Nonterm to Int
129
- nt2i = {
130
- :start => 0,
131
- :lexactlist => 1,
132
- :lexact => 2,
133
- :lexlist => 3,
134
- :opt_noskip => 4,
135
- }
136
- ### Int to Nonterm
137
- i2nt = [
138
- :start,
139
- :lexactlist,
140
- :lexact,
141
- :lexlist,
142
- :opt_noskip,
143
- ]
144
- ### Goto Table
145
- goto_table = [
146
- [ 1, 2, 3, 4, nil, ],
147
- [ nil, nil, nil, nil, nil, ],
148
- [ nil, nil, 6, 4, nil, ],
149
- [ nil, nil, nil, nil, nil, ],
150
- [ nil, nil, nil, nil, 7, ],
151
- [ nil, nil, nil, nil, nil, ],
152
- [ nil, nil, nil, nil, nil, ],
153
- [ nil, nil, nil, nil, nil, ],
154
- [ nil, nil, nil, nil, nil, ],
155
- [ nil, nil, nil, nil, nil, ],
156
- [ nil, nil, nil, nil, nil, ],
157
- [ nil, nil, nil, nil, nil, ],
158
- ]
159
-
160
- Tables = [ reduce_table, nparams, action_table,
161
- defred_table, defred_after_shift_table, goto_table,
162
- t2i, i2t, nt2i, i2nt ]
163
-
164
- attr_accessor :p, :m
165
- def initialize p, nparam, master = nil
166
- super()
167
- @g_parser = @p = p
168
- @master = @m = master
169
- @nparam = nparam
170
- @dect = D4LexerExtension_pre_rule_list::NVAction.new(self)
171
- init_parser
172
- end
173
-
174
-
175
- def do_parse?
176
- if @line =~ /^\s*%LEX\{\s*\Z/
177
- @line = $'
178
- true
179
- else
180
- false
181
- end
182
- end
183
-
184
-
185
- def banner
186
- "%LEX{ ... } / #{@master.class.name}"
187
- end
188
-
189
- ### Inner Code
190
- def init_parser
191
- super
192
- @code = []
193
- end
194
- def lex
195
- until @file.eof?
196
- until @line.empty?
197
- case @line
198
- when /\A\s+/
199
- #skip blank
200
- when /\A%\}\s*\Z/
201
- @line = $'
202
- yield nil,nil
203
- when /\A\/(([^\/\\]+|\\.)*)\//
204
- yield :LEX, "/\\A#{$1}/"
205
- when /\A'([^'\\]+|\\.)*'/, /\A"([^"\\]+|\\.)*"/
206
- rest = $'
207
- str = Regexp.escape($1).gsub('/', '\/')
208
- rest.match(/^/)
209
- yield :LEX, "/\\A#{str}/"
210
- when /\A\{/
211
- yield :ACTION, parse_action
212
- /./=~'.'
213
- when /\A(.)/
214
- yield $&, $&
215
- else
216
- raise RuntimeError, "must not happen #{line}"
217
- end
218
- @line = $'
219
- end
220
- getline
221
- end
222
- yield nil, nil
223
- end
224
-
225
- end
226
-
227
- ### Outer Code
228
-
229
- class D4LexerExtension_pre_rule_list::NVAction < Depager::LALR::Action #:nodoc:all
230
- include Depager::DecoratorUtils
231
-
232
- on_reduce = [
233
- nil,
234
- :_act_0,
235
- :_act_1,
236
- :_act_2,
237
- :_act_3,
238
- :_act_4,
239
- :_act_5,
240
- :_act_6,
241
- :_act_7,
242
-
243
- ]
244
- Tables = [on_reduce]
245
- def initialize inside
246
- super inside, 'NVAction'
247
- @on_reduce, = self.class::Tables
248
- init_parser
249
- end
250
-
251
-
252
- module_eval <<-'.,.,122745803340181.,.,', 'lex.dr', 47
253
- def _act_0 val
254
- _lexactlist, = *val
255
-
256
- g_parser.optinner << %{
257
- def lex
258
- begin
259
- until @line.empty?
260
- case @line
261
- #{ _lexactlist }
262
- else
263
- raise RuntimeError, "must not happen \#{@line}"
264
- end
265
- end
266
- end while @line0 = @line = getline
267
- yield nil, nil
268
- end
269
- }; #code
270
-
271
- end
272
- .,.,122745803340181.,.,
273
-
274
- module_eval <<-'.,.,122745803321867.,.,', 'lex.dr', 65
275
- def _act_1 val
276
- _lexact, = *val
277
- _lexact
278
-
279
- end
280
- .,.,122745803321867.,.,
281
-
282
- module_eval <<-'.,.,122745803341492.,.,', 'lex.dr', 66
283
- def _act_2 val
284
- _lexactlist, _lexact, = *val
285
- _lexactlist << _lexact
286
-
287
- end
288
- .,.,122745803341492.,.,
289
-
290
- module_eval <<-'.,.,1227458033110.,.,', 'lex.dr', 70
291
- def _act_3 val
292
- _lexlist, _opt_noskip, _ACTION, = *val
293
-
294
- %{
295
- when #{_lexlist.join(', ')}
296
- #{ _opt_noskip ? '#' : "@oldline = @line; @line = $'" }
297
- #{ _ACTION }
298
- }; #code
299
-
300
- end
301
- .,.,1227458033110.,.,
302
-
303
- module_eval <<-'.,.,122745803341618.,.,', 'lex.dr', 79
304
- def _act_4 val
305
- false
306
-
307
- end
308
- .,.,122745803341618.,.,
309
-
310
- module_eval <<-'.,.,122745803352625.,.,', 'lex.dr', 80
311
- def _act_5 val
312
- _, = *val
313
- true
314
-
315
- end
316
- .,.,122745803352625.,.,
317
-
318
- module_eval <<-'.,.,122745803357424.,.,', 'lex.dr', 83
319
- def _act_6 val
320
- _LEX, = *val
321
- [ _LEX ]
322
-
323
- end
324
- .,.,122745803357424.,.,
325
-
326
- module_eval <<-'.,.,122745803338595.,.,', 'lex.dr', 84
327
- def _act_7 val
328
- _lexlist, _, _LEX, = *val
329
- _lexlist << _LEX
330
-
331
- end
332
- .,.,122745803338595.,.,
333
-
334
- end
335
-
336
-
@@ -1,19 +0,0 @@
1
- require 'plugins/action.rb'
2
-
3
- class NVActionExtension < ActionExtension #:nodoc:all
4
- def modify_action_code code
5
- let_code = ""
6
- if @g_parser.rhsni.size > 0
7
- rhs = @g_parser.rhsni.sort_by{|k,v| v}
8
- let_code = rhs.map do |name, _|
9
- if name =~ /[a-zA-Z][a-zA-Z0-9_]*/
10
- "_#{name}"
11
- else
12
- '_'
13
- end
14
- end
15
- let_code = " #{let_code.join(', ')}, = *val \n"
16
- end
17
- return let_code << code, 1
18
- end
19
- end