kaiseki 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
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