depager 0.2.3 → 0.3.0.b20160729

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 (91) hide show
  1. checksums.yaml +7 -0
  2. data/README.en +4 -19
  3. data/README.ja +42 -79
  4. data/bin/depager +42 -45
  5. data/examples/action_pl0d/pl0d.action.dr +421 -0
  6. data/examples/action_pl0d/test.pl0ds +49 -0
  7. data/examples/c89/c89.dr +493 -496
  8. data/examples/c89/test.c89 +10 -10
  9. data/examples/extension/astdf.rb +10 -0
  10. data/examples/extension/atree.dr +55 -0
  11. data/examples/{sample_calc → extension}/calc.atree.dr +42 -43
  12. data/examples/extension/calc.simple_action.dr +33 -0
  13. data/examples/extension/paction.dr +16 -15
  14. data/examples/extension/pactiontest.dr +14 -14
  15. data/examples/extension/simple_action.rb +44 -0
  16. data/examples/pl0d/pl0ds.dr +337 -334
  17. data/examples/pl0d/test.pl0ds +33 -33
  18. data/examples/rie_calc/calc.rie.dr +57 -0
  19. data/examples/rie_calc/test.calc +4 -0
  20. data/examples/rie_dcuse/dcuse.rie.dr +71 -0
  21. data/examples/rie_dcuse/test.dcuse +1 -0
  22. data/examples/rie_pl0/orig_ex/exerrdg.pl0 +44 -0
  23. data/examples/rie_pl0/orig_ex/exerrm.pl0 +19 -0
  24. data/examples/rie_pl0/orig_ex/exerrmre.pl0 +20 -0
  25. data/examples/rie_pl0/orig_ex/exerrtok.pl0 +18 -0
  26. data/examples/rie_pl0/orig_ex/exmdg.pl0 +40 -0
  27. data/examples/rie_pl0/orig_ex/exmdgwwl.pl0 +43 -0
  28. data/examples/rie_pl0/orig_ex/exmrw.pl0 +22 -0
  29. data/examples/rie_pl0/orig_ex/exmwwl.pl0 +18 -0
  30. data/examples/rie_pl0/orig_ex/exnorw.pl0 +17 -0
  31. data/examples/rie_pl0/pl0.rie.dr +450 -0
  32. data/examples/rie_pl0/test.pl0 +10 -0
  33. data/examples/sample_calc/calc.action.dr +33 -33
  34. data/examples/sample_calc/calc.ast.action.dr +65 -66
  35. data/examples/sample_calc/calc.ast.dr +55 -55
  36. data/examples/sample_calc/calc.cst.dr +45 -45
  37. data/examples/sample_calc/calc.dr +43 -43
  38. data/examples/sample_calc/calc.lex.dr +29 -29
  39. data/examples/sample_calc/{calc_prec.nvaction.dr → calc_prec.action.dr} +31 -31
  40. data/examples/slex_test/divreg.slex.dr +29 -29
  41. data/examples/slex_test/ljoin.slex.dr +36 -36
  42. data/examples/slex_test/test.divreg +1 -1
  43. data/examples/slex_test/test.ljoin +3 -3
  44. data/lib/depager.rb +582 -670
  45. data/lib/depager/grammar.rb +256 -291
  46. data/lib/depager/lr.rb +574 -579
  47. data/lib/depager/parser.rb +282 -277
  48. data/lib/depager/ruby/plugins/_rie_debug.rb +35 -0
  49. data/lib/depager/ruby/plugins/action.rb +53 -43
  50. data/lib/depager/ruby/plugins/ast.dr +364 -269
  51. data/lib/depager/ruby/plugins/ast.rb +1367 -1308
  52. data/lib/depager/ruby/plugins/cst.dr +172 -180
  53. data/lib/depager/ruby/plugins/cst.rb +587 -626
  54. data/lib/depager/ruby/plugins/lex.dr +85 -89
  55. data/lib/depager/ruby/plugins/lex.rb +310 -336
  56. data/lib/depager/ruby/plugins/rie.dr +723 -0
  57. data/lib/depager/ruby/plugins/rie.rb +1653 -0
  58. data/lib/depager/ruby/plugins/slex.dr +202 -200
  59. data/lib/depager/ruby/plugins/slex.rb +780 -817
  60. data/lib/depager/ruby/plugins/srp.rb +56 -51
  61. data/lib/depager/ruby/templates/extension_lalr_master.erb +46 -51
  62. data/lib/depager/ruby/templates/extension_lalr_slave.erb +99 -107
  63. data/lib/depager/ruby/templates/single_lalr_parser.erb +115 -117
  64. data/lib/depager/utils.rb +148 -318
  65. data/lib/depager/version.rb +4 -3
  66. metadata +52 -60
  67. data/ChangeLog +0 -16
  68. data/data/depager/pre-setup.rb +0 -3
  69. data/examples/c89/c89.tab.rb +0 -7127
  70. data/examples/pl0d/pl0ds.tab.rb +0 -2698
  71. data/examples/sample_calc/calc.action.tab.rb +0 -457
  72. data/examples/sample_calc/calc.ast.action.tab.rb +0 -749
  73. data/examples/sample_calc/calc.ast.tab.rb +0 -665
  74. data/examples/sample_calc/calc.astdf.dr +0 -54
  75. data/examples/sample_calc/calc.astdf.tab.rb +0 -672
  76. data/examples/sample_calc/calc.atree.tab.rb +0 -451
  77. data/examples/sample_calc/calc.cst.tab.rb +0 -644
  78. data/examples/sample_calc/calc.lex.tab.rb +0 -374
  79. data/examples/sample_calc/calc.nvaction.dr +0 -33
  80. data/examples/sample_calc/calc.nvaction.tab.rb +0 -465
  81. data/examples/sample_calc/calc.tab.rb +0 -365
  82. data/examples/sample_calc/calc_prec.nvaction.tab.rb +0 -431
  83. data/examples/slex_test/divreg.slex.tab.rb +0 -303
  84. data/examples/slex_test/ljoin.slex.tab.rb +0 -370
  85. data/lib/depager/ruby/plugins/_ast_tmpl.rb +0 -73
  86. data/lib/depager/ruby/plugins/astdf.rb +0 -6
  87. data/lib/depager/ruby/plugins/atree.dr +0 -55
  88. data/lib/depager/ruby/plugins/atree.rb +0 -347
  89. data/lib/depager/ruby/plugins/nvaction.rb +0 -19
  90. data/lib/depager/ruby/templates/simple.erb +0 -23
  91. data/setup.rb +0 -1585
