depager 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/ChangeLog +4 -0
  2. data/Manifest.txt +52 -0
  3. data/README.en +64 -0
  4. data/README.ja +128 -0
  5. data/bin/depager +47 -0
  6. data/data/depager/misc/depager-mode.el +209 -0
  7. data/data/depager/sample/extension/paction.dr +15 -0
  8. data/data/depager/sample/extension/pactiontest.dr +14 -0
  9. data/data/depager/sample/pl0d/pl0ds.dr +334 -0
  10. data/data/depager/sample/pl0d/pl0test.pl0 +34 -0
  11. data/data/depager/sample/sample_calc/calc.action.dr +33 -0
  12. data/data/depager/sample/sample_calc/calc.astdf.dr +54 -0
  13. data/data/depager/sample/sample_calc/calc.astl.action.dr +66 -0
  14. data/data/depager/sample/sample_calc/calc.astl.dr +55 -0
  15. data/data/depager/sample/sample_calc/calc.atree.dr +43 -0
  16. data/data/depager/sample/sample_calc/calc.cst.dr +45 -0
  17. data/data/depager/sample/sample_calc/calc.dr +43 -0
  18. data/data/depager/sample/sample_calc/calc.lex.dr +29 -0
  19. data/data/depager/sample/sample_calc/calc.nvaction.dr +33 -0
  20. data/data/depager/sample/sample_calc/calc_prec.nvaction.dr +31 -0
  21. data/data/depager/sample/slex_test/slextest1.dr +37 -0
  22. data/data/depager/sample/slex_test/slextest2.dr +33 -0
  23. data/lib/depager.rb +608 -0
  24. data/lib/depager/Rakefile +30 -0
  25. data/lib/depager/action.rb +47 -0
  26. data/lib/depager/ast_base.dr +232 -0
  27. data/lib/depager/ast_base.rb +1249 -0
  28. data/lib/depager/astdf.rb +10 -0
  29. data/lib/depager/astl.rb +14 -0
  30. data/lib/depager/atree.dr +55 -0
  31. data/lib/depager/atree.rb +336 -0
  32. data/lib/depager/cst.dr +182 -0
  33. data/lib/depager/cst.rb +625 -0
  34. data/lib/depager/lex.dr +76 -0
  35. data/lib/depager/lex.rb +306 -0
  36. data/lib/depager/lr.rb +604 -0
  37. data/lib/depager/nvaction.rb +21 -0
  38. data/lib/depager/parse_action.rb +24 -0
  39. data/lib/depager/parser.rb +248 -0
  40. data/lib/depager/psrtmpl.rb +33 -0
  41. data/lib/depager/slex.dr +161 -0
  42. data/lib/depager/slex.rb +646 -0
  43. data/lib/depager/srp.rb +50 -0
  44. data/lib/depager/template/astdf.erbs +57 -0
  45. data/lib/depager/template/astl.erbs +57 -0
  46. data/lib/depager/template/extension_lalr_master.erb +51 -0
  47. data/lib/depager/template/extension_lalr_slave.erb +107 -0
  48. data/lib/depager/template/simple.erb +21 -0
  49. data/lib/depager/template/single_lalr_parser.erb +97 -0
  50. data/lib/depager/utils.rb +355 -0
  51. data/lib/depager/version.rb +9 -0
  52. data/setup.rb +1585 -0
  53. metadata +103 -0
