depager 0.1.9 → 0.2.0

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 (63) hide show
  1. data/ChangeLog +4 -0
  2. data/bin/depager +1 -0
  3. data/data/depager/misc/depager-mode.el +35 -24
  4. data/data/depager/pre-setup.rb +3 -0
  5. data/examples/Rakefile +36 -0
  6. data/examples/c89/c89.dr +496 -0
  7. data/examples/c89/c89.tab.rb +2197 -0
  8. data/examples/c89/test.c89 +10 -0
  9. data/{data/depager/sample → examples}/extension/paction.dr +0 -0
  10. data/{data/depager/sample → examples}/extension/pactiontest.dr +0 -0
  11. data/{data/depager/sample → examples}/pl0d/pl0ds.dr +0 -0
  12. data/examples/pl0d/pl0ds.tab.rb +1702 -0
  13. data/{data/depager/sample/pl0d/pl0test.pl0 → examples/pl0d/test.pl0ds} +0 -0
  14. data/{data/depager/sample → examples}/sample_calc/calc.action.dr +0 -0
  15. data/examples/sample_calc/calc.action.tab.rb +283 -0
  16. data/{data/depager/sample → examples}/sample_calc/calc.astdf.dr +0 -0
  17. data/examples/sample_calc/calc.astdf.tab.rb +476 -0
  18. data/{data/depager/sample → examples}/sample_calc/calc.astl.action.dr +0 -0
  19. data/examples/sample_calc/calc.astl.action.tab.rb +593 -0
  20. data/{data/depager/sample → examples}/sample_calc/calc.astl.dr +0 -0
  21. data/examples/sample_calc/calc.astl.tab.rb +501 -0
  22. data/{data/depager/sample → examples}/sample_calc/calc.atree.dr +0 -0
  23. data/examples/sample_calc/calc.atree.tab.rb +277 -0
  24. data/{data/depager/sample → examples}/sample_calc/calc.cst.dr +0 -0
  25. data/examples/sample_calc/calc.cst.tab.rb +478 -0
  26. data/{data/depager/sample → examples}/sample_calc/calc.dr +0 -0
  27. data/{data/depager/sample → examples}/sample_calc/calc.lex.dr +0 -0
  28. data/examples/sample_calc/calc.lex.tab.rb +192 -0
  29. data/{data/depager/sample → examples}/sample_calc/calc.nvaction.dr +0 -0
  30. data/examples/sample_calc/calc.nvaction.tab.rb +291 -0
  31. data/examples/sample_calc/calc.tab.rb +183 -0
  32. data/{data/depager/sample → examples}/sample_calc/calc_prec.nvaction.dr +0 -0
  33. data/examples/sample_calc/calc_prec.nvaction.tab.rb +257 -0
  34. data/examples/sample_calc/test.calc +1 -0
  35. data/{data/depager/sample/slex_test/slextest1.dr → examples/slex_test/divreg.slex.dr} +3 -11
  36. data/examples/slex_test/divreg.slex.tab.rb +227 -0
  37. data/{data/depager/sample/slex_test/slextest2.dr → examples/slex_test/ljoin.slex.dr} +10 -7
  38. data/examples/slex_test/ljoin.slex.tab.rb +277 -0
  39. data/examples/slex_test/test.divreg +1 -0
  40. data/examples/slex_test/test.ljoin +3 -0
  41. data/lib/depager.rb +194 -127
  42. data/lib/depager/Rakefile +8 -4
  43. data/lib/depager/ast_base.dr +3 -3
  44. data/lib/depager/ast_base.rb +197 -144
  45. data/lib/depager/atree.rb +55 -36
  46. data/lib/depager/cst.dr +6 -4
  47. data/lib/depager/cst.rb +69 -49
  48. data/lib/depager/grammar.rb +136 -0
  49. data/lib/depager/lex.dr +22 -8
  50. data/lib/depager/lex.rb +94 -53
  51. data/lib/depager/lr.rb +101 -167
  52. data/lib/depager/parse_action.rb +1 -1
  53. data/lib/depager/parser.rb +34 -7
  54. data/lib/depager/slex.dr +76 -36
  55. data/lib/depager/slex.rb +345 -151
  56. data/lib/depager/srp.rb +3 -2
  57. data/lib/depager/template/extension_lalr_slave.erb +1 -1
  58. data/lib/depager/template/single_lalr_parser.erb +1 -1
  59. data/lib/depager/utils.rb +2 -1
  60. data/lib/depager/version.rb +2 -2
  61. metadata +42 -28
  62. data/Manifest.txt +0 -52
  63. data/lib/depager/psrtmpl.rb +0 -33
