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
@@ -0,0 +1,227 @@
1
+
2
+ begin; require 'rubygems'; rescue Exception; end
3
+ require 'depager/parser.rb'
4
+
5
+
6
+ module D4StatefulLexerTest1
7
+ 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
+ Tables = [ reduce_table, nparams, action_table,
92
+ defred_table, defred_after_shift_table, goto_table,
93
+ t2i, i2t, nt2i, i2nt ]
94
+
95
+ def self.createDecoratedParser
96
+ D4StatefulLexerTest1::StatefulLexer.new(D4StatefulLexerTest1::NVAction.new(StatefulLexerTest1.new()))
97
+ end
98
+
99
+ ### Inner Code
100
+
101
+ def lex_START(&block)
102
+ case @line
103
+
104
+ when /\A\s+/
105
+ @oldline = @line; @line = $'
106
+
107
+
108
+
109
+ when /\A\/(([^\/\\]+|\\.)*)\//
110
+ @oldline = @line; @line = $'
111
+ yield _Token(:REGEXP, $&)
112
+
113
+
114
+ when /\A./
115
+ @oldline = @line; @line = $'
116
+ yield _Token($&, $&)
117
+
118
+
119
+ else
120
+ raise RuntimeError, "must not happen #{@line}"
121
+ end
122
+ end
123
+
124
+ def lex_OPMODE(&block)
125
+ case @line
126
+
127
+ when /\A\//
128
+ @oldline = @line; @line = $'
129
+ yield _Token($&, $&)
130
+
131
+
132
+ else
133
+ lex_START(&block)
134
+ end
135
+ end
136
+
137
+ attr_accessor :lex_state, :lex_context
138
+ def lex(&block)
139
+ @lex_state ||= :START
140
+ @lex_context ||= {}
141
+ begin
142
+ until @line.empty?
143
+ self.send "lex_#{@lex_state}", &block
144
+ end
145
+ end while @line0 = @line = getline
146
+ yield nil, nil
147
+ end
148
+
149
+ end
150
+
151
+ ### Outer Code
152
+
153
+ class D4StatefulLexerTest1::StatefulLexer < Depager::LALR::Action #:nodoc:all
154
+ include Depager::DecoratorUtils
155
+
156
+ on_reduce = [
157
+ nil,
158
+ nil,
159
+ nil,
160
+ :_lex_expr_0_2,
161
+ :_lex_fact_0_1,
162
+
163
+ ]
164
+ Tables = [on_reduce]
165
+ def initialize inside
166
+ super inside, 'StatefulLexer'
167
+ @on_reduce, = self.class::Tables
168
+ init_parser
169
+ end
170
+
171
+
172
+ def _lex_expr_0_2 val
173
+ @basis.lex_state = :START;warn 'MODE:->:START'
174
+ end
175
+
176
+ def _lex_fact_0_1 val
177
+ @basis.lex_state = :OPMODE;warn 'MODE:->:OPMODE'
178
+ end
179
+
180
+ def afterError
181
+ warn "StatefulLex: lex_state==#{@basis.lex_state}" if $MP_DEBUG
182
+ end
183
+
184
+ end
185
+
186
+ class D4StatefulLexerTest1::NVAction < Depager::LALR::Action #:nodoc:all
187
+ include Depager::DecoratorUtils
188
+
189
+ on_reduce = [
190
+ nil,
191
+ nil,
192
+ nil,
193
+ nil,
194
+ :_act_3,
195
+
196
+ ]
197
+ Tables = [on_reduce]
198
+ def initialize inside
199
+ super inside, 'NVAction'
200
+ @on_reduce, = self.class::Tables
201
+ init_parser
202
+ end
203
+
204
+
205
+ module_eval <<-'.,.,118754109260321.,.,', 'slex_test/divreg.slex.dr', 22
206
+ def _act_3 val
207
+ _REGEXP = *val
208
+ warn "REGEXP: #{_REGEXP.value}"
209
+
210
+ end
211
+
212
+ .,.,118754109260321.,.,
213
+
214
+ end
215
+
216
+
217
+ def createDecoratedStatefulLexerTest1
218
+ D4StatefulLexerTest1::StatefulLexer.new(D4StatefulLexerTest1::NVAction.new(StatefulLexerTest1.new()))
219
+ end
220
+
221
+ ### main
222
+ if __FILE__ == $0
223
+ ### Main Code
224
+ p = createDecoratedStatefulLexerTest1
225
+ p.yyparse(STDIN)
226
+
227
+ end
@@ -1,31 +1,34 @@
1
1
  %class StatefulLexerTest2
2
2
  %extend StatefulLexer ('depager/slex.rb')
3
- %extend Action ('depager/action.rb')
4
- %decorate @Action
3
+ %extend NVAction ('depager/nvaction.rb')
4
+ %decorate @NVAction
5
5
  %decorate @StatefulLexer
6
6
  #%decorate ShiftReducePrinter ('depager/srp.rb')
7
7
  %%
