depager 0.2.2 → 0.2.3

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 (62) hide show
  1. data/ChangeLog +4 -0
  2. data/README.ja +27 -28
  3. data/examples/c89/c89.dr +34 -34
  4. data/examples/c89/c89.tab.rb +3074 -3074
  5. data/examples/extension/paction.dr +4 -4
  6. data/examples/extension/pactiontest.dr +1 -1
  7. data/examples/pl0d/pl0ds.dr +27 -27
  8. data/examples/pl0d/pl0ds.tab.rb +626 -643
  9. data/examples/sample_calc/calc.action.dr +6 -6
  10. data/examples/sample_calc/calc.action.tab.rb +90 -90
  11. data/examples/sample_calc/calc.ast.action.dr +7 -7
  12. data/examples/sample_calc/calc.ast.action.tab.rb +121 -127
  13. data/examples/sample_calc/calc.ast.dr +6 -6
  14. data/examples/sample_calc/calc.ast.tab.rb +102 -109
  15. data/examples/sample_calc/calc.astdf.dr +6 -6
  16. data/examples/sample_calc/calc.astdf.tab.rb +102 -109
  17. data/examples/sample_calc/calc.atree.dr +6 -6
  18. data/examples/sample_calc/calc.atree.tab.rb +90 -90
  19. data/examples/sample_calc/calc.cst.dr +5 -5
  20. data/examples/sample_calc/calc.cst.tab.rb +106 -106
  21. data/examples/sample_calc/calc.dr +1 -1
  22. data/examples/sample_calc/calc.lex.dr +4 -4
  23. data/examples/sample_calc/calc.lex.tab.rb +73 -73
  24. data/examples/sample_calc/calc.nvaction.dr +6 -6
  25. data/examples/sample_calc/calc.nvaction.tab.rb +90 -90
  26. data/examples/sample_calc/calc.tab.rb +71 -71
  27. data/examples/sample_calc/calc_prec.nvaction.dr +6 -6
  28. data/examples/sample_calc/calc_prec.nvaction.tab.rb +46 -46
  29. data/examples/slex_test/divreg.slex.dr +7 -7
  30. data/examples/slex_test/divreg.slex.tab.rb +20 -20
  31. data/examples/slex_test/ljoin.slex.dr +7 -7
  32. data/examples/slex_test/ljoin.slex.tab.rb +15 -15
  33. data/lib/depager.rb +45 -83
  34. data/lib/depager/grammar.rb +3 -7
  35. data/lib/depager/lr.rb +123 -1
  36. data/lib/depager/parser.rb +29 -48
  37. data/lib/depager/{template/ast.erbs → ruby/plugins/_ast_tmpl.rb} +11 -7
  38. data/lib/depager/{action.rb → ruby/plugins/action.rb} +7 -11
  39. data/lib/depager/{ast.dr → ruby/plugins/ast.dr} +24 -25
  40. data/lib/depager/{ast.rb → ruby/plugins/ast.rb} +241 -243
  41. data/lib/depager/{astdf.rb → ruby/plugins/astdf.rb} +1 -2
  42. data/lib/depager/{atree.dr → ruby/plugins/atree.dr} +5 -5
  43. data/lib/depager/{atree.rb → ruby/plugins/atree.rb} +39 -39
  44. data/lib/depager/{cst.dr → ruby/plugins/cst.dr} +17 -21
  45. data/lib/depager/{cst.rb → ruby/plugins/cst.rb} +62 -68
  46. data/lib/depager/{lex.dr → ruby/plugins/lex.dr} +3 -4
  47. data/lib/depager/{lex.rb → ruby/plugins/lex.rb} +29 -31
  48. data/lib/depager/{nvaction.rb → ruby/plugins/nvaction.rb} +1 -3
  49. data/lib/depager/{slex.dr → ruby/plugins/slex.dr} +16 -17
  50. data/lib/depager/{slex.rb → ruby/plugins/slex.rb} +115 -117
  51. data/lib/depager/{srp.rb → ruby/plugins/srp.rb} +4 -4
  52. data/lib/depager/{template → ruby/templates}/extension_lalr_master.erb +6 -6
  53. data/lib/depager/{template → ruby/templates}/extension_lalr_slave.erb +0 -0
  54. data/lib/depager/{template → ruby/templates}/simple.erb +0 -0
  55. data/lib/depager/{template → ruby/templates}/single_lalr_parser.erb +0 -0
  56. data/lib/depager/utils.rb +30 -69
  57. data/lib/depager/version.rb +1 -1
  58. metadata +59 -56
  59. data/examples/Rakefile +0 -36
  60. data/lib/depager/Rakefile +0 -34
  61. data/lib/depager/lr_put_table.rb +0 -116
  62. data/lib/depager/parse_action.rb +0 -24
