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,183 @@
1
+
2
+ begin; require 'rubygems'; rescue Exception; end
3
+ require 'depager/parser.rb'
4
+
5
+
6
+ module D4TinyCalc
7
+ end
8
+
9
+ class TinyCalc < Depager::LALR::Basis
10
+
11
+
12
+ ### Reduce Table
13
+ reduce_table = [
14
+ [ -1, 1 ], # ( 0) $start : expr
15
+ [ 0, 3 ], # ( 1) expr : expr + term
16
+ [ 0, 3 ], # ( 2) expr : expr - term
17
+ [ 0, 1 ], # ( 3) expr : term
18
+ [ 1, 3 ], # ( 4) term : term * fact
19
+ [ 1, 3 ], # ( 5) term : term / fact
20
+ [ 1, 1 ], # ( 6) term : fact
21
+ [ 2, 1 ], # ( 7) fact : NUM
22
+ [ 2, 3 ], # ( 8) fact : ( expr )
23
+ ]
24
+ ### Extension Params
25
+ nparams = {
26
+ }
27
+ ### Term to Int
28
+ t2i = {
29
+ nil => 0,
30
+ false => 1,
31
+ "+" => 2,
32
+ "-" => 3,
33
+ "*" => 4,
34
+ "/" => 5,
35
+ :NUM => 6,
36
+ "(" => 7,
37
+ ")" => 8,
38
+ }
39
+ ### Int to Term
40
+ i2t = [
41
+ nil,
42
+ false,
43
+ "+",
44
+ "-",
45
+ "*",
46
+ "/",
47
+ :NUM,
48
+ "(",
49
+ ")",
50
+ ]
51
+ ### Action Table
52
+ action_table = [
53
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
54
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
55
+ [ ACC, nil, 7, 8, nil, nil, nil, nil, nil, ],
56
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
57
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
58
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
59
+ [ nil, nil, 7, 8, nil, nil, nil, nil, 11, ],
60
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
61
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
62
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
63
+ [ nil, nil, nil, nil, nil, nil, 5, 1, nil, ],
64
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
65
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
66
+ [ nil, nil, nil, nil, 9, 10, nil, nil, nil, ],
67
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
68
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
69
+ ]
70
+ ### Default Reduce Table
71
+ defred_table = [
72
+ nil,
73
+ nil,
74
+ nil,
75
+ -3,
76
+ -6,
77
+ -7,
78
+ nil,
79
+ nil,
80
+ nil,
81
+ nil,
82
+ nil,
83
+ -8,
84
+ -1,
85
+ -2,
86
+ -4,
87
+ -5,
88
+ ]
89
+ defred_after_shift_table = [
90
+ nil,
91
+ nil,
92
+ nil,
93
+ nil,
94
+ -6,
95
+ -7,
96
+ nil,
97
+ nil,
98
+ nil,
99
+ nil,
100
+ nil,
101
+ -8,
102
+ nil,
103
+ nil,
104
+ -4,
105
+ -5,
106
+ ]
107
+ ### Nonterm to Int
108
+ nt2i = {
109
+ :expr => 0,
110
+ :term => 1,
111
+ :fact => 2,
112
+ }
113
+ ### Int to Nonterm
114
+ i2nt = [
115
+ :expr,
116
+ :term,
117
+ :fact,
118
+ ]
119
+ ### Goto Table
120
+ goto_table = [
121
+ [ 2, 3, 4, ],
122
+ [ 6, 3, 4, ],
123
+ [ nil, nil, nil, ],
124
+ [ nil, nil, nil, ],
125
+ [ nil, nil, nil, ],
126
+ [ nil, nil, nil, ],
127
+ [ nil, nil, nil, ],
128
+ [ nil, 12, 4, ],
129
+ [ nil, 13, 4, ],
130
+ [ nil, nil, 14, ],
131
+ [ nil, nil, 15, ],
132
+ [ nil, nil, nil, ],
133
+ [ nil, nil, nil, ],
134
+ [ nil, nil, nil, ],
135
+ [ nil, nil, nil, ],
136
+ [ nil, nil, nil, ],
137
+ ]
138
+
139
+ Tables = [ reduce_table, nparams, action_table,
140
+ defred_table, defred_after_shift_table, goto_table,
141
+ t2i, i2t, nt2i, i2nt ]
142
+
143
+ def self.createDecoratedParser
144
+ TinyCalc.new()
145
+ end
146
+
147
+ ### Inner Code
148
+ def lex
149
+ until @file.eof?
150
+ @line = @file.gets
151
+ until @line.empty? do
152
+ case @line
153
+ when /\A\s+/, /\A\#.*/, /\A\n/
154
+ #skip blank and comment
155
+ when /\A[0-9]+/
156
+ yield :NUM, $&
157
+ when /\A./
158
+ yield $&, $&
159
+ else
160
+ raise RuntimeError, "must not happen #{line}"
161
+ end
162
+ @line = $'
163
+ end
164
+ end
165
+ yield nil, nil
166
+ end
167
+
168
+ end
169
+
170
+ ### Outer Code
171
+
172
+
173
+ def createDecoratedTinyCalc
174
+ TinyCalc.new()
175
+ end
176
+
177
+ ### main
178
+ if __FILE__ == $0
179
+ ### Main Code
180
+ parser = TinyCalc.new()
181
+ parser.yyparse(STDIN)
182
+
183
+ end
@@ -0,0 +1,257 @@
1
+
2
+ begin; require 'rubygems'; rescue Exception; end
3
+ require 'depager/parser.rb'
4
+
5
+
6
+ module D4TinyCalc
7
+ end
8
+
9
+ class TinyCalc < Depager::LALR::Basis
10
+
11
+
12
+ ### Reduce Table
13
+ reduce_table = [
14
+ [ -1, 1 ], # ( 0) $start : expr
15
+ [ 0, 3 ], # ( 1) expr : expr + expr
16
+ [ 0, 3 ], # ( 2) expr : expr - expr
17
+ [ 0, 3 ], # ( 3) expr : expr * expr
18
+ [ 0, 3 ], # ( 4) expr : expr / expr
19
+ [ 0, 3 ], # ( 5) expr : ( expr )
20
+ [ 0, 1 ], # ( 6) expr : NUM
21
+ ]
22
+ ### Extension Params
23
+ nparams = {
24
+ 'NVAction' => 2,
25
+ }
26
+ ### Term to Int
27
+ t2i = {
28
+ nil => 0,
29
+ false => 1,
30
+ "+" => 2,
31
+ "-" => 3,
32
+ "*" => 4,
33
+ "/" => 5,
34
+ "(" => 6,
35
+ ")" => 7,
36
+ :NUM => 8,
37
+ }
38
+ ### Int to Term
39
+ i2t = [
40
+ nil,
41
+ false,
42
+ "+",
43
+ "-",
44
+ "*",
45
+ "/",
46
+ "(",
47
+ ")",
48
+ :NUM,
49
+ ]
50
+ ### Action Table
51
+ action_table = [
52
+ [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
53
+ [ ACC, nil, 7, 4, 5, 6, nil, nil, nil, ],
54
+ [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
55
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
56
+ [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
57
+ [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
58
+ [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
59
+ [ nil, nil, nil, nil, nil, nil, 2, nil, 3, ],
60
+ [ nil, nil, 7, 4, 5, 6, nil, 13, nil, ],
61
+ [ nil, nil, nil, nil, 5, 6, nil, nil, nil, ],
62
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
63
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
64
+ [ nil, nil, nil, nil, 5, 6, nil, nil, nil, ],
65
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
66
+ ]
67
+ ### Default Reduce Table
68
+ defred_table = [
69
+ nil,
70
+ nil,
71
+ nil,
72
+ -6,
73
+ nil,
74
+ nil,
75
+ nil,
76
+ nil,
77
+ nil,
78
+ -2,
79
+ -3,
80
+ -4,
81
+ -1,
82
+ -5,
83
+ ]
84
+ defred_after_shift_table = [
85
+ nil,
86
+ nil,
87
+ nil,
88
+ -6,
89
+ nil,
90
+ nil,
91
+ nil,
92
+ nil,
93
+ nil,
94
+ nil,
95
+ -3,
96
+ -4,
97
+ nil,
98
+ -5,
99
+ ]
100
+ ### Nonterm to Int
101
+ nt2i = {
102
+ :expr => 0,
103
+ }
104
+ ### Int to Nonterm
105
+ i2nt = [
106
+ :expr,
107
+ ]
108
+ ### Goto Table
109
+ goto_table = [
110
+ [ 1, ],
111
+ [ nil, ],
112
+ [ 8, ],
113
+ [ nil, ],
114
+ [ 9, ],
115
+ [ 10, ],
116
+ [ 11, ],
117
+ [ 12, ],
118
+ [ nil, ],
119
+ [ nil, ],
120
+ [ nil, ],
121
+ [ nil, ],
122
+ [ nil, ],
123
+ [ nil, ],
124
+ ]
125
+
126
+ Tables = [ reduce_table, nparams, action_table,
127
+ defred_table, defred_after_shift_table, goto_table,
128
+ t2i, i2t, nt2i, i2nt ]
129
+
130
+ def self.createDecoratedParser
131
+ D4TinyCalc::NVAction.new(TinyCalc.new())
132
+ end
133
+
134
+ ### Inner Code
135
+
136
+ def lex
137
+ begin
138
+ until @line.empty?
139
+ case @line
140
+
141
+ when /\A\s+/, /\A\#.*/
142
+ @oldline = @line; @line = $'
143
+
144
+
145
+
146
+ when /\A[1-9][0-9]*/
147
+ @oldline = @line; @line = $'
148
+ yield _Token(:NUM, $&.to_i)
149
+
150
+
151
+ when /\A./
152
+ @oldline = @line; @line = $'
153
+ yield _Token($&, $&)
154
+
155
+
156
+ else
157
+ raise RuntimeError, "must not happen #{@line}"
158
+ end
159
+ end
160
+ end while @line0 = @line = getline
161
+ yield nil, nil
162
+ end
163
+
164
+ end
165
+
166
+ ### Outer Code
167
+
168
+ class D4TinyCalc::NVAction < Depager::LALR::Action #:nodoc:all
169
+ include Depager::DecoratorUtils
170
+
171
+ on_reduce = [
172
+ nil,
173
+ :_act_0,
174
+ :_act_1,
175
+ :_act_2,
176
+ :_act_3,
177
+ :_act_4,
178
+ :_act_5,
179
+
180
+ ]
181
+ Tables = [on_reduce]
182
+ def initialize inside
183
+ super inside, 'NVAction'
184
+ @on_reduce, = self.class::Tables
185
+ init_parser
186
+ end
187
+
188
+
189
+ module_eval <<-'.,.,118754109222632.,.,', 'sample_calc/calc_prec.nvaction.dr', 18
190
+ def _act_0 val
191
+ _left, _, _right = *val
192
+ _left + _right
193
+
194
+ end
195
+
196
+ .,.,118754109222632.,.,
197
+
198
+ module_eval <<-'.,.,118754109254894.,.,', 'sample_calc/calc_prec.nvaction.dr', 19
199
+ def _act_1 val
200
+ _left, _, _right = *val
201
+ _left - _right
202
+
203
+ end
204
+
205
+ .,.,118754109254894.,.,
206
+
207
+ module_eval <<-'.,.,118754109239243.,.,', 'sample_calc/calc_prec.nvaction.dr', 20
208
+ def _act_2 val
209
+ _left, _, _right = *val
210
+ _left * _right
211
+
212
+ end
213
+
214
+ .,.,118754109239243.,.,
215
+
216
+ module_eval <<-'.,.,118754109238225.,.,', 'sample_calc/calc_prec.nvaction.dr', 21
217
+ def _act_3 val
218
+ _left, _, _right = *val
219
+ _left / _right
220
+
221
+ end
222
+
223
+ .,.,118754109238225.,.,
224
+
225
+ module_eval <<-'.,.,118754109226405.,.,', 'sample_calc/calc_prec.nvaction.dr', 22
226
+ def _act_4 val
227
+ _, _expr, _ = *val
228
+ _expr
229
+
230
+ end
231
+
232
+ .,.,118754109226405.,.,
233
+
234
+ module_eval <<-'.,.,118754109237470.,.,', 'sample_calc/calc_prec.nvaction.dr', 23
235
+ def _act_5 val
236
+ _NUM = *val
237
+ _NUM.value
238
+
239
+ end
240
+
241
+ .,.,118754109237470.,.,
242
+
243
+ end
244
+
245
+
246
+ def createDecoratedTinyCalc
247
+ D4TinyCalc::NVAction.new(TinyCalc.new())
248
+ end
249
+
250
+ ### main
251
+ if __FILE__ == $0
252
+ ### Main Code
253
+ parser = createDecoratedTinyCalc
254
+ r, = parser.yyparse(STDIN)
255
+ puts r
256
+
257
+ end
@@ -0,0 +1 @@
1
+ 1+2*3
@@ -11,27 +11,19 @@
11
11
  /\/(([^\/\\]+|\\.)*)\// { yield _Token(:REGEXP, $&) }
12
12
  /./ { yield _Token($&, $&) }
13
13
  <OPMODE : START>
14
- '\/' { yield _Token($&, $&) }
14
+ '/' { yield _Token($&, $&) }
15
15
  %}
16
16
 
17
17
  #begin-rule
18
18
  expr:
19
- expr '/' [>:START] fact
19
+ expr '/' [>:START ?] fact
20
20
  | fact
21
21
  ;
22
22
  fact:
23
- REGEXP [>:OPMODE]
23
+ REGEXP [>:OPMODE ?]
24
24
  { warn "REGEXP: #{_REGEXP.value}" }
25
25
  ;
26
26
  #end-rule
27
27
  %%
28
- =begin
29
- stmt:
30
- TYPEDEF [>:TNMODE] TYPENAME ';' [>:START]
31
- { warn 'TYPEDEF:'+val[2] }
32
- | ID ';'
33
- { warn 'ID:'+val[0] }
34
- ;
35
- =end
36
28
  p = createDecoratedStatefulLexerTest1
37
29
  p.yyparse(STDIN)