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,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)