kaiseki 1.2.5 → 1.3.1
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.
- data/lib/grammar.rb +5 -5
- data/lib/grammar_stub.rb +0 -1
- data/lib/kaiseki.rb +1 -1
- data/lib/mod_object.rb +0 -5
- data/lib/parse_error.rb +12 -5
- data/lib/parse_result.rb +4 -0
- data/lib/parseable.rb +2 -0
- data/lib/parser_choice.rb +4 -4
- data/lib/parser_eof.rb +1 -1
- data/lib/parser_regexp.rb +1 -1
- data/lib/parser_repeat.rb +4 -3
- data/lib/parser_string.rb +2 -2
- data/lib/predicate_and.rb +1 -1
- data/lib/predicate_not.rb +1 -1
- data/lib/predicate_skip.rb +1 -1
- data/lib/result_validate.rb +1 -1
- data/lib/var_get.rb +1 -1
- metadata +2 -2
data/lib/grammar.rb
CHANGED
@@ -19,21 +19,21 @@ module Kaiseki
|
|
19
19
|
|
20
20
|
def parse stream, options = {}
|
21
21
|
raise 'starting rule undefined' unless @starting_rule
|
22
|
+
result = ParseResult.new
|
22
23
|
default_options = {
|
23
24
|
:grammar => self,
|
24
|
-
:result =>
|
25
|
-
:global => {},
|
25
|
+
:result => result,
|
26
26
|
:rule => '(main)',
|
27
27
|
:skipping => @skipping_rule,
|
28
28
|
:simplify => @simplify
|
29
29
|
}
|
30
30
|
options = default_options.merge options
|
31
31
|
begin
|
32
|
-
|
32
|
+
result.results[:main] = @starting_rule.parse stream.to_stream, options
|
33
33
|
rescue ParseError => e
|
34
|
-
|
34
|
+
result.errors[:main] = e
|
35
35
|
end
|
36
|
-
|
36
|
+
result
|
37
37
|
end
|
38
38
|
|
39
39
|
def starting parseable
|
data/lib/grammar_stub.rb
CHANGED
data/lib/kaiseki.rb
CHANGED
data/lib/mod_object.rb
CHANGED
@@ -3,9 +3,4 @@ class Object
|
|
3
3
|
raise TypeError, "can't convert #{self.class} into #{item}" unless self.is_a? item
|
4
4
|
true
|
5
5
|
end
|
6
|
-
|
7
|
-
def must_have property, value
|
8
|
-
raise StandardError, "##{property} must be #{value} (#{self.send(property)})" unless self.send(property) == value
|
9
|
-
true
|
10
|
-
end
|
11
6
|
end
|
data/lib/parse_error.rb
CHANGED
@@ -1,16 +1,23 @@
|
|
1
1
|
module Kaiseki
|
2
2
|
class ParseError < StandardError
|
3
|
-
attr_accessor :rule, :line, :column
|
3
|
+
attr_accessor :rule, :child, :line, :column
|
4
4
|
|
5
|
-
def initialize string,
|
5
|
+
def initialize string, rule, child = nil
|
6
6
|
super string
|
7
|
-
@rule =
|
8
|
-
@
|
9
|
-
@column = nil
|
7
|
+
@rule = rule
|
8
|
+
@child = child
|
10
9
|
end
|
11
10
|
|
12
11
|
def verbose
|
13
12
|
"[#{@line ? @line + 1 : 0}:#{@column ? @column + 1 : 0}] #{to_s} [in #{@rule}]"
|
14
13
|
end
|
14
|
+
|
15
|
+
def parsetrace
|
16
|
+
array = [self]
|
17
|
+
while array.last.child
|
18
|
+
array << array.last.child
|
19
|
+
end
|
20
|
+
array.reverse
|
21
|
+
end
|
15
22
|
end
|
16
23
|
end
|
data/lib/parse_result.rb
CHANGED
data/lib/parseable.rb
CHANGED
@@ -5,6 +5,7 @@ module Kaiseki
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def parse stream, options = {}
|
8
|
+
options[:global] ||= {}
|
8
9
|
stream = stream.to_stream
|
9
10
|
stream.lock do
|
10
11
|
parse! stream, options
|
@@ -99,6 +100,7 @@ module Kaiseki
|
|
99
100
|
|
100
101
|
private
|
101
102
|
def parse! stream, options = {}
|
103
|
+
raise NotImplementedError, "#{self.class} does not have an implemented #parse!" if self.to_parseable == self
|
102
104
|
self.to_parseable.parse stream, options
|
103
105
|
end
|
104
106
|
end
|
data/lib/parser_choice.rb
CHANGED
@@ -12,19 +12,19 @@ module Kaiseki
|
|
12
12
|
|
13
13
|
private
|
14
14
|
def parse! stream, options = {}
|
15
|
-
error =
|
15
|
+
error = nil
|
16
16
|
@expected.each do |n|
|
17
17
|
begin
|
18
18
|
catch :SkipSuccess do
|
19
19
|
return n.parse stream, options
|
20
20
|
end
|
21
|
-
rescue ParseError
|
21
|
+
rescue ParseError => error
|
22
22
|
next
|
23
|
-
rescue NotImplementedError
|
23
|
+
rescue NotImplementedError => error
|
24
24
|
next
|
25
25
|
end
|
26
26
|
end
|
27
|
-
raise ParseError.new "no valid alternatives when parsing #{self}", options
|
27
|
+
raise ParseError.new "no valid alternatives when parsing #{self}", options[:rule], error
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
data/lib/parser_eof.rb
CHANGED
@@ -16,7 +16,7 @@ module Kaiseki
|
|
16
16
|
def parse! stream, options = {}
|
17
17
|
actual = stream.getc
|
18
18
|
if actual
|
19
|
-
raise ParseError.new "unexpected character \"#{actual}\" (expected end-of-string) when parsing #{self}", options
|
19
|
+
raise ParseError.new "unexpected character \"#{actual}\" (expected end-of-string) when parsing #{self}", options[:rule]
|
20
20
|
else
|
21
21
|
true
|
22
22
|
end
|
data/lib/parser_regexp.rb
CHANGED
data/lib/parser_repeat.rb
CHANGED
@@ -27,12 +27,13 @@ module Kaiseki
|
|
27
27
|
private
|
28
28
|
def parse! stream, options = {}
|
29
29
|
result = []
|
30
|
+
error = nil
|
30
31
|
while @max.nil? or result.length < @max
|
31
32
|
begin
|
32
33
|
protect do
|
33
34
|
result << @expected.parse(stream, options)
|
34
35
|
end
|
35
|
-
rescue ParseError
|
36
|
+
rescue ParseError => error
|
36
37
|
if options[:skipping]
|
37
38
|
begin
|
38
39
|
protect do
|
@@ -45,12 +46,12 @@ module Kaiseki
|
|
45
46
|
else
|
46
47
|
break
|
47
48
|
end
|
48
|
-
rescue NotImplementedError
|
49
|
+
rescue NotImplementedError => error
|
49
50
|
break
|
50
51
|
end
|
51
52
|
end
|
52
53
|
if result.length < @min
|
53
|
-
raise ParseError.new "expected #{@min} match#{'es' unless @min == 1} but obtained #{result.length} when parsing #{self}", options
|
54
|
+
raise ParseError.new "expected #{@min} match#{'es' unless @min == 1} but obtained #{result.length} when parsing #{self}", options[:rule], error
|
54
55
|
else
|
55
56
|
if options[:simplify]
|
56
57
|
if @min == 0 and @max == 1
|
data/lib/parser_string.rb
CHANGED
@@ -6,9 +6,9 @@ module Kaiseki
|
|
6
6
|
@expected.each_char do |char|
|
7
7
|
actual = stream.getc
|
8
8
|
if actual.nil?
|
9
|
-
raise ParseError.new "unexpected end-of-string (expected \"#{char}\") when parsing #{self}", options
|
9
|
+
raise ParseError.new "unexpected end-of-string (expected \"#{char}\") when parsing #{self}", options[:rule]
|
10
10
|
elsif actual != char
|
11
|
-
raise ParseError.new "unexpected character \"#{actual}\" (expected \"#{char}\") when parsing #{self}", options
|
11
|
+
raise ParseError.new "unexpected character \"#{actual}\" (expected \"#{char}\") when parsing #{self}", options[:rule]
|
12
12
|
end
|
13
13
|
end
|
14
14
|
@expected.dup
|
data/lib/predicate_and.rb
CHANGED
@@ -13,7 +13,7 @@ module Kaiseki
|
|
13
13
|
begin
|
14
14
|
@expected.parse stream, options
|
15
15
|
rescue ParseError => e
|
16
|
-
raise ParseError.new "predicate not satisfied when parsing #{self}: #{e.to_s}", options
|
16
|
+
raise ParseError.new "predicate not satisfied when parsing #{self}: #{e.to_s}", options[:rule], e
|
17
17
|
end
|
18
18
|
throw :PredicateSuccess
|
19
19
|
end
|
data/lib/predicate_not.rb
CHANGED
@@ -15,7 +15,7 @@ module Kaiseki
|
|
15
15
|
rescue ParseError
|
16
16
|
throw :PredicateSuccess
|
17
17
|
end
|
18
|
-
raise ParseError.new "predicate not satisfied when parsing #{self}: matched #{result}", options
|
18
|
+
raise ParseError.new "predicate not satisfied when parsing #{self}: matched #{result}", options[:rule]
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
data/lib/predicate_skip.rb
CHANGED
@@ -13,7 +13,7 @@ module Kaiseki
|
|
13
13
|
begin
|
14
14
|
@expected.parse stream, options
|
15
15
|
rescue ParseError => e
|
16
|
-
raise ParseError.new "predicate not satisfied when parsing #{self}: #{e.to_s}", options
|
16
|
+
raise ParseError.new "predicate not satisfied when parsing #{self}: #{e.to_s}", options[:rule], e
|
17
17
|
end
|
18
18
|
throw :SkipSuccess
|
19
19
|
end
|
data/lib/result_validate.rb
CHANGED
data/lib/var_get.rb
CHANGED
@@ -34,7 +34,7 @@ module Kaiseki
|
|
34
34
|
elsif source == result
|
35
35
|
result
|
36
36
|
else
|
37
|
-
raise ParseError.new "unexpected result #{result.inspect} (expected #{source.inspect}) when parsing #{@parser}", options
|
37
|
+
raise ParseError.new "unexpected result #{result.inspect} (expected #{source.inspect}) when parsing #{@parser}", options[:rule]
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: kaiseki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.3.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- William Hamilton-Levi
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-03-01 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|