data/lib/depager/slex.rb CHANGED
@@ -61,30 +61,45 @@ class StatefulLexerExtension #:nodoc:all
61
61
  def postRhs
62
62
  j = 0
63
63
  rhs = g_parser.rhs
64
- @ins.each do |i, m|
64
+ @ins.each do |i, option_list, debug|
65
65
  state_name = "#{lhs_name}_#{nrhs}_#{i}"
66
+ m_name = "_lex_#{state_name}"
66
67
  if i != rhs.size
67
- isym = g_parser.add_nonterm("__#{state_name}__".intern)
68
- new_rule = Rule[isym, []]
69
- val = ( ":_lex_#{state_name}" )
70
- @addition << [ new_rule, rhs, val, i+j, isym ]
68
+ nt_name = "__#{state_name}__"
69
+ isym = g_parser.add_nonterm(nt_name)
70
+ g_parser.rhs_insert_sym(i+j, isym, nt_name)
71
+ @addition << [ isym, m_name ]
71
72
  j += 1
72
73
  else
73
- @on_reduce[nrules] = ( ":_lex_#{state_name}" )
74
+ @on_reduce[nrules] = ':'+m_name
75
+ end
76
+
77
+ codes = option_list.map do |k, m|
78
+ case k
79
+ when :GOTO
80
+ "@basis.lex_state = #{m}" <<
81
+ (debug ? ";warn 'MODE:->#{m}'" : '')
82
+ when :ADD
83
+ "@basis.lex_context[#{m}] = true" <<
84
+ (debug ? ";warn 'CONTEXT:+#{m}/\#{@context.inspect}'" : '')
85
+ when :SUB
86
+ "@basis.lex_context.delete #{m}" <<
87
+ (debug ? ";warn 'CONTEXT:-#{m}'/\#{@context.inspect}" : '')
88
+ else
89
+ end
74
90
  end
75
91
  @optouter.push << %{
76
- def _lex_#{lhs_name}_#{nrhs}_#{i} val
77
- @basis.lex_state = #{m}
92
+ def #{m_name} val
93
+ #{codes.join("\n ")}
78
94
  end
79
95
  }
80
96
  end
81
97
  @ins.clear
82
98
  end
83
99
  def postRhsList
84
- @addition.each do |new_rule, rhs, val, pos, isym|
85
- g_parser.g << new_rule
86
- rhs.insert(pos, isym)
87
- @on_reduce[nrules] = val
100
+ @addition.each do |isym, m_name|
101
+ g_parser.add_rule isym, []
102
+ @on_reduce[nrules] = ':'+m_name
88
103
  end
89
104
  @addition.clear
90
105
  end
@@ -99,7 +114,7 @@ end
99
114
  module D4StatefulLexerExtension_prerulelist #:nodoc:all
100
115
  end
101
116
 
102
- class StatefulLexerExtension_prerulelist < Basis #:nodoc:all
117
+ class StatefulLexerExtension_prerulelist < Depager::LALR::Basis #:nodoc:all
103
118
  include Depager::ExtensionUtils
104
119
 
105
120
  include ActionParser
@@ -115,7 +130,9 @@ class StatefulLexerExtension_prerulelist < Basis #:nodoc:all
115
130
  [ 4, 2 ],
116
131
  [ 3, 1 ],
117
132
  [ 3, 2 ],
118
- [ 5, 2 ],
133
+ [ 5, 3 ],
134
+ [ 7, 0 ],
135
+ [ 7, 1 ],
119
136
  [ 6, 1 ],
120
137
  [ 6, 3 ],
121
138
  ]
@@ -132,8 +149,9 @@ class StatefulLexerExtension_prerulelist < Basis #:nodoc:all
132
149
  ">" => 4,
133
150
  ":" => 5,
134
151
  :ACTION => 6,
135
- :LEX => 7,
136
- "," => 8,
152
+ "!" => 7,
153
+ :LEX => 8,
154
+ "," => 9,
137
155
  }
138
156
  ### Int to Term
139
157
  i2t = [
@@ -144,29 +162,32 @@ class StatefulLexerExtension_prerulelist < Basis #:nodoc:all
144
162
  ">",
145
163
  ":",
146
164
  :ACTION,
165
+ "!",
147
166
  :LEX,
148
167
  ",",
149
168
  ]
150
169
  ### Action Table
