racc 1.4.14-java → 1.5.2-java
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.
- checksums.yaml +5 -5
- data/COPYING +22 -515
- data/README.ja.rdoc +3 -4
- data/README.rdoc +6 -8
- data/Rakefile +32 -53
- data/bin/racc +39 -27
- data/ext/racc/com/headius/racc/Cparse.java +66 -23
- data/ext/racc/{cparse.c → cparse/cparse.c} +82 -47
- data/ext/racc/{extconf.rb → cparse/extconf.rb} +2 -1
- data/lib/racc/compat.rb +5 -4
- data/lib/racc/cparse-jruby.jar +0 -0
- data/lib/racc/debugflags.rb +5 -4
- data/lib/racc/exception.rb +5 -4
- data/lib/racc/grammar.rb +25 -22
- data/lib/racc/grammarfileparser.rb +10 -8
- data/lib/racc/info.rb +6 -5
- data/lib/racc/iset.rb +6 -5
- data/lib/racc/logfilegenerator.rb +6 -5
- data/lib/racc/parser-text.rb +20 -23
- data/lib/racc/parser.rb +20 -23
- data/lib/racc/parserfilegenerator.rb +10 -10
- data/lib/racc/sourcetext.rb +5 -4
- data/lib/racc/state.rb +13 -12
- data/lib/racc/statetransitiontable.rb +7 -6
- data/rdoc/ja/command.ja.html +1 -1
- data/sample/array.y +1 -1
- data/sample/array2.y +1 -1
- data/sample/calc-ja.y +2 -2
- data/sample/calc.y +2 -2
- data/sample/conflict.y +1 -1
- data/sample/hash.y +1 -1
- data/sample/lalr.y +1 -1
- data/sample/lists.y +1 -1
- data/sample/syntax.y +1 -1
- data/sample/yyerr.y +1 -1
- data/test/assets/cadenza.y +170 -0
- data/test/assets/cast.y +926 -0
- data/test/assets/csspool.y +729 -0
- data/test/assets/edtf.y +583 -0
- data/test/assets/huia.y +318 -0
- data/test/assets/intp.y +4 -4
- data/test/assets/journey.y +47 -0
- data/test/assets/liquor.y +313 -0
- data/test/assets/machete.y +423 -0
- data/test/assets/macruby.y +2197 -0
- data/test/assets/mailp.y +27 -27
- data/test/assets/mediacloth.y +599 -0
- data/test/assets/mof.y +649 -0
- data/test/assets/namae.y +302 -0
- data/test/assets/nasl.y +626 -0
- data/test/assets/nokogiri-css.y +255 -0
- data/test/assets/nullbug2.y +2 -2
- data/test/assets/opal.y +1807 -0
- data/test/assets/php_serialization.y +98 -0
- data/test/assets/recv.y +20 -20
- data/test/assets/riml.y +665 -0
- data/test/assets/ruby18.y +1943 -0
- data/test/assets/ruby19.y +2174 -0
- data/test/assets/ruby20.y +2350 -0
- data/test/assets/ruby21.y +2359 -0
- data/test/assets/ruby22.y +2381 -0
- data/test/assets/syntax.y +1 -1
- data/test/assets/tp_plus.y +622 -0
- data/test/assets/twowaysql.y +278 -0
- data/test/helper.rb +68 -41
- data/test/regress/cadenza +796 -0
- data/test/regress/cast +3428 -0
- data/test/regress/csspool +2314 -0
- data/test/regress/edtf +1794 -0
- data/test/regress/huia +1392 -0
- data/test/regress/journey +222 -0
- data/test/regress/liquor +885 -0
- data/test/regress/machete +833 -0
- data/test/regress/mediacloth +1463 -0
- data/test/regress/mof +1368 -0
- data/test/regress/namae +634 -0
- data/test/regress/nasl +2058 -0
- data/test/regress/nokogiri-css +836 -0
- data/test/regress/opal +6431 -0
- data/test/regress/php_serialization +336 -0
- data/test/regress/riml +3283 -0
- data/test/regress/ruby18 +6344 -0
- data/test/regress/ruby22 +7460 -0
- data/test/regress/tp_plus +1933 -0
- data/test/regress/twowaysql +556 -0
- data/test/test_chk_y.rb +1 -0
- data/test/test_racc_command.rb +177 -2
- data/test/test_scan_y.rb +1 -0
- data/test/testscanner.rb +1 -1
- metadata +55 -80
- data/.gemtest +0 -0
- data/DEPENDS +0 -4
- data/Manifest.txt +0 -102
- data/bin/racc2y +0 -195
- data/bin/y2racc +0 -339
- data/ext/racc/depend +0 -1
- data/fastcache/extconf.rb +0 -2
- data/fastcache/fastcache.c +0 -185
- data/misc/dist.sh +0 -31
- data/setup.rb +0 -1587
- data/tasks/doc.rb +0 -12
- data/tasks/email.rb +0 -55
data/README.ja.rdoc
CHANGED
@@ -76,10 +76,9 @@
|
|
76
76
|
== ライセンス
|
77
77
|
|
78
78
|
このパッケージに付属するファイルの著作権は青木峰郎が保持します。
|
79
|
-
ライセンスは
|
80
|
-
|
81
|
-
|
82
|
-
ください。
|
79
|
+
ライセンスは Ruby ライセンスです。ただしユーザが書いた規則
|
80
|
+
ファイルや、Racc がそこから生成した Ruby スクリプトはその対象
|
81
|
+
外です。好きなライセンスで配布してください。
|
83
82
|
|
84
83
|
|
85
84
|
== バグなど
|
data/README.rdoc
CHANGED
@@ -16,8 +16,6 @@
|
|
16
16
|
== Requirement
|
17
17
|
|
18
18
|
* Ruby 1.8.x or later.
|
19
|
-
(*) make and C compiler.
|
20
|
-
|
21
19
|
|
22
20
|
== Installation
|
23
21
|
|
@@ -36,9 +34,9 @@
|
|
36
34
|
|
37
35
|
You can install Racc into your favorite directory by giving
|
38
36
|
options to setup.rb. e.g.
|
39
|
-
|
37
|
+
|
40
38
|
$ ruby setup.rb config --prefix=/usr
|
41
|
-
|
39
|
+
|
42
40
|
For details, try "ruby setup.rb --help".
|
43
41
|
|
44
42
|
|
@@ -68,10 +66,10 @@
|
|
68
66
|
|
69
67
|
== License
|
70
68
|
|
71
|
-
Racc is distributed under the terms of
|
72
|
-
|
73
|
-
|
74
|
-
files under any licenses you want.
|
69
|
+
Racc is distributed under the same terms of ruby.
|
70
|
+
(see the file COPYING). Note that you do NOT need to follow
|
71
|
+
ruby license for your own parser (racc outputs).
|
72
|
+
You can distribute those files under any licenses you want.
|
75
73
|
|
76
74
|
|
77
75
|
== Bug Reports
|
data/Rakefile
CHANGED
@@ -1,51 +1,36 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
|
3
|
-
require
|
4
|
-
require 'hoe'
|
3
|
+
require "bundler/gem_tasks"
|
5
4
|
|
6
|
-
|
5
|
+
require 'rdoc/task'
|
7
6
|
|
8
|
-
|
7
|
+
RDoc::Task.new(:docs) do |rd|
|
8
|
+
spec = Gem::Specification.load("racc.gemspec")
|
9
|
+
rd.main = "README.en.rdoc"
|
10
|
+
rd.rdoc_files.include(spec.files.find_all { |file_name|
|
11
|
+
file_name =~ /^(bin|lib|ext)/ || file_name !~ /\//
|
12
|
+
})
|
9
13
|
|
10
|
-
|
11
|
-
/java/ === RUBY_PLATFORM
|
12
|
-
end
|
13
|
-
def jruby?
|
14
|
-
Object.const_defined?(:RUBY_ENGINE) and 'jruby' == RUBY_ENGINE
|
15
|
-
end
|
14
|
+
title = "#{spec.name}-#{spec.version} Documentation"
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
license "MIT"
|
20
|
-
|
21
|
-
self.extra_rdoc_files = Dir['*.rdoc']
|
22
|
-
self.history_file = 'ChangeLog'
|
23
|
-
self.readme_file = 'README.rdoc'
|
16
|
+
rd.options << "-t #{title}"
|
17
|
+
end
|
24
18
|
|
25
|
-
|
26
|
-
dependency 'minitest', '~> 4.7', :developer # stick to stdlib's version
|
19
|
+
require 'rake/testtask'
|
27
20
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
21
|
+
Rake::TestTask.new(:test) do |t|
|
22
|
+
t.test_files = FileList["test/**/test_*.rb"]
|
23
|
+
if RUBY_VERSION >= "2.6"
|
24
|
+
t.ruby_opts = %w[--enable-frozen-string-literal --debug=frozen-string-literal]
|
32
25
|
end
|
33
|
-
|
34
|
-
self.clean_globs << "lib/#{self.name}/*.{so,bundle,dll,jar}" # from hoe/compiler
|
35
|
-
|
36
26
|
end
|
27
|
+
gem 'rake-compiler', '>= 0.4.1'
|
37
28
|
|
38
|
-
def
|
39
|
-
|
40
|
-
target_dir = File.dirname(target_path)
|
41
|
-
mkdir_p target_dir unless File.directory?(target_dir)
|
42
|
-
rm_f target_path
|
43
|
-
safe_ln relative_path, target_path
|
44
|
-
HOE.spec.files += [relative_path]
|
29
|
+
def java?
|
30
|
+
/java/ === RUBY_PLATFORM
|
45
31
|
end
|
46
|
-
|
47
|
-
|
48
|
-
File.join 'pkg', HOE.spec.full_name
|
32
|
+
def jruby?
|
33
|
+
Object.const_defined?(:RUBY_ENGINE) and 'jruby' == RUBY_ENGINE
|
49
34
|
end
|
50
35
|
|
51
36
|
file 'lib/racc/parser-text.rb' => ['lib/racc/parser.rb'] do |t|
|
@@ -62,20 +47,10 @@ end
|
|
62
47
|
}
|
63
48
|
end
|
64
49
|
|
65
|
-
|
66
|
-
# MRI
|
67
|
-
require "rake/extensiontask"
|
68
|
-
Rake::ExtensionTask.new "cparse", HOE.spec do |ext|
|
69
|
-
ext.lib_dir = File.join 'lib', 'racc'
|
70
|
-
ext.ext_dir = File.join 'ext', 'racc'
|
71
|
-
end
|
72
|
-
|
73
|
-
task :compile => 'lib/racc/parser-text.rb'
|
74
|
-
#
|
75
|
-
else
|
50
|
+
if jruby?
|
76
51
|
# JRUBY
|
77
52
|
require "rake/javaextensiontask"
|
78
|
-
Rake::JavaExtensionTask.new("cparse"
|
53
|
+
Rake::JavaExtensionTask.new("cparse") do |ext|
|
79
54
|
jruby_home = RbConfig::CONFIG['prefix']
|
80
55
|
ext.lib_dir = File.join 'lib', 'racc'
|
81
56
|
ext.ext_dir = File.join 'ext', 'racc'
|
@@ -88,13 +63,17 @@ else
|
|
88
63
|
end
|
89
64
|
|
90
65
|
task :compile => ['lib/racc/parser-text.rb']
|
91
|
-
|
92
|
-
|
93
|
-
|
66
|
+
else
|
67
|
+
# MRI
|
68
|
+
require "rake/extensiontask"
|
69
|
+
Rake::ExtensionTask.new "cparse" do |ext|
|
70
|
+
ext.lib_dir = File.join 'lib', 'racc'
|
71
|
+
ext.ext_dir = File.join 'ext', 'racc', 'cparse'
|
94
72
|
end
|
95
73
|
|
74
|
+
task :compile => 'lib/racc/parser-text.rb'
|
96
75
|
end
|
97
76
|
|
98
|
-
task :
|
77
|
+
task :build => "lib/racc/parser-text.rb"
|
99
78
|
|
100
|
-
|
79
|
+
task :test => :compile
|
data/bin/racc
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
|
-
#
|
3
|
+
#
|
4
4
|
#
|
5
5
|
# Copyright (c) 1999-2006 Minero Aoki
|
6
6
|
#
|
7
7
|
# This program is free software.
|
8
|
-
# You can distribute/modify this program under the terms of
|
9
|
-
# the
|
10
|
-
# For details of LGPL, see the file "COPYING".
|
11
|
-
#
|
8
|
+
# You can distribute/modify this program under the same terms of ruby.
|
9
|
+
# see the file "COPYING".
|
12
10
|
|
13
11
|
require 'racc/static'
|
14
12
|
require 'optparse'
|
@@ -53,7 +51,7 @@ def main
|
|
53
51
|
logfilename = path
|
54
52
|
}
|
55
53
|
parser.on('-e', '--executable [RUBYPATH]', 'Makes executable parser.') {|path|
|
56
|
-
|
54
|
+
make_executable = true
|
57
55
|
rubypath = (path == 'ruby' ? nil : path)
|
58
56
|
}
|
59
57
|
parser.on('-E', '--embedded', "Embeds Racc runtime in output.") {
|
@@ -73,10 +71,6 @@ def main
|
|
73
71
|
'Uses CLASSNAME instead of Racc::Parser.') {|name|
|
74
72
|
superclass = name
|
75
73
|
}
|
76
|
-
parser.on('--runtime=FEATURE',
|
77
|
-
"Uses FEATURE instead of 'racc/parser'") {|feat|
|
78
|
-
runtime = feature
|
79
|
-
}
|
80
74
|
parser.on('-C', '--check-only', 'Checks syntax and quit immediately.') {|fl|
|
81
75
|
check_only = fl
|
82
76
|
}
|
@@ -90,24 +84,21 @@ def main
|
|
90
84
|
debug_flags = Racc::DebugFlags.parse_option_string(flags)
|
91
85
|
}
|
92
86
|
#parser.on('--no-extensions', 'Run Racc without any Ruby extension.') {
|
93
|
-
# Racc.const_set :
|
87
|
+
# Racc.const_set :Racc_No_Extensions, true
|
94
88
|
#}
|
95
89
|
parser.on('--version', 'Prints version and quit.') {
|
96
90
|
puts "racc version #{Racc::Version}"
|
97
91
|
exit 0
|
98
92
|
}
|
99
93
|
parser.on('--runtime-version', 'Prints runtime version and quit.') {
|
100
|
-
printf "racc runtime version %s
|
94
|
+
printf "racc runtime version %s; %s\n",
|
101
95
|
Racc::Parser::Racc_Runtime_Version,
|
102
|
-
Racc::Parser::Racc_Runtime_Revision,
|
103
96
|
if Racc::Parser.racc_runtime_type == 'ruby'
|
104
|
-
sprintf('ruby core version %s
|
105
|
-
Racc::Parser::Racc_Runtime_Core_Version_R
|
106
|
-
Racc::Parser::Racc_Runtime_Core_Revision_R)
|
97
|
+
sprintf('ruby core version %s',
|
98
|
+
Racc::Parser::Racc_Runtime_Core_Version_R)
|
107
99
|
else
|
108
|
-
sprintf('c core version %s
|
109
|
-
Racc::Parser::Racc_Runtime_Core_Version_C
|
110
|
-
Racc::Parser::Racc_Runtime_Core_Revision_C)
|
100
|
+
sprintf('c core version %s',
|
101
|
+
Racc::Parser::Racc_Runtime_Core_Version_C)
|
111
102
|
end
|
112
103
|
exit 0
|
113
104
|
}
|
@@ -189,8 +180,12 @@ def main
|
|
189
180
|
log_useless states.grammar
|
190
181
|
log_conflict states
|
191
182
|
else
|
192
|
-
report_useless states.grammar
|
193
|
-
report_conflict states
|
183
|
+
has_useless = report_useless states.grammar
|
184
|
+
has_conflicts = report_conflict states
|
185
|
+
if has_useless || has_conflicts
|
186
|
+
preamble = make_logfile ? 'C' : 'Turn on logging with "-v" and c'
|
187
|
+
$stderr.puts %Q{#{preamble}heck ".output" file for details}
|
188
|
+
end
|
194
189
|
end
|
195
190
|
|
196
191
|
profiler.report
|
@@ -206,13 +201,29 @@ def make_filename(path, suffix)
|
|
206
201
|
path.sub(/(?:\..*?)?\z/, suffix)
|
207
202
|
end
|
208
203
|
|
204
|
+
LIST_LIMIT = 10
|
205
|
+
def report_list(enum, label)
|
206
|
+
c = enum.count
|
207
|
+
if c > 0
|
208
|
+
$stderr.puts "#{c} #{label}:"
|
209
|
+
enum.first(LIST_LIMIT).each do |item|
|
210
|
+
$stderr.puts " #{yield item}"
|
211
|
+
end
|
212
|
+
$stderr.puts " ..." if c > LIST_LIMIT
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
# @return [Boolean] if anything was reported
|
209
217
|
def report_conflict(states)
|
210
218
|
if states.should_report_srconflict?
|
219
|
+
reported = true
|
211
220
|
$stderr.puts "#{states.n_srconflicts} shift/reduce conflicts"
|
212
221
|
end
|
213
222
|
if states.rrconflict_exist?
|
223
|
+
reported = true
|
214
224
|
$stderr.puts "#{states.n_rrconflicts} reduce/reduce conflicts"
|
215
225
|
end
|
226
|
+
reported
|
216
227
|
end
|
217
228
|
|
218
229
|
def log_conflict(states)
|
@@ -227,16 +238,17 @@ def log_conflict(states)
|
|
227
238
|
}
|
228
239
|
end
|
229
240
|
|
241
|
+
# @return [Boolean] if anything was reported
|
230
242
|
def report_useless(grammar)
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
$stderr.puts "#{grammar.n_useless_rules} useless rules"
|
236
|
-
end
|
243
|
+
reported = report_list(grammar.each_useless_nonterminal, 'useless nonterminals', &:to_s)
|
244
|
+
|
245
|
+
reported ||= report_list(grammar.each_useless_rule, 'useless rules') { |r| "##{r.ident} (#{r.target})" }
|
246
|
+
|
237
247
|
if grammar.start.useless?
|
238
248
|
$stderr.puts 'fatal: start symbol does not derive any sentence'
|
249
|
+
reported = true
|
239
250
|
end
|
251
|
+
reported
|
240
252
|
end
|
241
253
|
|
242
254
|
def log_useless(grammar)
|
@@ -1,3 +1,17 @@
|
|
1
|
+
/*
|
2
|
+
Cparse.java -- Racc Runtime Core for JRuby
|
3
|
+
|
4
|
+
Copyright (c) 2016 Charles Oliver Nutter <headius@headius.com>
|
5
|
+
|
6
|
+
Ported from and distributed under the same licence as cparse.c
|
7
|
+
|
8
|
+
cparse.c -- Racc Runtime Core
|
9
|
+
|
10
|
+
Copyright (c) 1999-2006 Minero Aoki
|
11
|
+
|
12
|
+
This library is free software.
|
13
|
+
You can distribute/modify this program under the same terms of ruby.
|
14
|
+
*/
|
1
15
|
package com.headius.racc;
|
2
16
|
|
3
17
|
import org.jruby.Ruby;
|
@@ -7,6 +21,7 @@ import org.jruby.RubyClass;
|
|
7
21
|
import org.jruby.RubyContinuation;
|
8
22
|
import org.jruby.RubyFixnum;
|
9
23
|
import org.jruby.RubyHash;
|
24
|
+
import org.jruby.RubyKernel;
|
10
25
|
import org.jruby.RubyModule;
|
11
26
|
import org.jruby.RubyNumeric;
|
12
27
|
import org.jruby.RubyObject;
|
@@ -24,13 +39,14 @@ import org.jruby.runtime.CallSite;
|
|
24
39
|
import org.jruby.runtime.Helpers;
|
25
40
|
import org.jruby.runtime.MethodIndex;
|
26
41
|
import org.jruby.runtime.ObjectAllocator;
|
42
|
+
import org.jruby.runtime.Signature;
|
27
43
|
import org.jruby.runtime.ThreadContext;
|
28
44
|
import org.jruby.runtime.Visibility;
|
29
45
|
import org.jruby.runtime.builtin.IRubyObject;
|
30
46
|
import org.jruby.runtime.load.Library;
|
31
47
|
|
32
48
|
public class Cparse implements Library {
|
33
|
-
public static final String RACC_VERSION = "1.4.
|
49
|
+
public static final String RACC_VERSION = "1.4.15"; // TODO: parse from Cparse.c
|
34
50
|
|
35
51
|
public enum TokenType {
|
36
52
|
DEFAULT(-1),
|
@@ -233,10 +249,6 @@ public class Cparse implements Library {
|
|
233
249
|
shift(context, act, tok, val);
|
234
250
|
}
|
235
251
|
|
236
|
-
private int REDUCE(ThreadContext context, int act) {
|
237
|
-
return reduce(context, act);
|
238
|
-
}
|
239
|
-
|
240
252
|
public void parse_main(ThreadContext context, IRubyObject tok, IRubyObject val, boolean resume) {
|
241
253
|
Ruby runtime = context.runtime;
|
242
254
|
|
@@ -267,7 +279,7 @@ public class Cparse implements Library {
|
|
267
279
|
i = assert_integer(tmp);
|
268
280
|
|
269
281
|
D_printf("read_next=%d\n", read_next);
|
270
|
-
if (read_next && (this.t
|
282
|
+
if (read_next && (!this.t.equals(vFINAL_TOKEN))) {
|
271
283
|
if (this.lex_is_iterator) {
|
272
284
|
D_puts("resuming...");
|
273
285
|
if (this.fin != 0) throw runtime.newArgumentError("token given after EOF");
|
@@ -354,7 +366,21 @@ public class Cparse implements Library {
|
|
354
366
|
}
|
355
367
|
else if (act < 0 && act > -(this.reduce_n)) {
|
356
368
|
D_puts("reduce");
|
357
|
-
REDUCE
|
369
|
+
{ // macro REDUCE
|
370
|
+
switch (reduce(context, act)) {
|
371
|
+
case 0: /* normal */
|
372
|
+
break;
|
373
|
+
case 1: /* yyerror */
|
374
|
+
branch = USER_YYERROR;
|
375
|
+
continue BRANCH;
|
376
|
+
case 2: /* yyaccept */
|
377
|
+
D_puts("u accept");
|
378
|
+
branch = ACCEPT;
|
379
|
+
continue BRANCH;
|
380
|
+
default:
|
381
|
+
break;
|
382
|
+
}
|
383
|
+
}
|
358
384
|
}
|
359
385
|
else if (act == -(this.reduce_n)) {
|
360
386
|
branch = ERROR; continue BRANCH;
|
@@ -367,6 +393,7 @@ public class Cparse implements Library {
|
|
367
393
|
throw runtime.newRaiseException(RaccBug, "[Cparse Bug] unknown act value " + act);
|
368
394
|
}
|
369
395
|
|
396
|
+
// fall through
|
370
397
|
case ERROR_RECOVERED:
|
371
398
|
|
372
399
|
if (this.debug) {
|
@@ -389,9 +416,10 @@ public class Cparse implements Library {
|
|
389
416
|
call_onerror.call(context, this.parser, this.parser, this.t, val, this.vstack);
|
390
417
|
}
|
391
418
|
|
419
|
+
// fall through
|
392
420
|
case USER_YYERROR:
|
393
421
|
if (this.errstatus == 3) {
|
394
|
-
if (this.t
|
422
|
+
if (this.t.equals(vFINAL_TOKEN)) {
|
395
423
|
this.retval = runtime.getFalse();
|
396
424
|
this.fin = CP_FIN_EOT;
|
397
425
|
return;
|
@@ -464,7 +492,21 @@ public class Cparse implements Library {
|
|
464
492
|
}
|
465
493
|
else if (act < 0 && act > -(this.reduce_n)) {
|
466
494
|
D_puts("e reduce");
|
467
|
-
REDUCE
|
495
|
+
{ // macro REDUCE
|
496
|
+
switch (reduce(context, act)) {
|
497
|
+
case 0: /* normal */
|
498
|
+
break;
|
499
|
+
case 1: /* yyerror */
|
500
|
+
branch = USER_YYERROR;
|
501
|
+
continue BRANCH;
|
502
|
+
case 2: /* yyaccept */
|
503
|
+
D_puts("u accept");
|
504
|
+
branch = ACCEPT;
|
505
|
+
continue BRANCH;
|
506
|
+
default:
|
507
|
+
break;
|
508
|
+
}
|
509
|
+
}
|
468
510
|
}
|
469
511
|
else if (act == this.shift_n) {
|
470
512
|
D_puts("e accept");
|
@@ -489,17 +531,18 @@ public class Cparse implements Library {
|
|
489
531
|
}
|
490
532
|
|
491
533
|
private int reduce(ThreadContext context, int act) {
|
492
|
-
IRubyObject code;
|
493
534
|
ruleno = -act * 3;
|
494
535
|
IRubyObject tag = context.runtime.newSymbol("racc_jump");
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
536
|
+
IRubyObject code = RubyKernel.rbCatch19(context, this,
|
537
|
+
tag,
|
538
|
+
CallBlock19.newCallClosure(this, getMetaClass(), Signature.NO_ARGUMENTS,
|
539
|
+
new BlockCallback() {
|
540
|
+
@Override
|
541
|
+
public IRubyObject call(ThreadContext context, IRubyObject[] args, Block block) {
|
542
|
+
return reduce0(context);
|
543
|
+
}
|
544
|
+
}, context));
|
545
|
+
errstatus = assert_integer(parser.getInstanceVariable(ID_ERRSTATUS));
|
503
546
|
return assert_integer(code);
|
504
547
|
}
|
505
548
|
|
@@ -527,13 +570,13 @@ public class Cparse implements Library {
|
|
527
570
|
/* call action */
|
528
571
|
if (len == 0) {
|
529
572
|
tmp = context.nil;
|
530
|
-
if (mid
|
573
|
+
if (!mid.equals(sym_noreduce))
|
531
574
|
tmp_v = runtime.newArray();
|
532
575
|
if (this.debug)
|
533
576
|
tmp_t = runtime.newArray();
|
534
577
|
}
|
535
578
|
else {
|
536
|
-
if (mid
|
579
|
+
if (!mid.equals(sym_noreduce)) {
|
537
580
|
tmp_v = GET_TAIL(context, this.vstack, len);
|
538
581
|
tmp = ((RubyArray)tmp_v).entry(0);
|
539
582
|
}
|
@@ -547,7 +590,7 @@ public class Cparse implements Library {
|
|
547
590
|
}
|
548
591
|
CUT_TAIL(context, this.state, len);
|
549
592
|
}
|
550
|
-
if (mid
|
593
|
+
if (!mid.equals(sym_noreduce)) {
|
551
594
|
if (this.use_result_var) {
|
552
595
|
tmp = Helpers.invoke(context, this.parser, mid.toString(), tmp_v, this.vstack, tmp);
|
553
596
|
}
|
@@ -590,7 +633,7 @@ public class Cparse implements Library {
|
|
590
633
|
D_puts("(goto) check[i] == nil");
|
591
634
|
branch = NOTFOUND; continue BRANCH;
|
592
635
|
}
|
593
|
-
if (tmp
|
636
|
+
if (!tmp.equals(runtime.newFixnum(k1))) {
|
594
637
|
D_puts("(goto) check[i] != table[i]");
|
595
638
|
branch = NOTFOUND; continue BRANCH;
|
596
639
|
}
|
@@ -759,7 +802,7 @@ public class Cparse implements Library {
|
|
759
802
|
}
|
760
803
|
}, context));
|
761
804
|
} catch (LexerUnroll maybeOurs) {
|
762
|
-
if (maybeOurs
|
805
|
+
if (maybeOurs.equals(lexerUnroll)) {
|
763
806
|
return;
|
764
807
|
}
|
765
808
|
}
|