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,431 +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
-
12
- ### Reduce Table
13
- reduce_table = [
14
- [ -1, 1 ], # ( 0) $start : expr
15
- [ 0, 3 ], # ( 1) expr : expr '+' expr
16
- [ 0, 3 ], # ( 2) expr : expr '-' expr
17
- [ 0, 3 ], # ( 3) expr : expr '*' expr
18
- [ 0, 3 ], # ( 4) expr : expr '/' expr
19
- [ 0, 3 ], # ( 5) expr : '(' expr ')'
20
- [ 0, 1 ], # ( 6) expr : NUM
21
- ]
22
- ### Extension Params
23
- nparams = {
24
- 'NVAction' => 2,
25
- }
26
- ### Term to Int
27
- t2i = {
28
- nil => 0,
29
- false => 1,
30
- "+" => 2,
31
- "-" => 3,
32
- "*" => 4,
33
- "/" => 5,
34
- "(" => 6,
35
- ")" => 7,
36
- :NUM => 8,
37
- }
38
- ### Int to Term
39
- i2t = [
40
- nil,
41
- false,
42
- "+",
43
- "-",
44
- "*",
45
- "/",
46
- "(",
47
- ")",
48
- :NUM,
49
- ]
50
- ### Action Table
51
- action_table = [
52
- [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
53
- [ ACC, nil, 7, 4, 5, 6, nil, nil, nil, ],
54
- [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
55
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
56
- [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
57
- [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
58
- [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
59
- [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
60
- [ nil, nil, 7, 4, 5, 6, nil, 13, nil, ],
61
- [ nil, nil, nil, nil, 5, 6, nil, nil, nil, ],
62
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
63
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
64
- [ nil, nil, nil, nil, 5, 6, nil, nil, nil, ],
65
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
66
- ]
67
- ### Default Reduce Table
68
- defred_table = [
69
- nil,
70
- nil,
71
- nil,
72
- -6,
73
- nil,
74
- nil,
75
- nil,
76
- nil,
77
- nil,
78
- -2,
79
- -3,
80
- -4,
81
- -1,
82
- -5,
83
- ]
84
- defred_after_shift_table = [
85
- nil,
86
- nil,
87
- nil,
88
- -6,
89
- nil,
90
- nil,
91
- nil,
92
- nil,
93
- nil,
94
- nil,
95
- -3,
96
- -4,
97
- nil,
98
- -5,
99
- ]
100
- ### Nonterm to Int
101
- nt2i = {
102
- :expr => 0,
103
- }
104
- ### Int to Nonterm
105
- i2nt = [
106
- :expr,
107
- ]
108
- ### Goto Table
109
- goto_table = [
110
- [ 1, ],
111
- [ nil, ],
112
- [ 8, ],
113
- [ nil, ],
114
- [ 9, ],
115
- [ 10, ],
116
- [ 11, ],
117
- [ 12, ],
118
- [ nil, ],
119
- [ nil, ],
120
- [ nil, ],
121
- [ nil, ],
122
- [ nil, ],
123
- [ nil, ],
124
- ]
125
-
126
-
127
- alias orig_error error
128
- def error
129
- orig_error
130
- warn "current state: #{StateInfo[@stack.last]}"
131
- end
132
-
133
- ### States
134
- StateInfo = [
135
- <<'----------',
136
- I000 =
137
- ( 0) $start : _ expr
138
-
139
- '(' shift, and goto to state 2
140
- NUM shift, and goto to state 3
141
-
142
-
143
- ----------
144
-
145
- <<'----------',
146
- I001 =
147
- ( 0) $start : expr _
148
- ( 1) expr : expr _ '+' expr
149
- ( 2) expr : expr _ '-' expr
150
- ( 3) expr : expr _ '*' expr
151
- ( 4) expr : expr _ '/' expr
152
-
153
- '+' shift, and goto to state 7
154
- '-' shift, and goto to state 4
155
- '*' shift, and goto to state 5
156
- '/' shift, and goto to state 6
157
-
158
-
159
- $end accept
160
-
161
- ----------
162
-
163
- <<'----------',
164
- I002 =
165
- ( 5) expr : '(' _ expr ')'
166
-
167
- '(' shift, and goto to state 2
168
- NUM shift, and goto to state 3
169
-
170
-
171
- ----------
172
-
173
- <<'----------',
174
- I003 =
175
- ( 6) expr : NUM _
176
-
177
-
178
- $default reduce using rule 6 (expr) [after shift]
179
-
180
- ----------
181
-
182
- <<'----------',
183
- I004 =
184
- ( 2) expr : expr '-' _ expr
185
-
186
- '(' shift, and goto to state 2
187
- NUM shift, and goto to state 3
188
-
189
-
190
- ----------
191
-
192
- <<'----------',
193
- I005 =
194
- ( 3) expr : expr '*' _ expr
195
-
196
- '(' shift, and goto to state 2
197
- NUM shift, and goto to state 3
198
-
199
-
200
- ----------
201
-
202
- <<'----------',
203
- I006 =
204
- ( 4) expr : expr '/' _ expr
205
-
206
- '(' shift, and goto to state 2
207
- NUM shift, and goto to state 3
208
-
209
-
210
- ----------
211
-
212
- <<'----------',
213
- I007 =
214
- ( 1) expr : expr '+' _ expr
215
-
216
- '(' shift, and goto to state 2
217
- NUM shift, and goto to state 3
218
-
219
-
220
- ----------
221
-
222
- <<'----------',
223
- I008 =
224
- ( 5) expr : '(' expr _ ')'
225
- ( 1) expr : expr _ '+' expr
226
- ( 2) expr : expr _ '-' expr
227
- ( 3) expr : expr _ '*' expr
228
- ( 4) expr : expr _ '/' expr
229
-
230
- '+' shift, and goto to state 7
231
- '-' shift, and goto to state 4
232
- '*' shift, and goto to state 5
233
- '/' shift, and goto to state 6
234
- ')' shift, and goto to state 13
235
-
236
-
237
- ----------
238
-
239
- <<'----------',
240
- I009 =
241
- ( 2) expr : expr '-' expr _
242
- ( 1) expr : expr _ '+' expr
243
- ( 2) expr : expr _ '-' expr
244
- ( 3) expr : expr _ '*' expr
245
- ( 4) expr : expr _ '/' expr
246
-
247
- '*' shift, and goto to state 5
248
- '/' shift, and goto to state 6
249
-
250
- $default reduce using rule 2 (expr)
251
-
252
- ----------
253
-
254
- <<'----------',
255
- I010 =
256
- ( 3) expr : expr '*' expr _
257
- ( 1) expr : expr _ '+' expr
258
- ( 2) expr : expr _ '-' expr
259
- ( 3) expr : expr _ '*' expr
260
- ( 4) expr : expr _ '/' expr
261
-
262
-
263
- $default reduce using rule 3 (expr) [after shift]
264
-
265
- ----------
266
-
267
- <<'----------',
268
- I011 =
269
- ( 4) expr : expr '/' expr _
270
- ( 1) expr : expr _ '+' expr
271
- ( 2) expr : expr _ '-' expr
272
- ( 3) expr : expr _ '*' expr
273
- ( 4) expr : expr _ '/' expr
274
-
275
-
276
- $default reduce using rule 4 (expr) [after shift]
277
-
278
- ----------
279
-
280
- <<'----------',
281
- I012 =
282
- ( 1) expr : expr '+' expr _
283
- ( 1) expr : expr _ '+' expr
284
- ( 2) expr : expr _ '-' expr
285
- ( 3) expr : expr _ '*' expr
286
- ( 4) expr : expr _ '/' expr
287
-
288
- '*' shift, and goto to state 5
289
- '/' shift, and goto to state 6
290
-
291
- $default reduce using rule 1 (expr)
292
-
293
- ----------
294
-
295
- <<'----------',
296
- I013 =
297
- ( 5) expr : '(' expr ')' _
298
-
299
-
300
- $default reduce using rule 5 (expr) [after shift]
301
-
302
- ----------
303
- ]
304
-
305
-
306
- Tables = [ reduce_table, nparams, action_table,
307
- defred_table, defred_after_shift_table, goto_table,
308
- t2i, i2t, nt2i, i2nt ]
309
-
310
- def self.createDecoratedParser
311
- D4TinyCalc::NVAction.new(TinyCalc.new())
312
- end
313
-
314
- ### Inner Code
315
-
316
- def lex
317
- begin
318
- until @line.empty?
319
- case @line
320
-
321
- when /\A\s+/, /\A\#.*/
322
- @oldline = @line; @line = $'
323
-
324
-
325
-
326
- when /\A[1-9][0-9]*/
327
- @oldline = @line; @line = $'
328
- yield token(:NUM, $&.to_i)
329
-
330
-
331
- when /\A./
332
- @oldline = @line; @line = $'
333
- yield token($&, $&)
334
-
335
-
336
- else
337
- raise RuntimeError, "must not happen #{@line}"
338
- end
339
- end
340
- end while @line0 = @line = getline
341
- yield nil, nil
342
- end
343
-
344
- end
345
-
346
- ### Outer Code
347
-
348
- class D4TinyCalc::NVAction < Depager::LALR::Action #:nodoc:all
349
- include Depager::DecoratorUtils
350
-
351
- on_reduce = [
352
- nil,
353
- :_act_0,
354
- :_act_1,
355
- :_act_2,
356
- :_act_3,
357
- :_act_4,
358
- :_act_5,
359
-
360
- ]
361
- Tables = [on_reduce]
362
- def initialize inside
363
- super inside, 'NVAction'
364
- @on_reduce, = self.class::Tables
365
- init_parser
366
- end
367
-
368
-
369
- module_eval <<-'.,.,122745803936127.,.,', 'sample_calc/calc_prec.nvaction.dr', 18
370
- def _act_0 val
371
- _left, _, _right, = *val
372
- _left + _right
373
-
374
- end
375
- .,.,122745803936127.,.,
376
-
377
- module_eval <<-'.,.,122745803916018.,.,', 'sample_calc/calc_prec.nvaction.dr', 19
378
- def _act_1 val
379
- _left, _, _right, = *val
380
- _left - _right
381
-
382
- end
383
- .,.,122745803916018.,.,
384
-
385
- module_eval <<-'.,.,122745803947193.,.,', 'sample_calc/calc_prec.nvaction.dr', 20
386
- def _act_2 val
387
- _left, _, _right, = *val
388
- _left * _right
389
-
390
- end
391
- .,.,122745803947193.,.,
392
-
393
- module_eval <<-'.,.,122745803925953.,.,', 'sample_calc/calc_prec.nvaction.dr', 21
394
- def _act_3 val
395
- _left, _, _right, = *val
396
- _left / _right
397
-
398
- end
399
- .,.,122745803925953.,.,
400
-
401
- module_eval <<-'.,.,122745803965385.,.,', 'sample_calc/calc_prec.nvaction.dr', 22
402
- def _act_4 val
403
- _, _expr, _, = *val
404
- _expr
405
-
406
- end
407
- .,.,122745803965385.,.,
408
-
409
- module_eval <<-'.,.,12274580397259.,.,', 'sample_calc/calc_prec.nvaction.dr', 23
410
- def _act_5 val
411
- _NUM, = *val
412
- _NUM.value
413
-
414
- end
415
- .,.,12274580397259.,.,
416
-
417
- end
418
-
419
-
420
- def createDecoratedTinyCalc
421
- D4TinyCalc::NVAction.new(TinyCalc.new())
422
- end
423
-
424
- ### main
425
- if __FILE__ == $0
426
- ### Main Code
427
- parser = createDecoratedTinyCalc
428
- r, = parser.parse(STDIN)
429
- puts r
430
-
431
- end
@@ -1,303 +0,0 @@
1
-
2
- begin; require 'rubygems'; rescue Exception; end
3
- require 'depager/parser.rb'
4
-
5
-
6
- module Depager::DecoratorUtils; end
7
- module D4StatefulLexerTest1; end
8
-
9
- class StatefulLexerTest1 < Depager::LALR::Basis
10
-
11
-
12
- ### Reduce Table
13
- reduce_table = [
14
- [ -1, 1 ], # ( 0) $start : expr
15
- [ 0, 4 ], # ( 1) expr : expr '/' __expr_0_2__ fact
16
- [ 0, 1 ], # ( 2) expr : fact
17
- [ 2, 0 ], # ( 3) __expr_0_2__ :
18
- [ 1, 1 ], # ( 4) fact : REGEXP
19
- ]
20
- ### Extension Params
21
- nparams = {
22
- 'NVAction' => 3,
23
- 'StatefulLexer' => 2,
24
- }
25
- ### Term to Int
26
- t2i = {
27
- nil => 0,
28
- false => 1,
29
- "/" => 2,
30
- :REGEXP => 3,
31
- }
32
- ### Int to Term
33
- i2t = [
34
- nil,
35
- false,
36
- "/",
37
- :REGEXP,
38
- ]
39
- ### Action Table
40
- action_table = [
41
- [ nil, nil, nil, 2, ],
42
- [ ACC, nil, 4, nil, ],
43
- [ nil, nil, nil, nil, ],
44
- [ nil, nil, nil, nil, ],
45
- [ nil, nil, nil, nil, ],
46
- [ nil, nil, nil, 2, ],
47
- [ nil, nil, nil, nil, ],
48
- ]
49
- ### Default Reduce Table
50
- defred_table = [
51
- nil,
52
- nil,
53
- -4,
54
- -2,
55
- -3,
56
- nil,
57
- -1,
58
- ]
59
- defred_after_shift_table = [
60
- nil,
61
- nil,
62
- -4,
63
- -2,
64
- -3,
65
- nil,
66
- -1,
67
- ]
68
- ### Nonterm to Int
69
- nt2i = {
70
- :expr => 0,
71
- :fact => 1,
72
- :__expr_0_2__ => 2,
73
- }
74
- ### Int to Nonterm
75
- i2nt = [
76
- :expr,
77
- :fact,
78
- :__expr_0_2__,
79
- ]
80
- ### Goto Table
81
- goto_table = [
82
- [ 1, 3, nil, ],
83
- [ nil, nil, nil, ],
84
- [ nil, nil, nil, ],
85
- [ nil, nil, nil, ],
86
- [ nil, nil, 5, ],
87
- [ nil, 6, nil, ],
88
- [ nil, nil, nil, ],
89
- ]
90
-
91
-
92
- alias orig_error error
93
- def error
94
- orig_error
95
- warn "current state: #{StateInfo[@stack.last]}"
96
- end
97
-
98
- ### States
99
- StateInfo = [
100
- <<'----------',
101
- I000 =
102
- ( 0) $start : _ expr
103
-
104
- REGEXP shift, and goto to state 2
105
-
106
-
107
- ----------
108
-
109
- <<'----------',
110
- I001 =
111
- ( 0) $start : expr _
112
- ( 1) expr : expr _ '/' __expr_0_2__ fact
113
-
114
- '/' shift, and goto to state 4
115
-
116
-
117
- $end accept
118
-
119
- ----------
120
-
121
- <<'----------',
122
- I002 =
123
- ( 4) fact : REGEXP _
124
-
125
-
126
- $default reduce using rule 4 (fact) [after shift]
127
-
128
- ----------
129
-
130
- <<'----------',
131
- I003 =
132
- ( 2) expr : fact _
133
-
134
-
135
- $default reduce using rule 2 (expr) [after shift]
136
-
137
- ----------
138
-
139
- <<'----------',
140
- I004 =
141
- ( 1) expr : expr '/' _ __expr_0_2__ fact
142
-
143
-
144
- $default reduce using rule 3 (__expr_0_2__) [after shift]
145
-
146
- ----------
147
-
148
- <<'----------',
149
- I005 =
150
- ( 1) expr : expr '/' __expr_0_2__ _ fact
151
-
152
- REGEXP shift, and goto to state 2
153
-
154
-
155
- ----------
156
-
157
- <<'----------',
158
- I006 =
159
- ( 1) expr : expr '/' __expr_0_2__ fact _
160
-
161
-
162
- $default reduce using rule 1 (expr) [after shift]
163
-
164
- ----------
165
- ]
166
-
167
-
168
- Tables = [ reduce_table, nparams, action_table,
169
- defred_table, defred_after_shift_table, goto_table,
170
- t2i, i2t, nt2i, i2nt ]
171
-
172
- def self.createDecoratedParser
173
- D4StatefulLexerTest1::StatefulLexer.new(D4StatefulLexerTest1::NVAction.new(StatefulLexerTest1.new()))
174
- end
175
-
176
- ### Inner Code
177
-
178
- def lex_START(&block)
179
- case @line
180
-
181
- when /\A\s+/
182
- @oldline = @line; @line = $'
183
-
184
-
185
-
186
- when /\A\/(([^\/\\]+|\\.)*)\//
187
- @oldline = @line; @line = $'
188
- yield token(:REGEXP, $&)
189
-
190
-
191
- when /\A./
192
- @oldline = @line; @line = $'
193
- yield token($&, $&)
194
-
195
-
196
- else
197
- raise RuntimeError, "must not happen #{@line}"
198
- end
199
- end
200
-
201
- def lex_OPMODE(&block)
202
- case @line
203
-
204
- when /\A\//
205
- @oldline = @line; @line = $'
206
- yield token($&, $&)
207
-
208
-
209
- else
210
- lex_START(&block)
211
- end
212
- end
213
-
214
- attr_accessor :lex_state, :lex_context
215
- def lex(&block)
216
- @lex_state ||= :START
217
- @lex_context ||= {}
218
- begin
219
- until @line.empty?
220
- self.send "lex_#{@lex_state}", &block
221
- end
222
- end while @line0 = @line = getline
223
- yield nil, nil
224
- end
225
-
226
- end
227
-
228
- ### Outer Code
229
-
230
- class D4StatefulLexerTest1::StatefulLexer < Depager::LALR::Action #:nodoc:all
231
- include Depager::DecoratorUtils
232
-
233
- on_reduce = [
234
- nil,
235
- nil,
236
- nil,
237
- :_lex_expr_0_2,
238
- :_lex_fact_0_1,
239
-
240
- ]
241
- Tables = [on_reduce]
242
- def initialize inside
243
- super inside, 'StatefulLexer'
244
- @on_reduce, = self.class::Tables
245
- init_parser
246
- end
247
-
248
-
249
- def _lex_expr_0_2 val
250
- @basis.lex_state = :START;warn 'MODE:->:START'
251
- end
252
-
253
- def _lex_fact_0_1 val
254
- @basis.lex_state = :OPMODE;warn 'MODE:->:OPMODE'
255
- end
256
-
257
- def afterError
258
- warn "StatefulLex: lex_state==#{@basis.lex_state}" if $MP_DEBUG
259
- end
260
-
261
- end
262
-
263
- class D4StatefulLexerTest1::NVAction < Depager::LALR::Action #:nodoc:all
264
- include Depager::DecoratorUtils
265
-
266
- on_reduce = [
267
- nil,
268
- nil,
269
- nil,
270
- nil,
271
- :_act_3,
272
-
273
- ]
274
- Tables = [on_reduce]
275
- def initialize inside
276
- super inside, 'NVAction'
277
- @on_reduce, = self.class::Tables
278
- init_parser
279
- end
280
-
281
-
282
- module_eval <<-'.,.,122745804061258.,.,', 'slex_test/divreg.slex.dr', 22
283
- def _act_3 val
284
- _REGEXP, = *val
285
- warn "REGEXP: #{_REGEXP.value}"
286
-
287
- end
288
- .,.,122745804061258.,.,
289
-
290
- end
291
-
292
-
293
- def createDecoratedStatefulLexerTest1
294
- D4StatefulLexerTest1::StatefulLexer.new(D4StatefulLexerTest1::NVAction.new(StatefulLexerTest1.new()))
295
- end
296
-
297
- ### main
298
- if __FILE__ == $0
299
- ### Main Code
300
- p = createDecoratedStatefulLexerTest1
301
- p.parse(STDIN)
302
-
303
- end