151
170
  action_table = [
152
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
153
- [ ACC, nil, nil, nil, nil, nil, nil, nil, nil, ],
154
- [ nil, nil, 4, nil, nil, nil, nil, nil, nil, ],
155
- [ nil, nil, nil, nil, nil, nil, nil, 7, nil, ],
156
- [ nil, nil, nil, 9, nil, nil, nil, nil, nil, ],
157
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
158
- [ nil, nil, nil, nil, nil, nil, 11, nil, 10, ],
159
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
160
- [ nil, nil, nil, nil, nil, nil, nil, 7, nil, ],
161
- [ nil, nil, nil, nil, nil, 14, nil, nil, nil, ],
162
- [ nil, nil, nil, nil, nil, nil, nil, 15, nil, ],
163
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
164
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
165
- [ nil, nil, nil, nil, 16, nil, nil, nil, nil, ],
166
- [ nil, nil, nil, 17, nil, nil, nil, nil, nil, ],
167
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
168
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
169
- [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
171
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
172
+ [ ACC, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
173
+ [ nil, nil, 3, nil, nil, nil, nil, nil, nil, nil, ],
174
+ [ nil, nil, nil, 5, nil, nil, nil, nil, nil, nil, ],
175
+ [ nil, nil, nil, nil, nil, nil, nil, nil, 6, nil, ],
176
+ [ nil, nil, nil, nil, nil, 11, nil, nil, nil, nil, ],
177
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
178
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
179
+ [ nil, nil, nil, nil, nil, nil, nil, 12, nil, 13, ],
180
+ [ nil, nil, nil, nil, nil, nil, nil, nil, 6, nil, ],
181
+ [ nil, nil, nil, nil, 16, nil, nil, nil, nil, nil, ],
182
+ [ nil, nil, nil, 17, nil, nil, nil, nil, nil, nil, ],
183
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
184
+ [ nil, nil, nil, nil, nil, nil, nil, nil, 18, nil, ],
185
+ [ nil, nil, nil, nil, nil, nil, 19, nil, nil, nil, ],
186
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
187
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
188
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
189
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
190
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
170
191
  ]
171
192
  ### Default Reduce Table
172
193
  defred_table = [
@@ -175,19 +196,21 @@ class StatefulLexerExtension_prerulelist < Basis #:nodoc:all
175
196
  -1,
176
197
  nil,
177
198
  nil,
199
+ -5,
200
+ -12,
178
201
  -7,
179
- nil,
180
202
  -10,
181
203
  -3,
182
- -5,
183
- nil,
184
- -9,
185
- -8,
186
204
  nil,
187
205
  nil,
188
206
  -11,
207
+ nil,
208
+ nil,
209
+ -8,
189
210
  -4,
190
211
  -6,
212
+ -13,
213
+ -9,
191
214
  ]
192
215
  defred_after_shift_table = [
193
216
  -2,
@@ -195,19 +218,21 @@ class StatefulLexerExtension_prerulelist < Basis #:nodoc:all
195
218
  nil,
196
219
  nil,
197
220
  nil,
221
+ nil,
222
+ -12,
198
223
  -7,
199
224
  nil,
200
- -10,
201
225
  nil,
202
226
  nil,
203
227
  nil,
204
- -9,
205
- -8,
228
+ -11,
206
229
  nil,
207
230
  nil,
208
- -11,
231
+ -8,
209
232
  -4,
210
233
  -6,
234
+ -13,
235
+ -9,
211
236
  ]
212
237
  ### Nonterm to Int
213
238
  nt2i = {
@@ -217,7 +242,8 @@ class StatefulLexerExtension_prerulelist < Basis #:nodoc:all
217
242
  :lexactlist => 3,
218
243
  :opt_super => 4,
219
244
  :lexact => 5,
220
- :lexlist => 6,
245
+ :lexlist => 6,
246
+ :opt_noskip => 7,
221
247
  }
222
248
  ### Int to Nonterm
223
249
  i2nt = [
@@ -228,27 +254,30 @@ class StatefulLexerExtension_prerulelist < Basis #:nodoc:all
228
254
  :opt_super,
229
255
  :lexact,
230
256
  :lexlist,
257
+ :opt_noskip,
231
258
  ]
232
259
  ### Goto Table
233
260
  goto_table = [
234
- [ 1, 2, nil, nil, nil, nil, nil, ],
235
- [ nil, nil, nil, nil, nil, nil, nil, ],
236
- [ nil, nil, 3, nil, nil, nil, nil, ],
237
- [ nil, nil, nil, 8, nil, 5, 6, ],
238
- [ nil, nil, nil, nil, nil, nil, nil, ],
239
- [ nil, nil, nil, nil, nil, nil, nil, ],
240
- [ nil, nil, nil, nil, nil, nil, nil, ],
241
- [ nil, nil, nil, nil, nil, nil, nil, ],
242
- [ nil, nil, nil, nil, nil, 12, 6, ],
243
- [ nil, nil, nil, nil, 13, nil, nil, ],
244
- [ nil, nil, nil, nil, nil, nil, nil, ],
245
- [ nil, nil, nil, nil, nil, nil, nil, ],
246
- [ nil, nil, nil, nil, nil, nil, nil, ],
247
- [ nil, nil, nil, nil, nil, nil, nil, ],
248
- [ nil, nil, nil, nil, nil, nil, nil, ],
249
- [ nil, nil, nil, nil, nil, nil, nil, ],
250
- [ nil, nil, nil, nil, nil, nil, nil, ],
251
- [ nil, nil, nil, nil, nil, nil, nil, ],
261
+ [ 1, 2, nil, nil, nil, nil, nil, nil, ],
262
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
263
+ [ nil, nil, 4, nil, nil, nil, nil, nil, ],
264
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
265
+ [ nil, nil, nil, 9, nil, 7, 8, nil, ],
266
+ [ nil, nil, nil, nil, 10, nil, nil, nil, ],
267
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
268
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
269
+ [ nil, nil, nil, nil, nil, nil, nil, 14, ],
270
+ [ nil, nil, nil, nil, nil, 15, 8, nil, ],
271
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
272
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
273
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
274
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
275
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
276
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
277
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
278
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
279
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
280
+ [ nil, nil, nil, nil, nil, nil, nil, nil, ],
252
281
  ]
253
282
 
254
283
  Tables = [ reduce_table, nparams, action_table,
@@ -284,28 +313,52 @@ class StatefulLexerExtension_prerulelist < Basis #:nodoc:all
284
313
 
285
314
  def lex
286
315
  begin
287
- until @line.empty? do
316
+ until @line.empty?
288
317
  case @line
289
- when /\A\s+/, /\A#.*\Z/
290
-
291
- when /\A[A-Z]+/
292
- yield _Token(:ID, $&)
293
- when /\A\%\}\s*\Z/
294
- @line = $'; yield nil,nil
295
- when /\A\/(([^\/\\]+|\\.)*)\//, /\A'([^'\\]+|\\.)*\'/
296
- yield _Token(:LEX, "/\\A#{$1}/")
297
- when /\A\{/
298
- ln = lineno; yield :ACTION, Token[parse_action, ln]; //=~''
299
- when /\A./
300
- yield _Token($&, $&)
318
+
319
+ when /\A\s+/, /\A#.*\Z/
320
+ @oldline = @line; @line = $'
321
+
322
+
323
+
324
+ when /\A[A-Z]+/
325
+ @oldline = @line; @line = $'
326
+ yield _Token(:ID, $&)
327
+
328
+
329
+ when /\A\%\}\s*\Z/
330
+ @oldline = @line; @line = $'
331
+ yield nil,nil
332
+
333
+
334
+ when /\A\/(([^\/\\]+|\\.)*)\//
335
+ @oldline = @line; @line = $'
336
+ yield _Token(:LEX, "/\\A#{$1}/")
337
+
338
+
339
+ when /\A'([^'\\]+|\\.)*'/, /\A"([^"\\]+|\\.)*"/
340
+ @oldline = @line; @line = $'
341
+
342
+ yield _Token(:LEX, "/\\A#{Regexp.escape($1).gsub('/', '\/')}/")
343
+
344
+
345
+ when /\A\{/
346
+ #
347
+
348
+ _lineno = lineno
349
+ yield _Token(:ACTION, parse_action, _lineno)
350
+
351
+
352
+ when /\A./
353
+ @oldline = @line; @line = $'
354
+ yield _Token($&, $&)
301
355
 
356
+
302
357
  else
303
358
  raise RuntimeError, "must not happen #{@line}"
304
359
  end
305
- @oldline = @line
306
- @line = $'
307
360
  end
308
- end while @line = getline
361
+ end while @line0 = @line = getline
309
362
  yield nil, nil
310
363
  end
311
364
 
@@ -313,7 +366,7 @@ end
313
366
 
314
367
  ### Outer Code
315
368
 
316
- class D4StatefulLexerExtension_prerulelist::NVAction < Depager::Action #:nodoc:all
369
+ class D4StatefulLexerExtension_prerulelist::NVAction < Depager::LALR::Action #:nodoc:all
317
370
  include Depager::DecoratorUtils
318
371
  include ActionParser
319
372
 
@@ -330,6 +383,8 @@ class D4StatefulLexerExtension_prerulelist::NVAction < Depager::Action #:nodoc:a
330
383
  :_act_8,
331
384
  :_act_9,
332
385
  :_act_10,
386
+ :_act_11,
387
+ :_act_12,
333
388
 
334
389
  ]