8
8
  %LEX{
9
9
  <START>
10
10
  /[ \t]+/ { }
11
- /\n/ { yield :EOL, $& }
12
- /\w+/ { yield :ID, $& }
13
- /./ { yield $&, $& }
11
+ /\n/ { yield _Token(:EOL, $&) }
12
+ /\w+/ { yield _Token(:ID, $&) }
13
+ /./ { yield _Token($&, $&) }
14
14
  <LCONT : START>
15
- /\r?\n/ { }
15
+ /\r?\n/ { }
16
16
  %}
17
17
 
18
18
  #begin-rule
19
19
  stmts:
20
20
  | stmts expr EOL
21
- { warn "<EOL>:#{@lexstate}" }
21
+ { warn "#{_expr} <EOL>:#{@lexstate}" }
22
22
  ;
23
23
  expr:
24
24
  expr '+' [>:LCONT] fact
25
+ { "#{_expr} + #{_fact}" }
25
26
  | fact
27
+ { _fact }
26
28
  ;
27
29
  fact:
28
30
  ID [>:START]
31
+ { _ID.value }
29
32
  ;
30
33
  #end-rule
31
34
  %%
@@ -0,0 +1,277 @@
1
+
2
+ begin; require 'rubygems'; rescue Exception; end
3
+ require 'depager/parser.rb'
4
+
5
+
6
+ module D4StatefulLexerTest2
7
+ end
8
+
9
+ class StatefulLexerTest2 < Depager::LALR::Basis
10
+
11
+
12
+ ### Reduce Table
13
+ reduce_table = [
14
+ [ -1, 1 ], # ( 0) $start : stmts
15
+ [ 0, 0 ], # ( 1) stmts :
16
+ [ 0, 3 ], # ( 2) stmts : stmts expr EOL
17
+ [ 1, 4 ], # ( 3) expr : expr + __expr_0_2__ fact
18
+ [ 1, 1 ], # ( 4) expr : fact
19
+ [ 3, 0 ], # ( 5) __expr_0_2__ :
20
+ [ 2, 1 ], # ( 6) fact : ID
21
+ ]
22
+ ### Extension Params
23
+ nparams = {
24
+ 'NVAction' => 3,
25
+ 'StatefulLexer' => 2,
26
+ }
27
+ ### Term to Int
28
+ t2i = {
29
+ nil => 0,
30
+ false => 1,
31
+ :EOL => 2,
32
+ "+" => 3,
33
+ :ID => 4,
34
+ }
35
+ ### Int to Term
36
+ i2t = [
37
+ nil,
38
+ false,
39
+ :EOL,
40
+ "+",
41
+ :ID,
42
+ ]
43
+ ### Action Table
44
+ action_table = [
45
+ [ nil, nil, nil, nil, nil, ],
46
+ [ ACC, nil, nil, nil, 4, ],
47
+ [ nil, nil, 5, 6, nil, ],
48
+ [ nil, nil, nil, nil, nil, ],
49
+ [ nil, nil, nil, nil, nil, ],
50
+ [ nil, nil, nil, nil, nil, ],
51
+ [ nil, nil, nil, nil, nil, ],
52
+ [ nil, nil, nil, nil, 4, ],
53
+ [ nil, nil, nil, nil, nil, ],
54
+ ]
55
+ ### Default Reduce Table
56
+ defred_table = [
57
+ -1,
58
+ nil,
59
+ nil,
60
+ -4,
61
+ -6,
62
+ -2,
63
+ -5,
64
+ nil,
65
+ -3,
66
+ ]
67
+ defred_after_shift_table = [
68
+ -1,
69
+ nil,
70
+ nil,
71
+ -4,
72
+ -6,
73
+ -2,
74
+ -5,
75
+ nil,
76
+ -3,
77
+ ]
78
+ ### Nonterm to Int
79
+ nt2i = {
80
+ :stmts => 0,
81
+ :expr => 1,
82
+ :fact => 2,
83
+ :__expr_0_2__ => 3,
84
+ }
85
+ ### Int to Nonterm
86
+ i2nt = [
87
+ :stmts,
88
+ :expr,
89
+ :fact,
90
+ :__expr_0_2__,
91
+ ]
92
+ ### Goto Table
93
+ goto_table = [
94
+ [ 1, nil, nil, nil, ],
95
+ [ nil, 2, 3, nil, ],
96
+ [ nil, nil, nil, nil, ],
97
+ [ nil, nil, nil, nil, ],
98
+ [ nil, nil, nil, nil, ],
99
+ [ nil, nil, nil, nil, ],
100
+ [ nil, nil, nil, 7, ],
101
+ [ nil, nil, 8, nil, ],
102
+ [ nil, nil, nil, nil, ],
103
+ ]
104
+
105
+ Tables = [ reduce_table, nparams, action_table,
106
+ defred_table, defred_after_shift_table, goto_table,
107
+ t2i, i2t, nt2i, i2nt ]
108
+
109
+ def self.createDecoratedParser
110
+ D4StatefulLexerTest2::StatefulLexer.new(D4StatefulLexerTest2::NVAction.new(StatefulLexerTest2.new()))
111
+ end
112
+
113
+ ### Inner Code
114
+
115
+ def lex_START(&block)
116
+ case @line
117
+
118
+ when /\A[ \t]+/
119
+ @oldline = @line; @line = $'
120
+
121
+
122
+
123
+ when /\A\n/
124
+ @oldline = @line; @line = $'
125
+ yield _Token(:EOL, $&)
126
+
127
+
128
+ when /\A\w+/
129
+ @oldline = @line; @line = $'
130
+ yield _Token(:ID, $&)
131
+
132
+
133
+ when /\A./
134
+ @oldline = @line; @line = $'
135
+ yield _Token($&, $&)
136
+
137
+
138
+ else
139
+ raise RuntimeError, "must not happen #{@line}"
140
+ end
141
+ end
142
+
143
+ def lex_LCONT(&block)
144
+ case @line
145
+
146
+ when /\A\r?\n/
147
+ @oldline = @line; @line = $'
148
+
149
+
150
+
151
+ else
152
+ lex_START(&block)
153
+ end
154
+ end
155
+
156
+ attr_accessor :lex_state, :lex_context
157
+ def lex(&block)
158
+ @lex_state ||= :START
159
+ @lex_context ||= {}
160
+ begin
161
+ until @line.empty?
162
+ self.send "lex_#{@lex_state}", &block
163
+ end
164
+ end while @line0 = @line = getline
165
+ yield nil, nil
166
+ end
167
+
168
+ end
169
+
170
+ ### Outer Code
171
+
172
+ class D4StatefulLexerTest2::StatefulLexer < Depager::LALR::Action #:nodoc:all
173
+ include Depager::DecoratorUtils
174
+
175
+ on_reduce = [
176
+ nil,
177
+ nil,
178
+ nil,
179
+ nil,
180
+ nil,
181
+ :_lex_expr_0_2,
182
+ :_lex_fact_0_1,
183
+
184
+ ]
185
+ Tables = [on_reduce]
186
+ def initialize inside
187
+ super inside, 'StatefulLexer'
188
+ @on_reduce, = self.class::Tables
189
+ init_parser
190
+ end
191
+
192
+
193
+ def _lex_expr_0_2 val
194
+ @basis.lex_state = :LCONT
195
+ end
196
+
197
+ def _lex_fact_0_1 val
198
+ @basis.lex_state = :START
199
+ end
200
+
201
+ def afterError
202
+ warn "StatefulLex: lex_state==#{@basis.lex_state}" if $MP_DEBUG
203
+ end
204
+
205
+ end
206
+
207
+ class D4StatefulLexerTest2::NVAction < Depager::LALR::Action #:nodoc:all
208
+ include Depager::DecoratorUtils
209
+
210
+ on_reduce = [
211
+ nil,
212
+ nil,
213
+ :_act_1,
214
+ :_act_2,
215
+ :_act_3,
216
+ nil,
217
+ :_act_5,
218
+
219
+ ]
220
+ Tables = [on_reduce]
221
+ def initialize inside
222
+ super inside, 'NVAction'
223
+ @on_reduce, = self.class::Tables
224
+ init_parser
225
+ end
226
+
227
+
228
+ module_eval <<-'.,.,118754109357478.,.,', 'slex_test/ljoin.slex.dr', 19
229
+ def _act_1 val
230
+ _stmts, _expr, _EOL = *val
231
+ warn "#{_expr} <EOL>:#{@lexstate}"
232
+
233
+ end
234
+
235
+ .,.,118754109357478.,.,
236
+
237
+ module_eval <<-'.,.,118754109356391.,.,', 'slex_test/ljoin.slex.dr', 23
238
+ def _act_2 val
239
+ _expr, _, ___expr_0_2__, _fact = *val
240
+ "#{_expr} + #{_fact}"
241
+
242
+ end
243
+
244
+ .,.,118754109356391.,.,
245
+
246
+ module_eval <<-'.,.,118754109362724.,.,', 'slex_test/ljoin.slex.dr', 25
247
+ def _act_3 val
248
+ _fact = *val
249
+ _fact
250
+
251
+ end
252
+
253
+ .,.,118754109362724.,.,
254
+
255
+ module_eval <<-'.,.,118754109319023.,.,', 'slex_test/ljoin.slex.dr', 29
256
+ def _act_5 val
257
+ _ID = *val
258
+ _ID.value
259
+
260
+ end
261
+
262
+ .,.,118754109319023.,.,
263
+
264
+ end
265
+
266
+
267
+ def createDecoratedStatefulLexerTest2
268
+ D4StatefulLexerTest2::StatefulLexer.new(D4StatefulLexerTest2::NVAction.new(StatefulLexerTest2.new()))
269
+ end
270
+
271
+ ### main
272
+ if __FILE__ == $0
273
+ ### Main Code
274
+ p = createDecoratedStatefulLexerTest2
275
+ p.yyparse(STDIN)
276
+
277
+ end