@@ -1,89 +1,85 @@
1
- %defext LexerExtension
2
- %extend NVAction ('plugins/nvaction.rb')
3
- %decorate @NVAction
4
- #%decorate ShiftReducePrinter ('plugins/srp.rb')
5
- %param :none
6
- %hook pre_rule_list /%LEX\{\s*\Z/ skip
7
- %banner '%LEX{ ... }'
8
- %inner{
9
- def init_parser
10
- super
11
- @code = []
12
- end
13
- def lex
14
- until @file.eof?
15
- until @line.empty?
16
- case @line
17
- when /\A\s+/
18
- #skip blank
19
- when /\A%\}\s*\Z/
20
- @line = $'
21
- yield nil,nil
22
- when /\A\/(([^\/\\]+|\\.)*)\//
23
- yield :LEX, "/\\A#{$1}/"
24
- when /\A'([^'\\]+|\\.)*'/, /\A"([^"\\]+|\\.)*"/
25
- rest = $'
26
- str = Regexp.escape($1).gsub('/', '\/')
27
- rest.match(/^/)
28
- yield :LEX, "/\\A#{str}/"
29
- when /\A\{/
30
- yield :ACTION, parse_action
31
- /./=~'.'
32
- when /\A(.)/
33
- yield $&, $&
34
- else
35
- raise RuntimeError, "must not happen #{line}"
36
- end
37
- @line = $'
38
- end
39
- getline
40
- end
41
- yield nil, nil
42
- end
43
- %}
44
- %%
45
-
46
- #begin-rule
47
- start:
48
- lexactlist
49
- {
50
- g_parser.optinner << %{
51
- def lex
52
- begin
53
- until @line.empty?
54
- case @line
55
- #{ _lexactlist }
56
- else
57
- raise RuntimeError, "must not happen \#{@line}"
58
- end
59
- end
60
- end while @line0 = @line = getline
61
- yield nil, nil
62
- end
63
- }; #code
64
- }
65
- ;
66
- lexactlist:
67
- lexact { _lexact }
68
- | lexactlist lexact { _lexactlist << _lexact }
69
- ;
70
- lexact:
71
- lexlist opt_noskip ACTION
72
- {
73
- %{
74
- when #{_lexlist.join(', ')}
75
- #{ _opt_noskip ? '#' : "@oldline = @line; @line = $'" }
76
- #{ _ACTION }
77
- }; #code
78
- }
79
- ;
80
- opt_noskip:
81
- { false }
82
- | '!' { true }
83
- ;
84
- lexlist:
85
- LEX { [ _LEX ] }
86
- | lexlist ',' LEX { _lexlist << _LEX }
87
- ;
88
- #end-rule
89
- %%
1
+ %defext Depager::LexerExtension
2
+ %extend Depager::Action ('plugins/action.rb')
3
+ %decorate @Action
4
+ #%decorate Depager::LALR::ShiftReducePrinter ('plugins/srp.rb')
5
+ %expanded_code_delimiter DEPAGER_EXPANDED_CODE
6
+ %hook pre_rule_list /%LEX\{\s*\Z/ skip
7
+ %banner '%LEX{ ... }'
8
+ %inner{
9
+ def lex
10
+ until @file.eof?
11
+ until @line.empty?
12
+ case @line
13
+ when /\A\s+/
14
+ #skip blank
15
+ when /\A%\}\s*\Z/
16
+ @line = $'
17
+ yield nil,nil
18
+ when /\A\/(([^\/\\]+|\\.)*)\//
19
+ yield :LEX, "/\\A#{$1}/"
20
+ when /\A'([^'\\]+|\\.)*'/, /\A"([^"\\]+|\\.)*"/
21
+ rest = $'
22
+ str = Regexp.escape($1).gsub('/', '\/')
23
+ rest.match(/^/)
24
+ yield :LEX, "/\\A#{str}/"
25
+ when /\A\{/
26
+ yield :ACTION, parse_block
27
+ /./=~'.'
28
+ when /\A(.)/
29
+ yield $&, $&
30
+ else
31
+ raise RuntimeError, "must not happen #{line}"
32
+ end
33
+ @line = $'
34
+ end
35
+ @original_line = @line = file.gets
36
+ end
37
+ yield nil, nil
38
+ end
39
+ %}
40
+ %%
41
+
42
+ #begin-rule
43
+ start:
44
+ lexactlist
45
+ {
46
+ g_parser.inner_code << %{
47
+ def lex
48
+ begin
49
+ until @line.empty?
50
+ case @line
51
+ #{ _lexactlist }
52
+ else
53
+ raise RuntimeError, "must not happen \#{@line}"
54
+ end
55
+ end
56
+ end while @original_line = @line = file.gets
57
+ yield nil, nil
58
+ end
59
+ }; #code
60
+ }
61
+ ;
62
+ lexactlist:
63
+ lexact { _lexact }
64
+ | lexactlist lexact { _lexactlist << _lexact }
65
+ ;
66
+ lexact:
67
+ lexlist opt_noskip ACTION
68
+ {
69
+ %{
70
+ when #{_lexlist.join(', ')}
71
+ #{ _opt_noskip ? '#' : "@line = $'" }
72
+ #{ _ACTION }
73
+ }; #code
74
+ }
75
+ ;
76
+ opt_noskip:
77
+ { false }
78
+ | '!' { true }
79
+ ;
80
+ lexlist:
81
+ LEX { [ _LEX ] }
82
+ | lexlist ',' LEX { _lexlist << _LEX }
83
+ ;
84
+ #end-rule
85
+ %%
@@ -1,336 +1,310 @@
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
+ # -*- coding: utf-8 -*-
2
+
3
+ ###
4
+ ### Depager::LexerExtension - Depager Extension (master)
5
+ ###
6
+ require 'depager/parser.rb'
7
+
8
+
9
+ module Depager ; end
10
+
11
+ class Depager::LexerExtension < Depager::Extension
12
+
13
+ def initialize
14
+ @master = self
15
+ @slaves = []
16
+ end
17
+
18
+ def extension_registered g_parser
19
+ super g_parser
20
+
21
+ @slaves[0] = Depager::LexerExtension::Slave_pre_rule_list::Parser.new(g_parser, self)
22
+ g_parser.hooks[:pre_rule_list].push [@slaves[0], :do_parse]
23
+ end
24
+
25
+
26
+ end
27
+
28
+ ###
29
+ ### Depager::LexerExtension::Slave_pre_rule_list - Part of Depager Extension (slave)
30
+ ###
31
+
32
+ module Depager::LexerExtension::Slave_pre_rule_list #:nodoc:all
33
+ class Parser < Depager::LALR::Basis #:nodoc:all
34
+ include Depager::Utils::ExtensionSlaveMethods
35
+
36
+
37
+ ### Reduce Table
38
+ reduce_table = [
39
+ [ -1, 1 ],
40
+ [ 0, 1 ],
41
+ [ 1, 1 ],
42
+ [ 1, 2 ],
43
+ [ 2, 3 ],
44
+ [ 4, 0 ],
45
+ [ 4, 1 ],
46
+ [ 3, 1 ],
47
+ [ 3, 3 ],
48
+ ]
49
+ ### Term to Int
50
+ term_to_int = {
51
+ nil => 0,
52
+ false => 1,
53
+ :ACTION => 2,
54
+ "!" => 3,
55
+ :LEX => 4,
56
+ "," => 5,
57
+ }
58
+ ### Int to Term
59
+ int_to_term = [
60
+ nil,
61
+ false,
62
+ :ACTION,
63
+ "!",
64
+ :LEX,
65
+ ",",
66
+ ]
67
+ ### Action Table
68
+ action_table = [
69
+ [ nil, nil, nil, nil, 5, nil, ],
70
+ [ ACC, nil, nil, nil, nil, nil, ],
71
+ [ nil, nil, nil, nil, 5, nil, ],
72
+ [ nil, nil, nil, nil, nil, nil, ],
73
+ [ nil, nil, nil, 8, nil, 9, ],
74
+ [ nil, nil, nil, nil, nil, nil, ],
75
+ [ nil, nil, nil, nil, nil, nil, ],
76
+ [ nil, nil, 10, nil, nil, nil, ],
77
+ [ nil, nil, nil, nil, nil, nil, ],
78
+ [ nil, nil, nil, nil, 11, nil, ],
79
+ [ nil, nil, nil, nil, nil, nil, ],
80
+ [ nil, nil, nil, nil, nil, nil, ],
81
+ ]
82
+ ### Default Reduce Table
83
+ defred_table = [
84
+ nil,
85
+ nil,
86
+ -1,
87
+ -2,
88
+ -5,
89
+ -7,
90
+ -3,
91
+ nil,
92
+ -6,
93
+ nil,
94
+ -4,
95
+ -8,
96
+ ]
97
+ defred_after_shift_table = [
98
+ nil,
99
+ nil,
100
+ nil,
101
+ -2,
102
+ nil,
103
+ -7,
104
+ -3,
105
+ nil,
106
+ -6,
107
+ nil,
108
+ -4,
109
+ -8,
110
+ ]
111
+ ### Nonterm to Int
112
+ nonterm_to_int = {
113
+ :start => 0,
114
+ :lexactlist => 1,
115
+ :lexact => 2,
116
+ :lexlist => 3,
117
+ :opt_noskip => 4,
118
+ }
119
+ ### Int to Nonterm
120
+ int_to_nonterm = [
121
+ :start,
122
+ :lexactlist,
123
+ :lexact,
124
+ :lexlist,
125
+ :opt_noskip,
126
+ ]
127
+ ### Goto Table
128
+ goto_table = [
129
+ [ 1, 2, 3, 4, nil, ],
130
+ [ nil, nil, nil, nil, nil, ],
131
+ [ nil, nil, 6, 4, nil, ],
132
+ [ nil, nil, nil, nil, nil, ],
133
+ [ nil, nil, nil, nil, 7, ],
134
+ [ nil, nil, nil, nil, nil, ],
135
+ [ nil, nil, nil, nil, nil, ],
136
+ [ nil, nil, nil, nil, nil, ],
137
+ [ nil, nil, nil, nil, nil, ],
138
+ [ nil, nil, nil, nil, nil, ],
139
+ [ nil, nil, nil, nil, nil, ],
140
+ [ nil, nil, nil, nil, nil, ],
141
+ ]
142
+
143
+ Tables = [ reduce_table, action_table,
144
+ defred_table, defred_after_shift_table, goto_table,
145
+ term_to_int, int_to_term, nonterm_to_int, int_to_nonterm ]
146
+
147
+ def initialize g_parser, master
148
+ super()
149
+ @g_parser = g_parser
150
+ @d_parser = g_parser.d_parser
151
+ @master = master
152
+ @decorated = Action.new(self)
153
+ end
154
+
155
+
156
+ def do_parse?
157
+ if @line.match(/^\s*%LEX\{\s*\Z/)
158
+ @line = $'
159
+ true
160
+ else
161
+ false
162
+ end
163
+ end
164
+
165
+
166
+ def banner
167
+ "%LEX{ ... } / Depager::LexerExtension"
168
+ end
169
+
170
+ module_eval <<'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/lex.dr', 9
171
+ def lex
172
+ until @file.eof?
173
+ until @line.empty?
174
+ case @line
175
+ when /\A\s+/
176
+ #skip blank
177
+ when /\A%\}\s*\Z/
178
+ @line = $'
179
+ yield nil,nil
180
+ when /\A\/(([^\/\\]+|\\.)*)\//
181
+ yield :LEX, "/\\A#{$1}/"
182
+ when /\A'([^'\\]+|\\.)*'/, /\A"([^"\\]+|\\.)*"/
183
+ rest = $'
184
+ str = Regexp.escape($1).gsub('/', '\/')
185
+ rest.match(/^/)
186
+ yield :LEX, "/\\A#{str}/"
187
+ when /\A\{/
188
+ yield :ACTION, parse_block
189
+ /./=~'.'
190
+ when /\A(.)/
191
+ yield $&, $&
192
+ else
193
+ raise RuntimeError, "must not happen #{line}"
194
+ end
195
+ @line = $'
196
+ end
197
+ @original_line = @line = file.gets
198
+ end
199
+ yield nil, nil
200
+ end
201
+
202
+ DEPAGER_EXPANDED_CODE
203
+
204
+ end
205
+ end
206
+
207
+
208
+ class Depager::LexerExtension::Slave_pre_rule_list::Action < Depager::LALR::Action #:nodoc:all
209
+ include Depager::Utils::ExtensionSlaveDecoratorMethods
210
+
211
+ on_reduce = [
212
+ nil,
213
+ :_act_1,
214
+ :_act_2,
215
+ :_act_3,
216
+ :_act_4,
217
+ :_act_5,
218
+ :_act_6,
219
+ :_act_7,
220
+ :_act_8,
221
+
222
+ ]
223
+ Tables = [ on_reduce ]
224
+
225
+
226
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/lex.dr', 43
227
+ def _act_1 val
228
+ _lexactlist, = *val
229
+
230
+ g_parser.inner_code << %{
231
+ def lex
232
+ begin
233
+ until @line.empty?
234
+ case @line
235
+ #{ _lexactlist }
236
+ else
237
+ raise RuntimeError, "must not happen \#{@line}"
238
+ end
239
+ end
240
+ end while @original_line = @line = file.gets
241
+ yield nil, nil
242
+ end
243
+ }; #code
244
+
245
+ end
246
+ DEPAGER_EXPANDED_CODE
247
+
248
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/lex.dr', 61
249
+ def _act_2 val
250
+ _lexact, = *val
251
+ _lexact
252
+
253
+ end
254
+ DEPAGER_EXPANDED_CODE
255
+
256
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/lex.dr', 62
257
+ def _act_3 val
258
+ _lexactlist, _lexact, = *val
259
+ _lexactlist << _lexact
260
+
261
+ end
262
+ DEPAGER_EXPANDED_CODE
263
+
264
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/lex.dr', 66
265
+ def _act_4 val
266
+ _lexlist, _opt_noskip, _ACTION, = *val
267
+
268
+ %{
269
+ when #{_lexlist.join(', ')}
270
+ #{ _opt_noskip ? '#' : "@line = $'" }
271
+ #{ _ACTION }
272
+ }; #code
273
+
274
+ end
275
+ DEPAGER_EXPANDED_CODE
276
+
277
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/lex.dr', 75
278
+ def _act_5 val
279
+ false
280
+
281
+ end
282
+ DEPAGER_EXPANDED_CODE
283
+
284
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/lex.dr', 76
285
+ def _act_6 val
286
+ _, = *val
287
+ true
288
+
289
+ end
290
+ DEPAGER_EXPANDED_CODE
291
+
292
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/lex.dr', 79
293
+ def _act_7 val
294
+ _LEX, = *val
295
+ [ _LEX ]
296
+
297
+ end
298
+ DEPAGER_EXPANDED_CODE
299
+
300
+ module_eval <<-'DEPAGER_EXPANDED_CODE', 'lib/depager/ruby/plugins/lex.dr', 80
301
+ def _act_8 val
302
+ _lexlist, _, _LEX, = *val
303
+ _lexlist << _LEX
304
+
305
+ end
306
+ DEPAGER_EXPANDED_CODE
307
+
308
+
309
+ end
310
+