335
390
  Tables = [on_reduce]
@@ -340,138 +395,154 @@ class D4StatefulLexerExtension_prerulelist::NVAction < Depager::Action #:nodoc:a
340
395
  end
341
396
 
342
397
 
343
- module_eval <<-'.,.,118028145945879.,.,', 'slex.dr', 73
398
+ module_eval <<-'.,.,118754107818868.,.,', 'slex.dr', 96
344
399
  def _act_0 val
345
400
  _mode_list = *val
346
401
 
347
402
  ll = ''
348
403
  _mode_list.each do |m, s, l|
349
- elsec = if s
350
- "_rest = lex_#{s}(&block)"
351
- else
352
- %!raise RuntimeError, "must not happen \#{@line}"!
353
- end
404
+ else_code = if s
405
+ "lex_#{s}(&block)"
406
+ else
407
+ 'raise RuntimeError, "must not happen #{@line}"'
408
+ end
354
409
  ll << %{
355
410
  def lex_#{m}(&block)
356
- _rest = ''
357
411
  case @line
358
412
  #{l.map{|i| ' '*4+i}}
359
413
  else
360
- #{elsec}
414
+ #{else_code}
361
415
  end
362
- return _rest
363
416
  end
364
417
  }; #code
365
418
  end
366
419
  g_parser.optinner << ll << %{
367
- attr_accessor :lex_state
420
+ attr_accessor :lex_state, :lex_context
368
421
  def lex(&block)
369
- @lex_state ||= :START
422
+ @lex_state ||= :START
423
+ @lex_context ||= {}
370
424
  begin
371
425
  until @line.empty?
372
- @line = self.send "lex_\#{@lex_state}", &block
426
+ self.send "lex_\#{@lex_state}", &block
373
427
  end
374
- end while @line = getline
428
+ end while @line0 = @line = getline
375
429
  yield nil, nil
376
430
  end
377
431
  }; #code