@@ -20,7 +20,7 @@ class ShiftReducePrinter < Depager::LALR::AdvancedParser
20
20
  end
21
21
  r
22
22
  end
23
- def afterShift
23
+ def after_shift
24
24
  st0 = _stack[_stack.size-3]
25
25
  st = _stack.last
26
26
  sh = @i2t[_stack[_stack.size-2][0]]
@@ -29,7 +29,7 @@ class ShiftReducePrinter < Depager::LALR::AdvancedParser
29
29
  warn "LINE:<#{@basis.line}>"
30
30
  warn dumpstack(_stack) + "\n"
31
31
  end
32
- def afterReduce
32
+ def after_reduce
33
33
  st = _stack.last
34
34
  re = @i2nt[_stack[_stack.size-2][0]]
35
35
  la = @i2t[_lookahead[0]]
@@ -37,10 +37,10 @@ class ShiftReducePrinter < Depager::LALR::AdvancedParser
37
37
  warn "LINE:<#{@basis.line}>"
38
38
  warn dumpstack(_stack) + "\n"
39
39
  end
40
- def afterAccept
40
+ def after_accept
41
41
  warn "acc."
42
42
  end
43
- def afterError
43
+ def after_error
44
44
  st = _stack.last
45
45
  re = @i2nt[_stack[_stack.size-2][0]]
46
46
  la = @i2t[_lookahead[0]]
@@ -34,12 +34,12 @@ class <%= target_name %> #:nodoc:all
34
34
 
35
35
  def __regext__ p
36
36
  super p, <%= paramkey %>, nil
37
- <% x = 0; h = {}; regs.each do |i, m|; if m%>
38
- <%unless h[m[1]]%>@hook[<%=x%>] = <%=m[1]%>.new(p, @nparam, self)<%h[m[1]]=x%>
39
- @h2p['<%=m[1].sub(/#{target_name}_/,'')%>'] = @hook[<%=h[m[1]]%>] <%else
40
- %># use @hook[<%=h[m[1]]%>](<%=m[1]%>)<%end%>
41
- p.<%=i%>.push [@hook[<%=h[m[1]]%>], :do_parse]
42
- <% x+=1; end; end%>
37
+ <% x = 0; h = {}; regs.each do |i, m| %>
38
+ <% unless h[m] %>@hook[<%=x%>] = <%= m %>.new(p, @nparam, self)<%h[m]=x%>
39
+ @h2p['<%= m.sub(/#{target_name}_/,'')%>'] = @hook[<%=h[m]%>] <%else
40
+ %># use @hook[<%=h[m]%>](<%=m%>)<%end%>
41
+ p.hooks[:<%=i%>].push [@hook[<%=h[m]%>], :do_parse]
42
+ <% x+=1; end %>
43
43
  regext p
44
44
  end
45
45
 
@@ -129,39 +129,35 @@ module Depager
129
129
  unindent(code).sub!('$$!!@ BODY @!!$$', body)
130
130
  end
131
131
 
