kaiseki 1.0.5 → 1.0.6

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 CHANGED
@@ -14,7 +14,7 @@ module Kaiseki
14
14
  end
15
15
 
16
16
  def [] rule
17
- GrammarStub.new @rules[rule], self
17
+ GrammarStub.new @rules[rule], self, rule
18
18
  end
19
19
 
20
20
  def parse stream, options = {}
data/lib/grammar_stub.rb CHANGED
@@ -1,14 +1,22 @@
1
1
  module Kaiseki
2
2
  class GrammarStub < PackageParser
3
- attr_reader :grammar
3
+ attr_reader :grammar, :rule
4
4
 
5
- def initialize expected, grammar
5
+ def initialize expected, grammar, rule = 'main'
6
6
  super expected
7
7
  @grammar = grammar
8
+ @rule = rule
8
9
  end
9
10
 
10
11
  def parse! stream, options = {}
11
- @expected.parse stream, options.merge(:grammar => @grammar)
12
+ default_options = {
13
+ :grammar => @grammar,
14
+ :rule => @rule,
15
+ :skipping => @grammar.skipping_rule,
16
+ :simplify => @grammar.simplify,
17
+ :global => {}
18
+ }
19
+ @expected.parse stream, default_options.merge(options)
12
20
  end
13
21
 
14
22
  def eql? other
data/lib/kaiseki.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Kaiseki
2
- VERSION = '1.0.5'
2
+ VERSION = '1.0.6'
3
3
  file_path = File.dirname __FILE__
4
4
 
5
5
  #load basic kaiseki classes
data/lib/parser_choice.rb CHANGED
@@ -6,16 +6,13 @@ module Kaiseki
6
6
  error = true
7
7
  @expected.each do |n|
8
8
  begin
9
- value = catch :SkipSuccess do
9
+ catch :SkipSuccess do
10
10
  return n.parse stream, options
11
11
  end
12
- if value == :NotImplemented
13
- next
14
- else
15
- throw :SkipSuccess
16
- end
17
12
  rescue ParseError
18
13
  next
14
+ rescue NotImplementedError
15
+ next
19
16
  end
20
17
  end
21
18
  raise ParseError.new "no valid alternatives when parsing #{self}", options
data/lib/parser_repeat.rb CHANGED
@@ -13,16 +13,11 @@ module Kaiseki
13
13
  stream.must_be Stream
14
14
  stream.lock do
15
15
  result = []
16
- count = 0
17
- while max.nil? or count < @max
16
+ while @max.nil? or result.length < @max
18
17
  begin
19
18
  catch :SkipSuccess do
20
19
  result << @expected.parse(stream, options)
21
- count += 1
22
- next
23
20
  end
24
- count += 1
25
- break if max.nil?
26
21
  rescue ParseError
27
22
  if options[:skipping]
28
23
  begin
@@ -36,6 +31,8 @@ module Kaiseki
36
31
  else
37
32
  break
38
33
  end
34
+ rescue NotImplementedError
35
+ break
39
36
  end
40
37
  end
41
38
  if result.length < @min
@@ -22,6 +22,8 @@ module Kaiseki
22
22
  else
23
23
  raise e
24
24
  end
25
+ rescue NotImplementedError
26
+ next
25
27
  end
26
28
  end
27
29
  if options[:simplify]
data/lib/parser_symbol.rb CHANGED
@@ -6,7 +6,7 @@ module Kaiseki
6
6
  options[:grammar].rules[@expected].parse stream, options.merge(:rule => @expected)
7
7
  else
8
8
  STDERR.puts "skipping #{self}: not implemented"
9
- throw :SkipSuccess, :NotImplemented
9
+ raise NotImplementedError
10
10
  end
11
11
  else
12
12
  raise "can't use #{self} without a grammar"
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 5
9
- version: 1.0.5
8
+ - 6
9
+ version: 1.0.6
10
10
  platform: ruby
11
11
  authors:
12
12
  - William Hamilton-Levi