378
432
 
379
433
  end
380
434
 
381
- .,.,118028145945879.,.,
435
+ .,.,118754107818868.,.,
382
436
 
383
- module_eval <<-'.,.,118028145964322.,.,', 'slex.dr', 108
437
+ module_eval <<-'.,.,118754107863583.,.,', 'slex.dr', 130
384
438
  def _act_1 val
385
439
  [ ]
386
440
 
387
441
  end
388
442
 
389
- .,.,118028145964322.,.,
443
+ .,.,118754107863583.,.,
390
444
 
391
- module_eval <<-'.,.,118028145964390.,.,', 'slex.dr', 109
445
+ module_eval <<-'.,.,118754107817072.,.,', 'slex.dr', 131
392
446
  def _act_2 val
393
447
  _mode_list, _mode, _lexactlist = *val
394
448
  _mode_list << [_mode[0], _mode[1], _lexactlist]
395
449
 
396
450
  end
397
451
 
398
- .,.,118028145964390.,.,
452
+ .,.,118754107817072.,.,
399
453
 
400
- module_eval <<-'.,.,118028145932066.,.,', 'slex.dr', 112
454
+ module_eval <<-'.,.,118754107816434.,.,', 'slex.dr', 134
401
455
  def _act_3 val
402
456
  _, _ID, _opt_super, _ = *val
403
457
  [ _ID.value, _opt_super ]
404
458
 
405
459
  end
406
460
 
407
- .,.,118028145932066.,.,
461
+ .,.,118754107816434.,.,
408
462
 
409
- module_eval <<-'.,.,118028145910814.,.,', 'slex.dr', 115
463
+ module_eval <<-'.,.,118754107840777.,.,', 'slex.dr', 137
410
464
  def _act_4 val
411
465
  nil
412
466
 
413
467
  end
414
468
 
415
- .,.,118028145910814.,.,
469
+ .,.,118754107840777.,.,
416
470
 
417
- module_eval <<-'.,.,118028145954649.,.,', 'slex.dr', 116
471
+ module_eval <<-'.,.,118754107819808.,.,', 'slex.dr', 138
418
472
  def _act_5 val