132
- #
133
- # generate code from template
134
- #
135
- # tmpl:: template symbol
136
- # b:: binding
137
- # lineno:: line no
138
- # d:: input line no - output line no
139
- #
140
- def gen_tmpl_code tmpl, b, lineno=nil, d=nil
141
- erb = ERB.new(self.class::Template[tmpl])
142
- erb.result(b)
143
- end
144
-
145
- #
146
- # make template from file
147
- #
148
- # fname:: template file name
149
- #
150
- def make_tmpl fname
151
- tmpl = File.read(fname).split(/===/)
152
- tmpl = tmpl.map{|i| i.match(/^:(\S+)/) and [$1.intern, $'] }
153
- Hash[*tmpl.compact.flatten]
154
- end
155
- module_function :make_tmpl
156
-
157
132
  # unindent
158
133
  def unindent s
159
134
  s = s.join rescue s.to_s
160
135
  ind = s.match(/\n(\s+)/)
161
136
  s.gsub(/^#{ind[1]}/m, '')
162
137
  end
163
- end
164
138
 
139
+ def parse_action
140
+ val = ''
141
+ start_lineno = lineno
142
+ if @line =~ /\A\s*\{(.*)\}\s*(#.*)?\Z/
143
+ val = " #{$1}\n"
144
+ else
145
+ val.concat @line.sub(/\A\s*\{/, '')
146
+ ind = @line0.match(/\A([ \t]*)/)[1]
147
+ until file.eof?
148
+ getline
149
+ break if line =~ /\A#{ind}\}\s*(#.*)?\Z/
150
+ val.concat line
151
+ end
152
+ if file.eof?
153
+ error_exit 'syntax error(parse_action).', start_lineno
154
+ end
155
+ end
156
+ @line = $'
157
+ # warn "--action--\n#{val}"
158
+ return val
159
+ end
160
+ end
165
161
 
166
162
  #
167
163
  # Utilities for Extension
@@ -172,7 +168,6 @@ module Depager
172
168
  def g_parser
173
169
  @g_parser
174
170
  end
175
- alias gp g_parser # for compat
176
171
 
177
172
  # master parser
178
173
  def master
@@ -184,27 +179,11 @@ module Depager
184
179
  @g_parser.target_name
185
180
  end
186
181
 
187
- # get current token
188
- def token
189
- @g_parser.token
190
- end
191
-
192
182
  # get current line
193
183
  def line
194
184
  @g_parser.line
195
185
  end
196
186
 
197
- # fix current line using s
198
- # s:: fix string
199
- def fixline s
200
- @g_parser.line = s
201
- end
202
-
203
- # get next token
204
- def gettoken
205
- @g_parser.gettoken
206
- end
207
-
208
187
  # end of file?
209
188
  def eof?
210
189
  @g_parser.eof?
@@ -260,13 +239,11 @@ module Depager
260
239
 
261
240
  protected
262
241
  # initialize method
263
- def init_parser
264
- end
242
+ def init_parser ; end
265
243
 
266
244
  # do default action
267
245
  # for generated extensions
268
- def do_default
269
- end
246
+ def do_default ; end
270
247
 
271
248
  # do default action?
272
249
  # for generated extensions
@@ -281,30 +258,17 @@ module Depager
281
258
  init_parser
282
259
  @line = @g_parser.oldline
283
260
  if do_parse?
284
- ret = @dect.yyparse @g_parser.files
285
- @g_parser.line = @line
286
- @g_parser.gettoken
261
+ ret = @dect.parse @g_parser.files
262
+ @g_parser.update_context @line
287
263
  ret
288
264
  else
289
265
  do_default
290
266
  end
291
267
  end
292
268
 
293
- Hooks = {
294
- "prerulelist" => true,
295
- "postrulelist" => true,
296
- "prerule" => true,
297
- "postrule" => true,
298
- "postlhs" => true,
299
- "postrhslist" => true,
300
- "prerhslist" => true,
301
- "prerhs" => true,
302
- "postrhs" => true,
303
- } #:nodoc:
304
-
305
269
  # register extension (for users)
306
- def regext p
307
- end
270
+ def regext p ; end
271
+
308
272
  # register extension (default)
309
273
  def __regext__ p, key=:default, reg_p=true
310
274
  @g_parser = @p = p
@@ -313,11 +277,8 @@ module Depager
313
277
  when :default ; @g_parser.getnparam(paramkey)
314
278
  else ; @g_parser.getnparam(key)
315
279
  end
316
- self.methods.sort.each do |m|
317
- h = m.to_s.downcase
318
- if Hooks[h]
319
- p.send(h).push [self, m.intern]
320
- end
280
+ self.methods.sort.each do |m| m = m.to_sym
281
+ p.hooks[m].push [self, m] if GrammarParser.hook_name? m
321
282
  end
322
283
  regext p if reg_p
323
284
  end
@@ -1,3 +1,3 @@
1
1
  module Depager
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.3'
3
3
  end
metadata CHANGED
@@ -1,33 +1,26 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
3
- specification_version: 1
4
2
  name: depager
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.2.2
7
- date: 2008-05-05 00:00:00 +09:00
8
- summary: A self extensible parser generator.
9
- require_paths:
10
- - lib
11
- email: maita@fujiyama.slis.tsukuba.ac.jp
12
- homepage: http://depager.rubyforge.org
13
- rubyforge_project: depager
14
- description: A self extensible parser generator.
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.2.3
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - maita
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-11-24 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: A self extensible parser generator.
17
+ email: maita@fujiyama.slis.tsukuba.ac.jp
18
+ executables:
19
+ - depager
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
31
24
  files:
32
25
  - ChangeLog
33
26
  - README.en
@@ -35,7 +28,6 @@ files:
35
28
  - bin/depager
36
29
  - data/depager/misc/depager-mode.el
37
30
  - data/depager/pre-setup.rb
38
- - examples/Rakefile
39
31
  - examples/c89/c89.dr
40
32
  - examples/c89/c89.tab.rb
41
33
  - examples/c89/test.c89
@@ -72,45 +64,56 @@ files:
72
64
  - examples/slex_test/test.divreg
73
65
  - examples/slex_test/test.ljoin
74
66
  - lib/depager.rb
75
- - lib/depager/Rakefile
76
- - lib/depager/action.rb
77
- - lib/depager/ast.dr
78
- - lib/depager/ast.rb
79
- - lib/depager/astdf.rb
80
- - lib/depager/atree.dr
81
- - lib/depager/atree.rb
82
- - lib/depager/cst.dr
83
- - lib/depager/cst.rb
84
67
  - lib/depager/grammar.rb
85
- - lib/depager/lex.dr
86
- - lib/depager/lex.rb
87
68
  - lib/depager/lr.rb
88
- - lib/depager/lr_put_table.rb
89
- - lib/depager/nvaction.rb
90
- - lib/depager/parse_action.rb
91
69
  - lib/depager/parser.rb
92
- - lib/depager/slex.dr
93
- - lib/depager/slex.rb
94
- - lib/depager/srp.rb
95
- - lib/depager/template/ast.erbs
96
- - lib/depager/template/extension_lalr_master.erb
97
- - lib/depager/template/extension_lalr_slave.erb
98
- - lib/depager/template/simple.erb
99
- - lib/depager/template/single_lalr_parser.erb
70
+ - lib/depager/ruby/plugins/_ast_tmpl.rb
71
+ - lib/depager/ruby/plugins/action.rb
72
+ - lib/depager/ruby/plugins/ast.dr
73
+ - lib/depager/ruby/plugins/ast.rb
74
+ - lib/depager/ruby/plugins/astdf.rb
75
+ - lib/depager/ruby/plugins/atree.dr
76
+ - lib/depager/ruby/plugins/atree.rb
77
+ - lib/depager/ruby/plugins/cst.dr
78
+ - lib/depager/ruby/plugins/cst.rb
79
+ - lib/depager/ruby/plugins/lex.dr
80
+ - lib/depager/ruby/plugins/lex.rb
81
+ - lib/depager/ruby/plugins/nvaction.rb
82
+ - lib/depager/ruby/plugins/slex.dr
83
+ - lib/depager/ruby/plugins/slex.rb
84
+ - lib/depager/ruby/plugins/srp.rb
85
+ - lib/depager/ruby/templates/extension_lalr_master.erb
86
+ - lib/depager/ruby/templates/extension_lalr_slave.erb
87
+ - lib/depager/ruby/templates/simple.erb
88
+ - lib/depager/ruby/templates/single_lalr_parser.erb
100
89
  - lib/depager/utils.rb
101
90
  - lib/depager/version.rb
102
91
  - setup.rb
103
- test_files: []
104
-
92
+ has_rdoc: true
93
+ homepage: http://depager.rubyforge.org
94
+ post_install_message:
105
95
  rdoc_options: []
106
96
 
107
- extra_rdoc_files: []
108
-
109
- executables:
110
- - depager
111
- extensions: []
112
-
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: "0"
104
+ version:
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: "0"
110
+ version:
113
111
  requirements: []
114
112
 
115
- dependencies: []
113
+ rubyforge_project: depager
114
+ rubygems_version: 1.0.1
115
+ signing_key:
116
+ specification_version: 2
117
+ summary: A self extensible parser generator.
118
+ test_files: []
116
119
 
@@ -1,36 +0,0 @@
1
- Dir.chdir(File.dirname(__FILE__))
2
-
3
- require 'rake/clean'
4
-
5
- DIRS = ['pl0d', 'sample_calc', 'slex_test', 'c89']
6
- SRC = DIRS.map{|d| Dir["#{d}/*.dr"] }.flatten
7
- OBJ = SRC.map{|i| i.sub(/\.dr$/, '.tab.rb')}
8
- CLEAN.include(OBJ)
9
-
10
- LIBDIR = "../lib"
11
- BINDIR = "../bin"
12
-
13
- SRC.each do |fn|
14
- fn.match(/^([^\/]+)\/([^.]+)(\..+)?\.dr$/)
15
- dir = $1
16
- base = $2
17
- dst = "#{dir}/#{$2}#{$3}.tab.rb"
18
- exts = $3 && $3.split('.')[1 .. -1]
19
- depends = exts ? exts.map{|i| "#{LIBDIR}/depager/#{i}.rb" } : []
20
- depends = depends.unshift fn
21
- test_ext = base.split('_')[0]
22
-
23
- # puts %!#{dst} =>\n #{depends.join("\n ")}!
24
- file dst => depends do
25
- sh "ruby -I#{LIBDIR} #{BINDIR}/depager -g -o #{dst} #{fn}"
26
- # raise unless $! == 0
27
- Dir["#{dir}/*.#{test_ext}"].each do |t|
28
- sh "ruby -I#{LIBDIR} #{dst} < #{t}"
29
- end
30
- end
31
- end
32
-
33
- task :default => OBJ
34
- DIRS.each do |d|
35
- task d => OBJ.select{|i| i =~ /^#{d}\// }
36
- end
@@ -1,34 +0,0 @@
1
- Dir.chdir(File.dirname(__FILE__))
2
-
3
- require 'rake/clean'
4
-
5
- SRC = FileList["*.dr"]
6
- SRC.delete('lex.dr')
7
- SRC.unshift('lex.dr')
8
- OBJ = SRC.ext('rb')
9
- CLEAN.include(OBJ)
10
- # CLOBBER.include('extensions')
11
- PREFIX="../.."
12
- LIBDIR = "#{PREFIX}/lib"
13
- BINDIR = "#{PREFIX}/bin"
14
-
15
- task :default => OBJ
16
-
17
- SRC.each do |fn|
18
- fn = fn.sub(/\.[^.]*$/, '')
19
- depends = [
20
- "#{fn}.dr",
21
- 'lex.dr',
22
- 'nvaction.rb',
23
- 'Rakefile',
24
- 'template/extension_lalr_master.erb',
25
- 'template/extension_lalr_slave.erb',
26
- ].uniq
27
- file("#{fn}.rb" => depends) do
28
- sh "ruby -I#{LIBDIR} #{BINDIR}/depager -g -o #{fn}.rb #{fn}.dr"
29
- end
30
- end
31
-
32
- file ".extensions" => OBJ do
33
- #sh "touch .extensions"
34
- end
@@ -1,116 +0,0 @@
1
- class Depager::LALR::Table
2
- def state_info
3
- @state_info
4
- end
5
-
6
- #puts grammar.closure.values.join("\n")
7
- #puts "-----"
8
- #puts grammar.memo_closure1.sort_by{|k,v| k}.map{|k,v| "#{k.inspect}:\n#{v.join("\n")}"}
9
- #puts 'mk'; mk.each{|k, v| p "#{k}=>#{v}"}
10
- #trn = trn.uniq
11
- #puts 'trn',trn.map{|a| "<#{a[2].n}>#{a[0]} => <#{a[3].n}>#{a[1]}"}
12
-
13
- def gen_state_info
14
- g = grammar
15
- @state_info = []
16
- @action_table.each_with_index {|s,x|
17
- shi, red, acc = "", "", ""
18
- s.each_with_index {|t, y|
19
- next unless t
20
- hd = (" %-15s" % g.symname(y + g.nonterms.size))
21
- if t == 'ACC'
22
- acc = "#{hd} accept\n\n"
23
- elsif t < 0
24
- red << "#{hd} reduce using rule #{-t} (#{g.symname g[-t].lhs})\n"
25
- else
26
- shi << "#{hd} shift, and goto to state #{t}\n"
27
- end
28
- }
29
- if t = @defred_table[x]
30
- as = @defred_after_shift_table[x] ? " [after shift]" : ""
31
- red << (" %-15s" % '$default') <<
32
- "reduce using rule #{-t} (#{g.symname g[-t].lhs}) #{as}\n"
33
- end
34
-
35
- @state_info << (@states[x].to_s << "\n\n#{shi}\n#{red}\n#{acc}")
36
- }
37
- end
38
-
39
- def verbose dp
40
- g, output = grammar, []
41
-
42
- if $MP_DEBUG.match(/f/)
43
- output << "** FIRST1 **"
44
- str = g.first1.map{|k, v|
45
- "#{g.symname k} => #{v.map{|i| g.symname i}.join(' ')}"
46
- }.join("\n")
47
- output << "#{str}\n\n"
48
- end
49
-
50
- if $MP_DEBUG.match(/e/)
51
- output << "** Empty Reduction **"
52
- str = g.f0e.map {|k, v|
53
- "#{g.symname k} =>\n" << v.map{|n, f|
54
- " #{rulelist[n]} ? #{f.map{|i| g.symname i}.join(' ')}"
55
- }.join("\n")
56
- }.join("\n")
57
- output << "#{str}\n\n"
58
- end
59
-
60
- if $MP_DEBUG.match(/s/)
61
- output << "** SYMBOLS **"
62
- str = g.syms.map{|k,_| "#{"%03i" % k} #{ g.symname k}"}.sort.join("\n")
63
- output << "#{str}\n\n"
64
- end
65
-
66
- if $MP_DEBUG.match(/g/)
67
- output << "*** Grammar ***"
68
- str = g.rulelist.join("\n")
69
- output << "#{str}\n\n"
70
- end
71
-
72
- if $MP_DEBUG.match(/c/)
73
- output << "*** States ***"
74
- output << @state_info.to_s
75
- end
76
-
77
- nssize = g.nonterms.size
78
- if $MP_DEBUG.match(/t/)
79
- output << "*** Action Table ***"
80
- ws = (nssize...g.syms.size).map{|i| j = g.symname(i).size; j < 6 ? 6 : j}
81
- str = " |"
82
- (nssize...g.syms.size).each_with_index{|i, x|
83
- str << ("%0#{ws[x]}s|" % g.symname(i))
84
- }; str << " $default|\n"
85
-
86
- @action_table.each_with_index{|i,x|
87
- str << ("%03i|" % x)
88
- i.each_with_index{|j, y|
89
- str << ("%0#{ws[y]}s|" % j)
90
- }
91
- str << ("%04s,%04s|\n" % [@defred_table[x], @defred_after_shift_table[x]])
92
- }
93
- output << "#{str}\n\n"
94
-
95
- output << "*** Goto Table ***"
96
- ws = (1...nssize).map{|i| j = g.symname(i).size; j < 6 ? 6 : j}
97
- str = " |"
98
- (1...nssize).each_with_index{|i, x|
99
- str << ("%0#{ws[x]}s|" % g.symname(i))
100
- }; str << "\n"
101
-
102
- @goto_table.each_with_index{|i,x|
103
- str << ("%03i|" % x)
104
- i.each_with_index{|j, y|
105
- str << ("%0#{ws[y]}s|" % j)
106
- }
107
- str << "\n"
108
- }
109
- output << "#{str}\n\n"
110
- end
111
-
112
- File.open("#{File.basename(dp.files.fname, '.dr')}.output", "w"){|f|
113
- f.write output.join("\n")
114
- }
115
- end
116
- end