@@ -0,0 +1,30 @@
1
+ Dir.chdir(File.dirname(__FILE__))
2
+
3
+ require 'rake/clean'
4
+
5
+ task :default => [".extensions"]
6
+
7
+ SRC = FileList["*.dr"]
8
+ SRC.delete('lex.dr')
9
+ SRC.unshift('lex.dr')
10
+ OBJ = SRC.ext('rb')
11
+ CLEAN.include(OBJ)
12
+ # CLOBBER.include('extensions')
13
+ PREFIX="../.."
14
+ LIBDIR = "#{PREFIX}/lib"
15
+ BINDIR = "#{PREFIX}/bin"
16
+
17
+ SRC.each do |fn|
18
+ fn = fn.sub(/\.[^.]*$/, '')
19
+ file("#{fn}.rb" => [
20
+ "#{fn}.dr",
21
+ 'template/extension_lalr_master.erb',
22
+ 'template/extension_lalr_slave.erb',
23
+ ]) do
24
+ sh "ruby -I#{LIBDIR} #{BINDIR}/depager -g -o #{fn}.rb #{fn}.dr"
25
+ end
26
+ end
27
+
28
+ file ".extensions" => OBJ do
29
+ #sh "touch .extensions"
30
+ end
@@ -0,0 +1,47 @@
1
+ require 'depager/parser.rb'
2
+ require 'depager/parse_action.rb'
3
+
4
+ class ActionExtension #:nodoc:all
5
+ include Depager::ExtensionUtils
6
+ include Depager::ActionParser
7
+ def initialize
8
+ @line0 = @line = @oldline = ''
9
+ @optouter = []
10
+ @on_reduce = []
11
+ end
12
+
13
+ def modify_action_code code
14
+ return code, 0
15
+ end
16
+
17
+ def preRuleList
18
+ if g_parser.line0 =~ /^%ACTION\{\s*$/
19
+ while line = getline
20
+ break if line =~ /^%\}\s*$/
21
+ @optouter.push line
22
+ end
23
+ fixline ''
24
+ gettoken
25
+ end
26
+ end
27
+
28
+ def postRhs
29
+ if token[0] == '{'
30
+ @line0, @line = g_parser.line0, g_parser.oldline
31
+ lineno = g_parser.lineno
32
+ code, d = modify_action_code(parse_action)
33
+ @optouter <<
34
+ gen_defm_code("_act_#{nrules} val", code, lineno, d)
35
+ fixline @line
36
+ gettoken
37
+ @on_reduce[nrules] = ":_act_#{nrules}"
38
+ end
39
+ end
40
+
41
+ def postRuleList
42
+ g_parser.optouter <<
43
+ gen_action_decorator_code(
44
+ target_name, paramkey,
45
+ @on_reduce, @optouter, g_parser.mixin)
46
+ end
47
+ end
@@ -0,0 +1,232 @@
1
+ %defext ASTBuilderBaseExtension
2
+ %extend Lexer ('depager/lex.rb')
3
+ %extend NVAction ('depager/nvaction.rb')
4
+ %decorate @NVAction
5
+ #%decorate ShiftReducePrinter ('depager/srp.rb')
6
+ %inner{
7
+ attr_accessor :optouter, :on_reduce, :visitor
8
+ def init_parser
9
+ super
10
+ @visitor = Hash.new{|hash, key| hash[key] = []}
11
+ @optouter = []
12
+ @on_reduce = []
13
+ end
14
+ def postRuleList
15
+ g_parser.optouter <<
16
+ gen_action_decorator_code(target_name, paramkey,
17
+ @on_reduce, @optouter)
18
+ end
19
+ %}
20
+ %hook prerulelist /%AST\{\s*\Z/ skip
21
+ %banner '%AST{ ... }'
22
+ %mixin ActionParser ('depager/parse_action')
23
+ %%
24
+
25
+ %LEX{
26
+ /\s+/, /#.*/ { }
27
+ /%\}\s*\Z/ { @line = $'; yield nil,nil }
28
+ /Node/ { yield _Token(:NODE, $&) }
29
+ /Visitor/ { yield _Token(:VISITOR, $&) }
30
+ /[a-zA-Z][a-zA-Z0-9_]*/ { yield _Token(:ID, $&) }
31
+ /\{/ { ln = lineno; yield _Token(:ACTION, parse_action, ln); //=~'' }
32
+ /./ { yield _Token($&, $&) }
33
+ %}
34
+
35
+ #begin-rule
36
+ start:
37
+ opt_defnode opt_defvis defnode_list
38
+ {
39
+ g_parser.optouter.push _opt_defnode, val[2]
40
+ g_parser.optouter.push %{
41
+ class Visitor
42
+ def visit node
43
+ node.accept(self)
44
+ end
45
+ #{master.visitor[nil]}
46
+ end
47
+ };#code
48
+ master.visitor.each do |k, v|
49
+ g_parser.optouter.push %{
50
+ class Visitor_#{k}
51
+ #{v}
52
+ end
53
+ } if k ;#code
54
+ end
55
+ }
56
+ ;
57
+ opt_defnode:
58
+ { "" }
59
+ | NODE opt_attr ACTION
60
+ {
61
+ ini = %{
62
+ def initialize
63
+ #{_ACTION.value}
64
+ end
65
+ };#code
66
+ master.gen_tmpl_code(:defnode, binding)
67
+ }
68
+ ;
69
+ opt_defvis:
70
+ { [] }
71
+ | VISITOR opt_action
72
+ {
73
+ _opt_action[nil] = Token['', 0] unless _opt_action[nil]
74
+ _opt_action.each do |pass, act|
75
+ master.visitor[pass].unshift(
76
+ master.gen_meval_code(act.lineno, 0, act.value.to_s))
77
+ end
78
+ }
79
+ ;
80
+ defnode_list:
81
+ defnode { _defnode }
82
+ | defnode_list defnode { _defnode_list << _defnode}
83
+ ;
84
+ defnode:
85
+ defnode_header opt_attr opt_action
86
+ {
87
+ name, args = _defnode_header
88
+ nodes, accept, attrs = [], '', _opt_attr
89
+ args.each do |i|
90
+ if i =~ /\-(.*)/
91
+ nodes.push $1
92
+ attrs.push $1
93
+ else
94
+ nodes.push i
95
+ accept << master.gen_accept_code(i)
96
+ end
97
+ end
98
+ _opt_action[nil] = Token['', 0] unless _opt_action[nil]
99
+ _opt_action.each do |pass, act|
100
+ vis_code = master.modify_action_code(act.value, nodes - attrs)
101
+ master.visitor[pass] <<
102
+ master.gen_defm_code("visit_Node_#{name} node",
103
+ vis_code, act.lineno)
104
+ end
105
+ master.gen_tmpl_code(:node, binding)
106
+ }
107
+ ;
108
+ defnode_header:
109
+ ID '(' ')' { [_ID.value, nil]}
110
+ | ID '(' fact_list ')' { [_ID.value, _fact_list] }
111
+ ;
112
+ opt_attr:
113
+ { [] }
114
+ | '[' ']' { [] }
115
+ | '[' id_list ']' { _id_list }
116
+ ;
117
+ fact_list:
118
+ fact { [_fact] }
119
+ | fact_list ',' fact { _fact_list.push _fact }
120
+ ;
121
+ fact:
122
+ ID { _ID.value }
123
+ | '-' ID { '-' + _ID.value }
124
+ ;
125
+ id_list:
126
+ ID { [ _ID.value ] }
127
+ | id_list ',' ID { _id_list.push _ID.value }
128
+ ;
129
+ opt_action:
130
+ { {nil => Token['', 0]} }
131
+ | ACTION { {nil => _ACTION} }
132
+ | pass_action_list
133
+ {
134
+ Hash.new(_pass_action_list).marge({nil => Token['', 0]})
135
+ }
136
+ ;
137
+ pass_action_list:
138
+ pass_action { _pass_action }
139
+ | pass_action_list pass_action { _pass_action_list << _pass_action }
140
+ ;
141
+
142
+ pass_action:
143
+ '<' ID '>' ACTION { [_ID.value, _ACTION]}
144
+ ;
145
+ #end-rule
146
+ %%
147
+ %hook postrhs
148
+ %banner '=>...'
149
+ %prec{
150
+ left LL '@'
151
+ %}
152
+ %%
153
+
154
+ %LEX{
155
+ /[ \t]+/ { }
156
+ /\r?\n/ { yield nil, nil }
157
+ /<</ { yield _Token(:LL, $&) }
158
+ /=>/ { yield _Token(:EG, $&) }
159
+ /%([a-zA-Z0-9_]+)((::[a-zA-Z0-9_]+)*)/
160
+ { yield _Token(:CONST, $1+$2) }
161
+ /%\((.+)\)%/ { yield _Token(:EMBED, $1) }
162
+ 'nil' { yield _Token(:NIL, $&) }
163
+ /[0-9]+/ { yield _Token(:NUMBER, $&.to_i) }
164
+ /:[a-zA-Z0-9_]+/ { yield _Token(:SYMBOL, $&) }
165
+ /[a-zA-Z][a-zA-Z0-9_]*/ { yield _Token(:ID, $&) }
166
+ /'(.+)'/ { yield _Token(:STR, $1) }
167
+ /./ { yield _Token($&, $&) }
168
+ %}
169
+ #begin-rule
170
+ start:
171
+ EG fnl
172
+ {
173
+ n = master.nrules
174
+ master.optouter <<
175
+ master.gen_defm_code("_ast_#{n} val", _fnl, _EG.lineno)
176
+ master.on_reduce[n] = ":_ast_#{n}"
177
+ }
178
+ ;
179
+ node:
180
+ ID '(' ')' { "Node_#{_ID.value}.new(basis.file.lineno)" }
181
+ | ID '(' fnlpair ')'
182
+ {
183
+ if g_parser.rhs.size > 0
184
+ "Node_#{_ID.value}.new(val[0].lineno, #{_fnlpair.join(', ')})"
185
+ else
186
+ "Node_#{_ID.value}.new(basis.file.lineno, #{_fnlpair.join(', ')})"
187
+ end
188
+ }
189
+ ;
190
+ fnlpair:
191
+ fnl { [_fnl] }
192
+ | fnlpair ',' fnl { _fnlpair << _fnl }
193
+ ;
194
+ fnl:
195
+ fact { _fact }
196
+ | node { _node }
197
+ | list { _list }
198
+ ;
199
+ fact:
200
+ ID opt_embed
201
+ {
202
+ unless i = g_parser.name_to_rhs_index(val[0].value)
203
+ warn "#{g_parser.lineno}: ?#{val[0].value}"
204
+ raise
205
+ end
206
+ "val[#{i}]#{val[1]}"
207
+ }
208
+ | CONST { "Depager::Token[#{_CONST.value}]" }
209
+ | SYMBOL { "Depager::Token[#{_SYMBOL.value}]" }
210
+ | STR { "Depager::Token['#{_STR.value}']" }
211
+ | NIL { "nil" }
212
+ | NUMBER { "Depager::Token[#{_NUMBER.value}]" }
213
+ ;
214
+ opt_embed:
215
+ { '' }
216
+ | EMBED { _EMBED.value }
217
+ ;
218
+ list:
219
+ '['']' { "NodeList.new(basis.file.lineno, [])" }
220
+ | '['fnlpair']'
221
+ {
222
+ if g_parser.rhs.size > 0
223
+ "NodeList.new(val[0].lineno, [#{_fnlpair.join(', ')}])"
224
+ else
225
+ "NodeList.new(basis.file.lineno, #{_fnlpair.join(', ')})"
226
+ end
227
+ }
228
+ | fnl-l LL fnl-r { "#{_l}.push(#{_r})" }
229
+ | fnl-l '@' fnl-r { "#{_l}.concat(#{_r})" }
230
+ ;
231
+ #end-rule
232
+ %%
@@ -0,0 +1,1249 @@
1
+
2
+ ###
3
+ ### ASTBuilderBaseExtension - Depager Extension (master)
4
+ ###
5
+ require 'pp.rb'
6
+ require 'depager/parser.rb'
7
+ require 'depager/parse_action'
8
+
9
+
10
+ module D4ASTBuilderBaseExtension #:nodoc:all
11
+ end
12
+
13
+ class ASTBuilderBaseExtension #:nodoc:all
14
+ include Depager::ExtensionUtils
15
+
16
+ attr_accessor :h2p
17
+
18
+ def initialize
19
+ @master = self
20
+ @hook = []
21
+ @h2p = {}
22
+ init_parser
23
+ end
24
+
25
+ def __regext__ p
26
+ super p, :default, nil
27
+
28
+ @hook[0] = ASTBuilderBaseExtension_prerulelist.new(p, @nparam, self)
29
+ @h2p['prerulelist'] = @hook[0]
30
+ p.prerulelist.push [@hook[0], :do_parse]
31
+
32
+ @hook[1] = ASTBuilderBaseExtension_postrhs.new(p, @nparam, self)
33
+ @h2p['postrhs'] = @hook[1]
34
+ p.postrhs.push [@hook[1], :do_parse]
35
+
36
+ regext p
37
+ end
38
+
39
+ ### Inner Code
40
+ attr_accessor :optouter, :on_reduce, :visitor
41
+ def init_parser
42
+ super
43
+ @visitor = Hash.new{|hash, key| hash[key] = []}
44
+ @optouter = []
45
+ @on_reduce = []
46
+ end
47
+ def postRuleList
48
+ g_parser.optouter <<
49
+ gen_action_decorator_code(target_name, paramkey,
50
+ @on_reduce, @optouter)
51
+ end
52
+
53
+ end
54
+
55
+ ### Outer Code
56
+
57
+ ###
58
+ ### ASTBuilderBaseExtension_prerulelist - Part of Depager Extension (slave)
59
+ ###
60
+ module D4ASTBuilderBaseExtension_prerulelist #:nodoc:all
61
+ end
62
+
63
+ class ASTBuilderBaseExtension_prerulelist < Basis #:nodoc:all
64
+ include Depager::ExtensionUtils
65
+
66
+ include ActionParser
67
+
68
+ ### Reduce Table
69
+ reduce_table = [
70
+ [ -1, 1 ],
71
+ [ 0, 3 ],
72
+ [ 1, 0 ],
73
+ [ 1, 3 ],
74
+ [ 2, 0 ],
75
+ [ 2, 2 ],
76
+ [ 3, 1 ],
77
+ [ 3, 2 ],
78
+ [ 6, 3 ],
79
+ [ 7, 3 ],
80
+ [ 7, 4 ],
81
+ [ 4, 0 ],
82
+ [ 4, 2 ],
83
+ [ 4, 3 ],
84
+ [ 8, 1 ],
85
+ [ 8, 3 ],
86
+ [ 10, 1 ],
87
+ [ 10, 2 ],
88
+ [ 9, 1 ],
89
+ [ 9, 3 ],
90
+ [ 5, 0 ],
91
+ [ 5, 1 ],
92
+ [ 5, 1 ],
93
+ [ 11, 1 ],
94
+ [ 11, 2 ],
95
+ [ 12, 4 ],
96
+ ]
97
+ ### Extension Params
98
+ nparams = {
99
+ 'NVAction' => 2,
100
+ }
101
+ ### Term to Int
102
+ t2i = {
103
+ nil => 0,
104
+ false => 1,
105
+ :NODE => 2,
106
+ :ACTION => 3,
107
+ :VISITOR => 4,
108
+ :ID => 5,
109
+ "(" => 6,
110
+ ")" => 7,
111
+ "[" => 8,
112
+ "]" => 9,
113
+ "," => 10,
114
+ "-" => 11,
115
+ "<" => 12,
116
+ ">" => 13,
117
+ }
118
+ ### Int to Term
119
+ i2t = [
120
+ nil,
121
+ false,
122
+ :NODE,
123
+ :ACTION,
124
+ :VISITOR,
125
+ :ID,
126
+ "(",
127
+ ")",
128
+ "[",
129
+ "]",
130
+ ",",
131
+ "-",
132
+ "<",
133
+ ">",
134
+ ]
135
+ ### Action Table
136
+ action_table = [
137
+ [ nil, nil, 1, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
138
+ [ nil, nil, nil, nil, nil, nil, nil, nil, 5, nil, nil, nil, nil, nil, ],
139
+ [ ACC, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
140
+ [ nil, nil, nil, nil, 6, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
141
+ [ nil, nil, nil, 8, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
142
+ [ nil, nil, nil, nil, nil, 10, nil, nil, nil, 9, nil, nil, nil, nil, ],
143
+ [ nil, nil, nil, 12, nil, nil, nil, nil, nil, nil, nil, nil, 16, nil, ],
144
+ [ nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, nil, nil, nil, nil, ],
145
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
146
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
147
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
148
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, 21, 22, nil, nil, nil, ],
149
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
150
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
151
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 16, nil, ],
152
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
153
+ [ nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, nil, nil, nil, nil, ],
154
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
155
+ [ nil, nil, nil, nil, nil, nil, 25, nil, nil, nil, nil, nil, nil, nil, ],
156
+ [ nil, nil, nil, nil, nil, nil, nil, nil, 5, nil, nil, nil, nil, nil, ],
157
+ [ nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, nil, nil, nil, nil, ],
158
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
159
+ [ nil, nil, nil, nil, nil, 28, nil, nil, nil, nil, nil, nil, nil, nil, ],
160
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
161
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 29, ],
162
+ [ nil, nil, nil, nil, nil, 31, nil, 34, nil, nil, nil, 32, nil, nil, ],
163
+ [ nil, nil, nil, 12, nil, nil, nil, nil, nil, nil, nil, nil, 16, nil, ],
164
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
165
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
166
+ [ nil, nil, nil, 36, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
167
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
168
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
169
+ [ nil, nil, nil, nil, nil, 37, nil, nil, nil, nil, nil, nil, nil, nil, ],
170
+ [ nil, nil, nil, nil, nil, nil, nil, 39, nil, nil, 38, nil, nil, nil, ],
171
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
172
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
173
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
174
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
175
+ [ nil, nil, nil, nil, nil, 31, nil, nil, nil, nil, nil, 32, nil, nil, ],
176
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
177
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
178
+ ]
179
+ ### Default Reduce Table
180
+ defred_table = [
181
+ -2,
182
+ -11,
183
+ nil,
184
+ -4,
185
+ nil,
186
+ nil,
187
+ -20,
188
+ nil,
189
+ -3,
190
+ -12,
191
+ -18,
192
+ nil,
193
+ -21,
194
+ -5,
195
+ -22,
196
+ -23,
197
+ nil,
198
+ -6,
199
+ nil,
200
+ -11,
201
+ -1,
202
+ -13,
203
+ nil,
204
+ -24,
205
+ nil,
206
+ nil,
207
+ -20,
208
+ -7,
209
+ -19,
210
+ nil,
211
+ -14,
212
+ -16,
213
+ nil,
214
+ nil,
215
+ -9,
216
+ -8,
217
+ -25,
218
+ -17,
219
+ nil,
220
+ -10,
221
+ -15,
222
+ ]
223
+ defred_after_shift_table = [
224
+ nil,
225
+ nil,
226
+ nil,
227
+ nil,
228
+ nil,
229
+ nil,
230
+ nil,
231
+ nil,
232
+ -3,
233
+ -12,
234
+ -18,
235
+ nil,
236
+ -21,
237
+ -5,
238
+ nil,
239
+ -23,
240
+ nil,
241
+ -6,
242
+ nil,
243
+ nil,
244
+ nil,
245
+ -13,
246
+ nil,
247
+ -24,
248
+ nil,
249
+ nil,
250
+ nil,
251
+ -7,
252
+ -19,
253
+ nil,
254
+ -14,
255
+ -16,
256
+ nil,
257
+ nil,
258
+ -9,
259
+ -8,
260
+ -25,
261
+ -17,
262
+ nil,
263
+ -10,
264
+ -15,
265
+ ]
266
+ ### Nonterm to Int
267
+ nt2i = {
268
+ :start => 0,
269
+ :opt_defnode => 1,
270
+ :opt_defvis => 2,
271
+ :defnode_list => 3,
272
+ :opt_attr => 4,
273
+ :opt_action => 5,
274
+ :defnode => 6,
275
+ :defnode_header => 7,
276
+ :fact_list => 8,
277
+ :id_list => 9,
278
+ :fact => 10,
279
+ :pass_action_list => 11,
280
+ :pass_action => 12,
281
+ }
282
+ ### Int to Nonterm
283
+ i2nt = [
284
+ :start,
285
+ :opt_defnode,
286
+ :opt_defvis,
287
+ :defnode_list,
288
+ :opt_attr,
289
+ :opt_action,
290
+ :defnode,
291
+ :defnode_header,
292
+ :fact_list,
293
+ :id_list,
294
+ :fact,
295
+ :pass_action_list,
296
+ :pass_action,
297
+ ]
298
+ ### Goto Table
299
+ goto_table = [
300
+ [ 2, 3, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
301
+ [ nil, nil, nil, nil, 4, nil, nil, nil, nil, nil, nil, nil, nil, ],
302
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
303
+ [ nil, nil, 7, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
304
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
305
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, 11, nil, nil, nil, ],
306
+ [ nil, nil, nil, nil, nil, 13, nil, nil, nil, nil, nil, 14, 15, ],
307
+ [ nil, nil, nil, 20, nil, nil, 17, 19, nil, nil, nil, nil, nil, ],
308
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
309
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
310
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
311
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
312
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
313
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
314
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 23, ],
315
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
316
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
317
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
318
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
319
+ [ nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, nil, nil, nil, ],
320
+ [ nil, nil, nil, nil, nil, nil, 27, 19, nil, nil, nil, nil, nil, ],
321
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
322
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
323
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
324
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
325
+ [ nil, nil, nil, nil, nil, nil, nil, nil, 33, nil, 30, nil, nil, ],
326
+ [ nil, nil, nil, nil, nil, 35, nil, nil, nil, nil, nil, 14, 15, ],
327
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
328
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
329
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
330
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
331
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
332
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
333
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
334
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
335
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
336
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
337
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
338
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, ],
339
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
340
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
341
+ ]
342
+
343
+ Tables = [ reduce_table, nparams, action_table,
344
+ defred_table, defred_after_shift_table, goto_table,
345
+ t2i, i2t, nt2i, i2nt ]
346
+
347
+ attr_accessor :p, :m
348
+ def initialize p, nparam, master = nil
349
+ super()
350
+ @g_parser = @p = p
351
+ @master = @m = master
352
+ @nparam = nparam
353
+ @dect = D4ASTBuilderBaseExtension_prerulelist::NVAction.new(self)
354
+ init_parser
355
+ end
356
+
357
+
358
+ def do_parse?
359
+ if @line =~ /^\s*%AST\{\s*\Z/
360
+ @line = $'
361
+ true
362
+ else
363
+ false
364
+ end
365
+ end
366
+
367
+
368
+ def banner
369
+ "%AST{ ... } / #{@master.class.name}"
370
+ end
371
+
372
+ ### Inner Code
373
+
374
+ def lex
375
+ begin
376
+ until @line.empty? do
377
+ case @line
378
+ when /\A\s+/, /\A#.*/
379
+
380
+ when /\A%\}\s*\Z/
381
+ @line = $'; yield nil,nil
382
+ when /\ANode/
383
+ yield _Token(:NODE, $&)
384
+ when /\AVisitor/
385
+ yield _Token(:VISITOR, $&)
386
+ when /\A[a-zA-Z][a-zA-Z0-9_]*/
387
+ yield _Token(:ID, $&)
388
+ when /\A\{/
389
+ ln = lineno; yield _Token(:ACTION, parse_action, ln); //=~''
390
+ when /\A./
391
+ yield _Token($&, $&)
392
+
393
+ else
394
+ raise RuntimeError, "must not happen #{@line}"
395
+ end
396
+ @oldline = @line
397
+ @line = $'
398
+ end
399
+ end while @line = getline
400
+ yield nil, nil
401
+ end
402
+
403
+ end
404
+
405
+ ### Outer Code
406
+
407
+ class D4ASTBuilderBaseExtension_prerulelist::NVAction < Depager::Action #:nodoc:all
408
+ include Depager::DecoratorUtils
409
+ include ActionParser
410
+
411
+ on_reduce = [
412
+ nil,
413
+ :_act_0,
414
+ :_act_1,
415
+ :_act_2,
416
+ :_act_3,
417
+ :_act_4,
418
+ :_act_5,
419
+ :_act_6,
420
+ :_act_7,
421
+ :_act_8,
422
+ :_act_9,
423
+ :_act_10,
424
+ :_act_11,
425
+ :_act_12,
426
+ :_act_13,
427
+ :_act_14,
428
+ :_act_15,
429
+ :_act_16,
430
+ :_act_17,
431
+ :_act_18,
432
+ :_act_19,
433
+ :_act_20,
434
+ :_act_21,
435
+ :_act_22,
436
+ :_act_23,
437
+ :_act_24,
438
+
439
+ ]
440
+ Tables = [on_reduce]
441
+ def initialize inside
442
+ super inside, 'NVAction'
443
+ @on_reduce, = self.class::Tables
444
+ init_parser
445
+ end
446
+
447
+
448
+ module_eval <<-'.,.,11802814595060.,.,', 'ast_base.dr', 36
449
+ def _act_0 val
450
+ _opt_defnode, _opt_defvis, _defnode_list = *val
451
+
452
+ g_parser.optouter.push _opt_defnode, val[2]
453
+ g_parser.optouter.push %{
454
+ class Visitor
455
+ def visit node
456
+ node.accept(self)
457
+ end
458
+ #{master.visitor[nil]}
459
+ end
460
+ };#code
461
+ master.visitor.each do |k, v|
462
+ g_parser.optouter.push %{
463
+ class Visitor_#{k}
464
+ #{v}
465
+ end
466
+ } if k ;#code
467
+ end
468
+
469
+ end
470
+
471
+ .,.,11802814595060.,.,
472
+
473
+ module_eval <<-'.,.,118028145910468.,.,', 'ast_base.dr', 56
474
+ def _act_1 val
475
+ ""
476
+
477
+ end
478
+
479
+ .,.,118028145910468.,.,
480
+
481
+ module_eval <<-'.,.,118028145948978.,.,', 'ast_base.dr', 58
482
+ def _act_2 val
483
+ _NODE, _opt_attr, _ACTION = *val
484
+
485
+ ini = %{
486
+ def initialize
487
+ #{_ACTION.value}
488
+ end
489
+ };#code
490
+ master.gen_tmpl_code(:defnode, binding)
491
+
492
+ end
493
+
494
+ .,.,118028145948978.,.,
495
+
496
+ module_eval <<-'.,.,118028145959009.,.,', 'ast_base.dr', 68
497
+ def _act_3 val
498
+ []
499
+
500
+ end
501
+
502
+ .,.,118028145959009.,.,
503
+
504
+ module_eval <<-'.,.,118028145914706.,.,', 'ast_base.dr', 70
505
+ def _act_4 val
506
+ _VISITOR, _opt_action = *val
507
+
508
+ _opt_action[nil] = Token['', 0] unless _opt_action[nil]
509
+ _opt_action.each do |pass, act|
510
+ master.visitor[pass].unshift(
511
+ master.gen_meval_code(act.lineno, 0, act.value.to_s))
512
+ end
513
+
514
+ end
515
+
516
+ .,.,118028145914706.,.,
517
+
518
+ module_eval <<-'.,.,118028145935339.,.,', 'ast_base.dr', 79
519
+ def _act_5 val
520
+ _defnode = *val
521
+ _defnode
522
+
523
+ end
524
+
525
+ .,.,118028145935339.,.,
526
+
527
+ module_eval <<-'.,.,11802814593872.,.,', 'ast_base.dr', 80
528
+ def _act_6 val
529
+ _defnode_list, _defnode = *val
530
+ _defnode_list << _defnode
531
+
532
+ end
533
+
534
+ .,.,11802814593872.,.,
535
+
536
+ module_eval <<-'.,.,118028145918044.,.,', 'ast_base.dr', 84
537
+ def _act_7 val
538
+ _defnode_header, _opt_attr, _opt_action = *val
539
+
540
+ name, args = _defnode_header
541
+ nodes, accept, attrs = [], '', _opt_attr
542
+ args.each do |i|
543
+ if i =~ /\-(.*)/
544
+ nodes.push $1
545
+ attrs.push $1
546
+ else
547
+ nodes.push i
548
+ accept << master.gen_accept_code(i)
549
+ end
550
+ end
551
+ _opt_action[nil] = Token['', 0] unless _opt_action[nil]
552
+ _opt_action.each do |pass, act|
553
+ vis_code = master.modify_action_code(act.value, nodes - attrs)
554
+ master.visitor[pass] <<
555
+ master.gen_defm_code("visit_Node_#{name} node",
556
+ vis_code, act.lineno)
557
+ end
558
+ master.gen_tmpl_code(:node, binding)
559
+
560
+ end
561
+
562
+ .,.,118028145918044.,.,
563
+
564
+ module_eval <<-'.,.,118028145922702.,.,', 'ast_base.dr', 107
565
+ def _act_8 val
566
+ _ID, _, _ = *val
567
+ [_ID.value, nil]
568
+
569
+ end
570
+
571
+ .,.,118028145922702.,.,
572
+
573
+ module_eval <<-'.,.,118028145943087.,.,', 'ast_base.dr', 108
574
+ def _act_9 val
575
+ _ID, _, _fact_list, _ = *val
576
+ [_ID.value, _fact_list]
577
+
578
+ end
579
+
580
+ .,.,118028145943087.,.,
581
+
582
+ module_eval <<-'.,.,118028145952231.,.,', 'ast_base.dr', 111
583
+ def _act_10 val
584
+ []
585
+
586
+ end
587
+
588
+ .,.,118028145952231.,.,
589
+
590
+ module_eval <<-'.,.,118028145935942.,.,', 'ast_base.dr', 112
591
+ def _act_11 val
592
+ _, _ = *val
593
+ []
594
+
595
+ end
596
+
597
+ .,.,118028145935942.,.,
598
+
599
+ module_eval <<-'.,.,11802814593749.,.,', 'ast_base.dr', 113
600
+ def _act_12 val
601
+ _, _id_list, _ = *val
602
+ _id_list
603
+
604
+ end
605
+
606
+ .,.,11802814593749.,.,
607
+
608
+ module_eval <<-'.,.,118028145926271.,.,', 'ast_base.dr', 116
609
+ def _act_13 val
610
+ _fact = *val
611
+ [_fact]
612
+
613
+ end
614
+
615
+ .,.,118028145926271.,.,
616
+
617
+ module_eval <<-'.,.,118028145923579.,.,', 'ast_base.dr', 117
618
+ def _act_14 val
619
+ _fact_list, _, _fact = *val
620
+ _fact_list.push _fact
621
+
622
+ end
623
+
624
+ .,.,118028145923579.,.,
625
+
626
+ module_eval <<-'.,.,118028145926511.,.,', 'ast_base.dr', 120
627
+ def _act_15 val
628
+ _ID = *val
629
+ _ID.value
630
+
631
+ end
632
+
633
+ .,.,118028145926511.,.,
634
+
635
+ module_eval <<-'.,.,118028145913425.,.,', 'ast_base.dr', 121
636
+ def _act_16 val
637
+ _, _ID = *val
638
+ '-' + _ID.value
639
+
640
+ end
641
+
642
+ .,.,118028145913425.,.,
643
+
644
+ module_eval <<-'.,.,118028145915593.,.,', 'ast_base.dr', 124
645
+ def _act_17 val
646
+ _ID = *val
647
+ [ _ID.value ]
648
+
649
+ end
650
+
651
+ .,.,118028145915593.,.,
652
+
653
+ module_eval <<-'.,.,118028145940054.,.,', 'ast_base.dr', 125
654
+ def _act_18 val
655
+ _id_list, _, _ID = *val
656
+ _id_list.push _ID.value
657
+
658
+ end
659
+
660
+ .,.,118028145940054.,.,
661
+
662
+ module_eval <<-'.,.,118028145930606.,.,', 'ast_base.dr', 128
663
+ def _act_19 val
664
+ {nil => Token['', 0]}
665
+
666
+ end
667
+
668
+ .,.,118028145930606.,.,
669
+
670
+ module_eval <<-'.,.,118028145946101.,.,', 'ast_base.dr', 129
671
+ def _act_20 val
672
+ _ACTION = *val
673
+ {nil => _ACTION}
674
+
675
+ end
676
+
677
+ .,.,118028145946101.,.,
678
+
679
+ module_eval <<-'.,.,11802814595489.,.,', 'ast_base.dr', 131
680
+ def _act_21 val
681
+ _pass_action_list = *val
682
+
683
+ Hash.new(_pass_action_list).marge({nil => Token['', 0]})
684
+
685
+ end
686
+
687
+ .,.,11802814595489.,.,
688
+
689
+ module_eval <<-'.,.,118028145917240.,.,', 'ast_base.dr', 136
690
+ def _act_22 val
691
+ _pass_action = *val
692
+ _pass_action
693
+
694
+ end
695
+
696
+ .,.,118028145917240.,.,
697
+
698
+ module_eval <<-'.,.,118028145943695.,.,', 'ast_base.dr', 137
699
+ def _act_23 val
700
+ _pass_action_list, _pass_action = *val
701
+ _pass_action_list << _pass_action
702
+
703
+ end
704
+
705
+ .,.,118028145943695.,.,
706
+
707
+ module_eval <<-'.,.,118028145933103.,.,', 'ast_base.dr', 141
708
+ def _act_24 val
709
+ _, _ID, _, _ACTION = *val
710
+ [_ID.value, _ACTION]
711
+
712
+ end
713
+
714
+ .,.,118028145933103.,.,
715
+
716
+ end
717
+
718
+
719
+ ###
720
+ ### ASTBuilderBaseExtension_postrhs - Part of Depager Extension (slave)
721
+ ###
722
+ module D4ASTBuilderBaseExtension_postrhs #:nodoc:all
723
+ end
724
+
725
+ class ASTBuilderBaseExtension_postrhs < Basis #:nodoc:all
726
+ include Depager::ExtensionUtils
727
+
728
+
729
+ ### Reduce Table
730
+ reduce_table = [
731
+ [ -1, 1 ],
732
+ [ 0, 2 ],
733
+ [ 2, 3 ],
734
+ [ 2, 4 ],
735
+ [ 3, 1 ],
736
+ [ 3, 3 ],
737
+ [ 1, 1 ],
738
+ [ 1, 1 ],
739
+ [ 1, 1 ],
740
+ [ 4, 2 ],
741
+ [ 4, 1 ],
742
+ [ 4, 1 ],
743
+ [ 4, 1 ],
744
+ [ 4, 1 ],
745
+ [ 4, 1 ],
746
+ [ 6, 0 ],
747
+ [ 6, 1 ],
748
+ [ 5, 2 ],
749
+ [ 5, 3 ],
750
+ [ 5, 3 ],
751
+ [ 5, 3 ],
752
+ ]
753
+ ### Extension Params
754
+ nparams = {
755
+ 'NVAction' => 2,
756
+ }
757
+ ### Term to Int
758
+ t2i = {
759
+ nil => 0,
760
+ false => 1,
761
+ :EG => 2,
762
+ :ID => 3,
763
+ "(" => 4,
764
+ ")" => 5,
765
+ "," => 6,
766
+ :CONST => 7,
767
+ :SYMBOL => 8,
768
+ :STR => 9,
769
+ :NIL => 10,
770
+ :NUMBER => 11,
771
+ :EMBED => 12,
772
+ "[" => 13,
773
+ "]" => 14,
774
+ :LL => 15,
775
+ "@" => 16,
776
+ }
777
+ ### Int to Term
778
+ i2t = [
779
+ nil,
780
+ false,
781
+ :EG,
782
+ :ID,
783
+ "(",
784
+ ")",
785
+ ",",
786
+ :CONST,
787
+ :SYMBOL,
788
+ :STR,
789
+ :NIL,
790
+ :NUMBER,
791
+ :EMBED,
792
+ "[",
793
+ "]",
794
+ :LL,
795
+ "@",
796
+ ]
797
+ ### Action Table
798
+ action_table = [
799
+ [ nil, nil, 2, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
800
+ [ ACC, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
801
+ [ nil, nil, nil, 5, nil, nil, nil, 12, 3, 6, 8, 10, nil, 13, nil, nil, nil, ],
802
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
803
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
804
+ [ nil, nil, nil, nil, 14, nil, nil, nil, nil, nil, nil, nil, 16, nil, nil, nil, nil, ],
805
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
806
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
807
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
808
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 17, 18, ],
809
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
810
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
811
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
812
+ [ nil, nil, nil, 5, nil, nil, nil, 12, 3, 6, 8, 10, nil, 13, 19, nil, nil, ],
813
+ [ nil, nil, nil, 5, nil, 22, nil, 12, 3, 6, 8, 10, nil, 13, nil, nil, nil, ],
814
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
815
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
816
+ [ nil, nil, nil, 5, nil, nil, nil, 12, 3, 6, 8, 10, nil, 13, nil, nil, nil, ],
817
+ [ nil, nil, nil, 5, nil, nil, nil, 12, 3, 6, 8, 10, nil, 13, nil, nil, nil, ],
818
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
819
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 17, 18, ],
820
+ [ nil, nil, nil, nil, nil, nil, 27, nil, nil, nil, nil, nil, nil, nil, 26, nil, nil, ],
821
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
822
+ [ nil, nil, nil, nil, nil, 28, 27, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
823
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 17, 18, ],
824
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 17, 18, ],
825
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
826
+ [ nil, nil, nil, 5, nil, nil, nil, 12, 3, 6, 8, 10, nil, 13, nil, nil, nil, ],
827
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
828
+ [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 17, 18, ],
829
+ ]
830
+ ### Default Reduce Table
831
+ defred_table = [
832
+ nil,
833
+ nil,
834
+ nil,
835
+ -11,
836
+ -6,
837
+ -15,
838
+ -12,
839
+ -8,
840
+ -13,
841
+ -1,
842
+ -14,
843
+ -7,
844
+ -10,
845
+ nil,
846
+ nil,
847
+ -9,
848
+ -16,
849
+ nil,
850
+ nil,
851
+ -17,
852
+ -4,
853
+ nil,
854
+ -2,
855
+ nil,
856
+ -19,
857
+ -20,
858
+ -18,
859
+ nil,
860
+ -3,
861
+ -5,
862
+ ]
863
+ defred_after_shift_table = [
864
+ nil,
865
+ nil,
866
+ nil,
867
+ -11,
868
+ -6,
869
+ nil,
870
+ -12,
871
+ -8,
872
+ -13,
873
+ nil,
874
+ -14,
875
+ -7,
876
+ -10,
877
+ nil,
878
+ nil,
879
+ -9,
880
+ -16,
881
+ nil,
882
+ nil,
883
+ -17,
884
+ nil,
885
+ nil,
886
+ -2,
887
+ nil,
888
+ nil,
889
+ nil,
890
+ -18,
891
+ nil,
892
+ -3,
893
+ nil,
894
+ ]
895
+ ### Nonterm to Int
896
+ nt2i = {
897
+ :start => 0,
898
+ :fnl => 1,
899
+ :node => 2,
900
+ :fnlpair => 3,
901
+ :fact => 4,
902
+ :list => 5,
903
+ :opt_embed => 6,
904
+ }
905
+ ### Int to Nonterm
906
+ i2nt = [
907
+ :start,
908
+ :fnl,
909
+ :node,
910
+ :fnlpair,
911
+ :fact,
912
+ :list,
913
+ :opt_embed,
914
+ ]
915
+ ### Goto Table
916
+ goto_table = [
917
+ [ 1, nil, nil, nil, nil, nil, nil, ],
918
+ [ nil, nil, nil, nil, nil, nil, nil, ],
919
+ [ nil, 9, 11, nil, 4, 7, nil, ],
920
+ [ nil, nil, nil, nil, nil, nil, nil, ],
921
+ [ nil, nil, nil, nil, nil, nil, nil, ],
922
+ [ nil, nil, nil, nil, nil, nil, 15, ],
923
+ [ nil, nil, nil, nil, nil, nil, nil, ],
924
+ [ nil, nil, nil, nil, nil, nil, nil, ],
925
+ [ nil, nil, nil, nil, nil, nil, nil, ],
926
+ [ nil, nil, nil, nil, nil, nil, nil, ],
927
+ [ nil, nil, nil, nil, nil, nil, nil, ],
928
+ [ nil, nil, nil, nil, nil, nil, nil, ],
929
+ [ nil, nil, nil, nil, nil, nil, nil, ],
930
+ [ nil, 20, 11, 21, 4, 7, nil, ],
931
+ [ nil, 20, 11, 23, 4, 7, nil, ],
932
+ [ nil, nil, nil, nil, nil, nil, nil, ],
933
+ [ nil, nil, nil, nil, nil, nil, nil, ],
934
+ [ nil, 24, 11, nil, 4, 7, nil, ],
935
+ [ nil, 25, 11, nil, 4, 7, nil, ],
936
+ [ nil, nil, nil, nil, nil, nil, nil, ],
937
+ [ nil, nil, nil, nil, nil, nil, nil, ],
938
+ [ nil, nil, nil, nil, nil, nil, nil, ],
939
+ [ nil, nil, nil, nil, nil, nil, nil, ],
940
+ [ nil, nil, nil, nil, nil, nil, nil, ],
941
+ [ nil, nil, nil, nil, nil, nil, nil, ],
942
+ [ nil, nil, nil, nil, nil, nil, nil, ],
943
+ [ nil, nil, nil, nil, nil, nil, nil, ],
944
+ [ nil, 29, 11, nil, 4, 7, nil, ],
945
+ [ nil, nil, nil, nil, nil, nil, nil, ],
946
+ [ nil, nil, nil, nil, nil, nil, nil, ],
947
+ ]
948
+
949
+ Tables = [ reduce_table, nparams, action_table,
950
+ defred_table, defred_after_shift_table, goto_table,
951
+ t2i, i2t, nt2i, i2nt ]
952
+
953
+ attr_accessor :p, :m
954
+ def initialize p, nparam, master = nil
955
+ super()
956
+ @g_parser = @p = p
957
+ @master = @m = master
958
+ @nparam = nparam
959
+ @dect = D4ASTBuilderBaseExtension_postrhs::NVAction.new(self)
960
+ init_parser
961
+ end
962
+
963
+
964
+
965
+ def banner
966
+ "=>... / #{@master.class.name}"
967
+ end
968
+
969
+ ### Inner Code
970
+
971
+ def lex
972
+ begin
973
+ until @line.empty? do
974
+ case @line
975
+ when /\A[ \t]+/
976
+
977
+ when /\A\r?\n/
978
+ yield nil, nil
979
+ when /\A<</
980
+ yield _Token(:LL, $&)
981
+ when /\A=>/
982
+ yield _Token(:EG, $&)
983
+ when /\A%([a-zA-Z0-9_]+)((::[a-zA-Z0-9_]+)*)/
984
+ yield _Token(:CONST, $1+$2)
985
+ when /\A%\((.+)\)%/
986
+ yield _Token(:EMBED, $1)
987
+ when /\Anil/
988
+ yield _Token(:NIL, $&)
989
+ when /\A[0-9]+/
990
+ yield _Token(:NUMBER, $&.to_i)
991
+ when /\A:[a-zA-Z0-9_]+/
992
+ yield _Token(:SYMBOL, $&)
993
+ when /\A[a-zA-Z][a-zA-Z0-9_]*/
994
+ yield _Token(:ID, $&)
995
+ when /\A'(.+)'/
996
+ yield _Token(:STR, $1)
997
+ when /\A./
998
+ yield _Token($&, $&)
999
+
1000
+ else
1001
+ raise RuntimeError, "must not happen #{@line}"
1002
+ end
1003
+ @oldline = @line
1004
+ @line = $'
1005
+ end
1006
+ end while @line = getline
1007
+ yield nil, nil
1008
+ end
1009
+
1010
+ end
1011
+
1012
+ ### Outer Code
1013
+
1014
+ class D4ASTBuilderBaseExtension_postrhs::NVAction < Depager::Action #:nodoc:all
1015
+ include Depager::DecoratorUtils
1016
+
1017
+ on_reduce = [
1018
+ nil,
1019
+ :_act_0,
1020
+ :_act_1,
1021
+ :_act_2,
1022
+ :_act_3,
1023
+ :_act_4,
1024
+ :_act_5,
1025
+ :_act_6,
1026
+ :_act_7,
1027
+ :_act_8,
1028
+ :_act_9,
1029
+ :_act_10,
1030
+ :_act_11,
1031
+ :_act_12,
1032
+ :_act_13,
1033
+ :_act_14,
1034
+ :_act_15,
1035
+ :_act_16,
1036
+ :_act_17,
1037
+ :_act_18,
1038
+ :_act_19,
1039
+
1040
+ ]
1041
+ Tables = [on_reduce]
1042
+ def initialize inside
1043
+ super inside, 'NVAction'
1044
+ @on_reduce, = self.class::Tables
1045
+ init_parser
1046
+ end
1047
+
1048
+
1049
+ module_eval <<-'.,.,118028145920523.,.,', 'ast_base.dr', 170
1050
+ def _act_0 val
1051
+ _EG, _fnl = *val
1052
+
1053
+ n = master.nrules
1054
+ master.optouter <<
1055
+ master.gen_defm_code("_ast_#{n} val", _fnl, _EG.lineno)
1056
+ master.on_reduce[n] = ":_ast_#{n}"
1057
+
1058
+ end
1059
+
1060
+ .,.,118028145920523.,.,
1061
+
1062
+ module_eval <<-'.,.,118028145933310.,.,', 'ast_base.dr', 178
1063
+ def _act_1 val
1064
+ _ID, _, _ = *val
1065
+ "Node_#{_ID.value}.new(basis.file.lineno)"
1066
+
1067
+ end
1068
+
1069
+ .,.,118028145933310.,.,
1070
+
1071
+ module_eval <<-'.,.,118028145931729.,.,', 'ast_base.dr', 180
1072
+ def _act_2 val
1073
+ _ID, _, _fnlpair, _ = *val
1074
+
1075
+ if g_parser.rhs.size > 0
1076
+ "Node_#{_ID.value}.new(val[0].lineno, #{_fnlpair.join(', ')})"
1077
+ else
1078
+ "Node_#{_ID.value}.new(basis.file.lineno, #{_fnlpair.join(', ')})"
1079
+ end
1080
+
1081
+ end
1082
+
1083
+ .,.,118028145931729.,.,
1084
+
1085
+ module_eval <<-'.,.,118028145932240.,.,', 'ast_base.dr', 189
1086
+ def _act_3 val
1087
+ _fnl = *val
1088
+ [_fnl]
1089
+
1090
+ end
1091
+
1092
+ .,.,118028145932240.,.,
1093
+
1094
+ module_eval <<-'.,.,11802814592286.,.,', 'ast_base.dr', 190
1095
+ def _act_4 val
1096
+ _fnlpair, _, _fnl = *val
1097
+ _fnlpair << _fnl
1098
+
1099
+ end
1100
+
1101
+ .,.,11802814592286.,.,
1102
+
1103
+ module_eval <<-'.,.,118028145958117.,.,', 'ast_base.dr', 193
1104
+ def _act_5 val
1105
+ _fact = *val
1106
+ _fact
1107
+
1108
+ end
1109
+
1110
+ .,.,118028145958117.,.,
1111
+
1112
+ module_eval <<-'.,.,118028145929246.,.,', 'ast_base.dr', 194
1113
+ def _act_6 val
1114
+ _node = *val
1115
+ _node
1116
+
1117
+ end
1118
+
1119
+ .,.,118028145929246.,.,
1120
+
1121
+ module_eval <<-'.,.,11802814599659.,.,', 'ast_base.dr', 195
1122
+ def _act_7 val
1123
+ _list = *val
1124
+ _list
1125
+
1126
+ end
1127
+
1128
+ .,.,11802814599659.,.,
1129
+
1130
+ module_eval <<-'.,.,11802814595130.,.,', 'ast_base.dr', 199
1131
+ def _act_8 val
1132
+ _ID, _opt_embed = *val
1133
+
1134
+ unless i = g_parser.name_to_rhs_index(val[0].value)
1135
+ warn "#{g_parser.lineno}: ?#{val[0].value}"
1136
+ raise
1137
+ end
1138
+ "val[#{i}]#{val[1]}"
1139
+
1140
+ end
1141
+
1142
+ .,.,11802814595130.,.,
1143
+
1144
+ module_eval <<-'.,.,118028145918865.,.,', 'ast_base.dr', 206
1145
+ def _act_9 val
1146
+ _CONST = *val
1147
+ "Depager::Token[#{_CONST.value}]"
1148
+
1149
+ end
1150
+
1151
+ .,.,118028145918865.,.,
1152
+
1153
+ module_eval <<-'.,.,118028145942743.,.,', 'ast_base.dr', 207
1154
+ def _act_10 val
1155
+ _SYMBOL = *val
1156
+ "Depager::Token[#{_SYMBOL.value}]"
1157
+
1158
+ end
1159
+
1160
+ .,.,118028145942743.,.,
1161
+
1162
+ module_eval <<-'.,.,118028145949711.,.,', 'ast_base.dr', 208
1163
+ def _act_11 val
1164
+ _STR = *val
1165
+ "Depager::Token['#{_STR.value}']"
1166
+
1167
+ end
1168
+
1169
+ .,.,118028145949711.,.,
1170
+
1171
+ module_eval <<-'.,.,118028145937354.,.,', 'ast_base.dr', 209
1172
+ def _act_12 val
1173
+ _NIL = *val
1174
+ "nil"
1175
+
1176
+ end
1177
+
1178
+ .,.,118028145937354.,.,
1179
+
1180
+ module_eval <<-'.,.,11802814595860.,.,', 'ast_base.dr', 210
1181
+ def _act_13 val
1182
+ _NUMBER = *val
1183
+ "Depager::Token[#{_NUMBER.value}]"
1184
+
1185
+ end
1186
+
1187
+ .,.,11802814595860.,.,
1188
+
1189
+ module_eval <<-'.,.,118028145945394.,.,', 'ast_base.dr', 213
1190
+ def _act_14 val
1191
+ ''
1192
+
1193
+ end
1194
+
1195
+ .,.,118028145945394.,.,
1196
+
1197
+ module_eval <<-'.,.,11802814596768.,.,', 'ast_base.dr', 214
1198
+ def _act_15 val
1199
+ _EMBED = *val
1200
+ _EMBED.value
1201
+
1202
+ end
1203
+
1204
+ .,.,11802814596768.,.,
1205
+
1206
+ module_eval <<-'.,.,118028145922451.,.,', 'ast_base.dr', 217
1207
+ def _act_16 val
1208
+ _, _ = *val
1209
+ "NodeList.new(basis.file.lineno, [])"
1210
+
1211
+ end
1212
+
1213
+ .,.,118028145922451.,.,
1214
+
1215
+ module_eval <<-'.,.,118028145947303.,.,', 'ast_base.dr', 219
1216
+ def _act_17 val
1217
+ _, _fnlpair, _ = *val
1218
+
1219
+ if g_parser.rhs.size > 0
1220
+ "NodeList.new(val[0].lineno, [#{_fnlpair.join(', ')}])"
1221
+ else
1222
+ "NodeList.new(basis.file.lineno, #{_fnlpair.join(', ')})"
1223
+ end
1224
+
1225
+ end
1226
+
1227
+ .,.,118028145947303.,.,
1228
+
1229
+ module_eval <<-'.,.,118028145933697.,.,', 'ast_base.dr', 226
1230
+ def _act_18 val
1231
+ _l, _LL, _r = *val
1232
+ "#{_l}.push(#{_r})"
1233
+
1234
+ end
1235
+
1236
+ .,.,118028145933697.,.,
1237
+
1238
+ module_eval <<-'.,.,118028145918237.,.,', 'ast_base.dr', 227
1239
+ def _act_19 val
1240
+ _l, _, _r = *val
1241
+ "#{_l}.concat(#{_r})"
1242
+
1243
+ end
1244
+
1245
+ .,.,118028145918237.,.,
1246
+
1247
+ end
1248
+
1249
+