419
473
  _, _ID = *val
420
474
  _ID.value
421
475
 
422
476
  end
423
477
 
424
- .,.,118028145954649.,.,
478
+ .,.,118754107819808.,.,
425
479
 
426
- module_eval <<-'.,.,118028145953818.,.,', 'slex.dr', 119
480
+ module_eval <<-'.,.,118754107825523.,.,', 'slex.dr', 141
427
481
  def _act_6 val
428
482
  _lexact = *val
429
483
  [ _lexact ]
430
484
 
431
485
  end
432
486
 
433
- .,.,118028145953818.,.,
487
+ .,.,118754107825523.,.,
434
488
 
435
- module_eval <<-'.,.,118028145941830.,.,', 'slex.dr', 120
489
+ module_eval <<-'.,.,11875410787826.,.,', 'slex.dr', 142
436
490
  def _act_7 val
437
491
  _lexactlist, _lexact = *val
438
492
  _lexactlist << _lexact
439
493
 
440
494
  end
441
495
 
442
- .,.,118028145941830.,.,
496
+ .,.,11875410787826.,.,
443
497
 
444
- module_eval <<-'.,.,11802814599495.,.,', 'slex.dr', 124
498
+ module_eval <<-'.,.,118754107820340.,.,', 'slex.dr', 146
445
499
  def _act_8 val
446
- _lexlist, _ACTION = *val
500
+ _lexlist, _opt_noskip, _ACTION = *val
447
501
 
448
502
  %{
449
503
  when #{_lexlist.join(', ')}
450
- _rest = $'
504
+ #{ _opt_noskip ? '#' : "@oldline = @line; @line = $'" }
451
505
  #{ _ACTION.value }
452
506
  }; #code
453
507
 
454
508
  end
455
509
 
456
- .,.,11802814599495.,.,
510
+ .,.,118754107820340.,.,
457
511
 
458
- module_eval <<-'.,.,118028145922938.,.,', 'slex.dr', 133
512
+ module_eval <<-'.,.,118754107818518.,.,', 'slex.dr', 155
459
513
  def _act_9 val
514
+ false
515
+
516
+ end
517
+
518
+ .,.,118754107818518.,.,
519
+
520
+ module_eval <<-'.,.,118754107850066.,.,', 'slex.dr', 156
521
+ def _act_10 val
522
+ _ = *val
523
+ true
524
+
525
+ end
526
+
527
+ .,.,118754107850066.,.,
528
+
529
+ module_eval <<-'.,.,118754107825362.,.,', 'slex.dr', 159
530
+ def _act_11 val
460
531
  _LEX = *val
461
532
  [ _LEX.value ]
462
533
 
463
534
  end
464
535
 
465
- .,.,118028145922938.,.,
536
+ .,.,118754107825362.,.,
466
537
 
467
- module_eval <<-'.,.,11802814594078.,.,', 'slex.dr', 134
468
- def _act_10 val
538
+ module_eval <<-'.,.,118754107856852.,.,', 'slex.dr', 160
539
+ def _act_12 val
469
540
  _lexlist, _, _LEX = *val
470
541
  _lexlist.push _LEX
471
542
 
472
543
  end
473
544
 
474
- .,.,11802814594078.,.,
545
+ .,.,118754107856852.,.,
475
546
 
476
547
  end
477
548
 
@@ -482,14 +553,20 @@ end
482
553
  module D4StatefulLexerExtension_prerhs_postsymbol #:nodoc:all
483
554
  end
484
555
 
485
- class StatefulLexerExtension_prerhs_postsymbol < Basis #:nodoc:all
556
+ class StatefulLexerExtension_prerhs_postsymbol < Depager::LALR::Basis #:nodoc:all
486
557
  include Depager::ExtensionUtils
487
558
 
488
559
 
489
560
  ### Reduce Table
490
561
  reduce_table = [
491
562
  [ -1, 1 ],
563
+ [ 0, 3 ],
492
564
  [ 0, 4 ],
565
+ [ 1, 1 ],
566
+ [ 1, 2 ],
567
+ [ 2, 2 ],
568
+ [ 2, 2 ],
569
+ [ 2, 2 ],
493
570
  ]
494
571
  ### Extension Params
495
572
  nparams = {
@@ -500,27 +577,42 @@ class StatefulLexerExtension_prerhs_postsymbol < Basis #:nodoc:all
500
577
  nil => 0,
501
578
  false => 1,
502
579
  "[" => 2,
503
- ">" => 3,
504
- :SYMBOL => 4,
505
- "]" => 5,
580
+ "]" => 3,
581
+ "?" => 4,
582
+ ">" => 5,
583
+ :SYMBOL => 6,
584
+ "+" => 7,
585
+ "-" => 8,
506
586
  }
