depager 0.1.9 → 0.2.0

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