depager 0.2.3 → 0.3.0.b20160729

Sign up to get free protection for your applications and to get access to all the features.
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
+