507
587
  ### Int to Term
508
588
  i2t = [
509
589
  nil,
510
590
  false,
511
591
  "[",
592
+ "]",
593
+ "?",
512
594
  ">",
513
595
  :SYMBOL,
514
- "]",
596
+ "+",
597
+ "-",
515
598
  ]
516
599
  ### Action Table
517
600
  action_table = [
518
- [ nil, nil, 2, nil, nil, nil, ],
519
- [ ACC, nil, nil, nil, nil, nil, ],
520
- [ nil, nil, nil, 3, nil, nil, ],
521
- [ nil, nil, nil, nil, 4, nil, ],
522
- [ nil, nil, nil, nil, nil, 5, ],
523
- [ nil, nil, nil, nil, nil, nil, ],
601
+ [ nil, nil, 1, nil, nil, nil, nil, nil, nil, ],
602
+ [ nil, nil, nil, nil, nil, 7, nil, 3, 4, ],
603
+ [ ACC, nil, nil, nil, nil, nil, nil, nil, nil, ],
604
+ [ nil, nil, nil, nil, nil, nil, 8, nil, nil, ],
605
+ [ nil, nil, nil, nil, nil, nil, 9, nil, nil, ],
606
+ [ nil, nil, nil, 10, 11, 7, nil, 3, 4, ],
607
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
608
+ [ nil, nil, nil, nil, nil, nil, 13, nil, nil, ],
609
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
610
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
611
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
612
+ [ nil, nil, nil, 14, nil, nil, nil, nil, nil, ],
613
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
614
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
615
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
524
616
  ]
525
617
  ### Default Reduce Table
526
618
  defred_table = [
@@ -529,7 +621,16 @@ class StatefulLexerExtension_prerhs_postsymbol < Basis #:nodoc:all
529
621
  nil,
530
622
  nil,
531
623
  nil,
624
+ nil,
625
+ -3,
626
+ nil,
627
+ -6,
628
+ -7,
532
629
  -1,
630
+ nil,
631
+ -4,
632
+ -5,
633
+ -2,
533
634
  ]
534
635
  defred_after_shift_table = [
535
636
  nil,
@@ -537,24 +638,46 @@ class StatefulLexerExtension_prerhs_postsymbol < Basis #:nodoc:all
537
638
  nil,
538
639
  nil,
539
640
  nil,
641
+ nil,
642
+ -3,
643
+ nil,
644
+ -6,
645
+ -7,
540
646
  -1,
647
+ nil,
648
+ -4,
649
+ -5,
650
+ -2,
541
651
  ]
542
652
  ### Nonterm to Int
543
653
  nt2i = {
544
- :start => 0,
654
+ :start => 0,
655
+ :option_list => 1,
656
+ :option => 2,
545
657
  }
546
658
  ### Int to Nonterm
547
659
  i2nt = [
548
660
  :start,
661
+ :option_list,
662
+ :option,
549
663
  ]
550
664
  ### Goto Table
551
665
  goto_table = [
552
- [ 1, ],
553
- [ nil, ],
554
- [ nil, ],
555
- [ nil, ],
556
- [ nil, ],
557
- [ nil, ],
666
+ [ 2, nil, nil, ],
667
+ [ nil, 5, 6, ],
668
+ [ nil, nil, nil, ],
669
+ [ nil, nil, nil, ],
670
+ [ nil, nil, nil, ],
671
+ [ nil, nil, 12, ],
672
+ [ nil, nil, nil, ],
673
+ [ nil, nil, nil, ],
674
+ [ nil, nil, nil, ],
675
+ [ nil, nil, nil, ],
676
+ [ nil, nil, nil, ],
677
+ [ nil, nil, nil, ],
678
+ [ nil, nil, nil, ],
679
+ [ nil, nil, nil, ],
680
+ [ nil, nil, nil, ],
558
681
  ]
559
682
 
560
683
  Tables = [ reduce_table, nparams, action_table,
@@ -590,24 +713,34 @@ class StatefulLexerExtension_prerhs_postsymbol < Basis #:nodoc:all
590
713
 
591
714
  def lex
592
715
  begin
593
- until @line.empty? do
716
+ until @line.empty?
594
717
  case @line
595
- when /\A\s+/
596
-
597
- when /\A:[a-zA-Z_]+/
598
- yield _Token(:SYMBOL, $&)
599
- when /\A\]/
600
- yield _Token($&, $&); @line = $'; yield nil, nil
601
- when /\A./
602
- yield _Token($&, $&)
718
+
719
+ when /\A\s+/
720
+ @oldline = @line; @line = $'
721
+
722
+
723
+
724
+ when /\A:[a-zA-Z_]+\??/
725
+ @oldline = @line; @line = $'
726
+ yield _Token(:SYMBOL, $&)
727
+
728
+
729
+ when /\A\]/
730
+ @oldline = @line; @line = $'
731
+ yield _Token($&, $&); @line = $'; yield nil, nil
603
732
 
733
+
734
+ when /\A./
735
+ @oldline = @line; @line = $'
736
+ yield _Token($&, $&)
737
+
738
+
604
739
  else
605
740
  raise RuntimeError, "must not happen #{@line}"
606
741
  end
607
- @oldline = @line
608
- @line = $'
609
742
  end
610
- end while @line = getline
743
+ end while @line0 = @line = getline
611
744
  yield nil, nil
612
745
  end
613
746
 
@@ -615,12 +748,18 @@ end
615
748
 
616
749
  ### Outer Code
617
750
 
618
- class D4StatefulLexerExtension_prerhs_postsymbol::NVAction < Depager::Action #:nodoc:all
751
+ class D4StatefulLexerExtension_prerhs_postsymbol::NVAction < Depager::LALR::Action #:nodoc:all
619
752
  include Depager::DecoratorUtils
620
753
 
621
754
  on_reduce = [
622
755
  nil,
623
756
  :_act_0,
757
+ :_act_1,
758
+ :_act_2,
759
+ :_act_3,
760
+ :_act_4,
761
+ :_act_5,
762
+ :_act_6,
624
763
 
625
764
  ]
626
765
  Tables = [on_reduce]
@@ -631,15 +770,70 @@ class D4StatefulLexerExtension_prerhs_postsymbol::NVAction < Depager::Action #:n
631
770
  end
632
771
 
633
772
 
634
- module_eval <<-'.,.,118028146037199.,.,', 'slex.dr', 154
773
+ module_eval <<-'.,.,11875410786796.,.,', 'slex.dr', 180
635
774
  def _act_0 val
636
- _, _, _SYMBOL, _ = *val
775
+ _, _option_list, _ = *val
776
+
777
+ master.ins.push [g_parser.rhs.size, _option_list, false]
778
+
779
+ end
780
+
781
+ .,.,11875410786796.,.,
782
+
783
+ module_eval <<-'.,.,118754107862281.,.,', 'slex.dr', 184
784
+ def _act_1 val
785
+ _, _option_list, _, _ = *val
786
+
787
+ master.ins.push [g_parser.rhs.size, _option_list, true]
788
+
789
+ end
790
+
791
+ .,.,118754107862281.,.,
792
+
793
+ module_eval <<-'.,.,118754107859502.,.,', 'slex.dr', 190
794
+ def _act_2 val
795
+ _option = *val
796
+ [_option]
797
+
798
+ end
799
+
800
+ .,.,118754107859502.,.,
801
+
802
+ module_eval <<-'.,.,118754107825820.,.,', 'slex.dr', 191
803
+ def _act_3 val
804
+ _option_list, _option = *val
805
+ _option_list << _option
806
+
807
+ end
808
+
809
+ .,.,118754107825820.,.,
810
+
811
+ module_eval <<-'.,.,118754107852027.,.,', 'slex.dr', 194
812
+ def _act_4 val
813
+ _, _SYMBOL = *val
814
+ [:GOTO, _SYMBOL.value]
815
+
816
+ end
817
+
818
+ .,.,118754107852027.,.,
819
+
820
+ module_eval <<-'.,.,118754107811272.,.,', 'slex.dr', 195
821
+ def _act_5 val
822
+ _, _SYMBOL = *val
823
+ [:ADD, _SYMBOL.value]
637
824
 
638
- master.ins.push [g_parser.rhs.size, _SYMBOL.value]
825
+ end
826
+
827
+ .,.,118754107811272.,.,
828
+
829
+ module_eval <<-'.,.,118754107839236.,.,', 'slex.dr', 196
830
+ def _act_6 val
831
+ _, _SYMBOL = *val
832
+ [:SUB, _SYMBOL.value]
639
833
 
640
834
  end
641
835
 
642
- .,.,118028146037199.,.,
836
+ .,.,118754107839236.,.,
643
837
 
644
838
  end
645
839