kaiseki 1.1.1 → 1.2.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/action.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  module Kaiseki
2
2
  class Action < BasicParser
3
+ private
3
4
  def parse! stream, options = {}
4
5
  Node.new([], options[:global]).eval options[:global], &@expected
5
6
  throw :SkipSuccess
data/lib/grammar.rb CHANGED
@@ -18,26 +18,20 @@ module Kaiseki
18
18
  end
19
19
 
20
20
  def parse stream, options = {}
21
- ParseResult.new do
22
- parse! stream.to_stream, options
23
- end
24
- end
25
-
26
- def parse! stream, options = {}
27
- stream.must_be Stream
28
- stream.lock do
29
- default_options = {
30
- :grammar => self,
31
- :rule => '(main)',
32
- :skipping => @skipping_rule,
33
- :simplify => @simplify,
34
- :global => {},
35
- }
36
- if @starting_rule
37
- @starting_rule.parse stream, default_options.merge(options)
38
- else
39
- raise "starting rule undefined"
40
- end
21
+ raise 'starting rule undefined' unless @starting_rule
22
+ default_options = {
23
+ :grammar => self,
24
+ :result => ParseResult.new,
25
+ :global => {},
26
+ :rule => '(main)',
27
+ :skipping => @skipping_rule,
28
+ :simplify => @simplify
29
+ }
30
+ options = default_options.merge options
31
+ begin
32
+ options[:result].results[:main] = @starting_rule.parse stream.to_stream, options
33
+ rescue ParseError => e
34
+ options[:result].errors[:main] = e
41
35
  end
42
36
  end
43
37
 
data/lib/grammar_stub.rb CHANGED
@@ -8,21 +8,22 @@ module Kaiseki
8
8
  @rule = rule
9
9
  end
10
10
 
11
+ def eql? other
12
+ other.is_a?(self.class) and other.expected == @expected and other.grammar == @grammar
13
+ end
14
+
15
+ alias :== :eql?
16
+
17
+ private
11
18
  def parse! stream, options = {}
12
19
  default_options = {
13
20
  :grammar => @grammar,
21
+ :global => {},
14
22
  :rule => @rule.to_s,
15
23
  :skipping => @grammar.skipping_rule,
16
24
  :simplify => @grammar.simplify,
17
- :global => {}
18
25
  }
19
26
  @expected.parse stream, default_options.merge(options)
20
27
  end
21
-
22
- def eql? other
23
- other.is_a?(self.class) and other.expected == @expected and other.grammar == @grammar
24
- end
25
-
26
- alias :== :eql?
27
28
  end
28
29
  end
data/lib/kaiseki.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Kaiseki
2
- VERSION = '1.1.1'
2
+ VERSION = '1.2.1'
3
3
  file_path = File.dirname __FILE__
4
4
 
5
5
  #load basic kaiseki classes
@@ -56,6 +56,11 @@ module Kaiseki
56
56
  require file_path + '/var_get'
57
57
  require file_path + '/var_insert'
58
58
 
59
+ #load result tags
60
+ require file_path + '/tag_basic'
61
+ require file_path + '/tag_result'
62
+ require file_path + '/tag_error'
63
+
59
64
  #load others
60
65
  require file_path + '/parser_custom'
61
66
  end
data/lib/mod_kernel.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  module Kernel
2
2
  private
3
-
4
3
  def get var, parser
5
4
  Kaiseki::GetVar.new var, parser
6
5
  end
data/lib/parse_result.rb CHANGED
@@ -1,21 +1,26 @@
1
1
  module Kaiseki
2
2
  class ParseResult
3
- attr_reader :result, :error
3
+ attr_reader :results, :errors
4
4
 
5
- def initialize &block
6
- begin
7
- catch :SkipSuccess do
8
- @result = block.call
9
- return
10
- end
11
- @result = '(skipped)'
12
- rescue ParseError => e
13
- @error = e.verbose
14
- end
5
+ def initialize
6
+ @results = {}
7
+ @errors = {}
15
8
  end
16
9
 
17
10
  def parsed?
18
- @result ? true : false
11
+ @errors.empty?
12
+ end
13
+
14
+ def result
15
+ @results[:main]
16
+ end
17
+
18
+ def error
19
+ @errors[:main]
20
+ end
21
+
22
+ def error_msg error = :main
23
+ @errors.key?(error) ? @errors[error].verbose : nil
19
24
  end
20
25
  end
21
26
  end
data/lib/parseable.rb CHANGED
@@ -5,7 +5,10 @@ module Kaiseki
5
5
  end
6
6
 
7
7
  def parse stream, options = {}
8
- self.to_parseable.parse! stream.to_stream, options
8
+ stream = stream.to_parseable
9
+ stream.lock do
10
+ self.to_parseable.parse! stream, options
11
+ end
9
12
  end
10
13
 
11
14
  def predicate?
@@ -85,5 +88,13 @@ module Kaiseki
85
88
  def set *vars
86
89
  SetVar.new self, *vars
87
90
  end
91
+
92
+ def tag_result name
93
+ ResultTag.new self, name
94
+ end
95
+
96
+ def tag_error name
97
+ ErrorTag.new self, name
98
+ end
88
99
  end
89
100
  end
data/lib/parser_basic.rb CHANGED
@@ -7,10 +7,6 @@ module Kaiseki
7
7
  @expected = expected
8
8
  end
9
9
 
10
- def parse! stream, options = {}
11
- raise NotImplementedError
12
- end
13
-
14
10
  def eql? other
15
11
  other.is_a?(self.class) and other.expected == @expected
16
12
  end
@@ -20,5 +16,10 @@ module Kaiseki
20
16
  def to_s
21
17
  @expected.inspect
22
18
  end
19
+
20
+ private
21
+ def parse! stream, options = {}
22
+ raise NotImplementedError
23
+ end
23
24
  end
24
25
  end
data/lib/parser_choice.rb CHANGED
@@ -1,24 +1,5 @@
1
1
  module Kaiseki
2
2
  class ChoiceParser < MultiParser
3
- def parse! stream, options = {}
4
- stream.must_be Stream
5
- stream.lock do
6
- error = true
7
- @expected.each do |n|
8
- begin
9
- catch :SkipSuccess do
10
- return n.parse stream, options
11
- end
12
- rescue ParseError
13
- next
14
- rescue NotImplementedError
15
- next
16
- end
17
- end
18
- raise ParseError.new "no valid alternatives when parsing #{self}", options
19
- end
20
- end
21
-
22
3
  alias :| :append
23
4
 
24
5
  def predicate?
@@ -28,5 +9,22 @@ module Kaiseki
28
9
  def delimiter
29
10
  '|'
30
11
  end
12
+
13
+ private
14
+ def parse! stream, options = {}
15
+ error = true
16
+ @expected.each do |n|
17
+ begin
18
+ catch :SkipSuccess do
19
+ return n.parse stream, options
20
+ end
21
+ rescue ParseError
22
+ next
23
+ rescue NotImplementedError
24
+ next
25
+ end
26
+ end
27
+ raise ParseError.new "no valid alternatives when parsing #{self}", options
28
+ end
31
29
  end
32
30
  end
data/lib/parser_custom.rb CHANGED
@@ -7,15 +7,13 @@ module Kaiseki
7
7
  @is_predicate = is_predicate
8
8
  end
9
9
 
10
- def parse! stream, options = {}
11
- stream.must_be Stream
12
- stream.lock do
13
- NODE.new([stream, options], options[:global]).eval options[:global], &@expected
14
- end
15
- end
16
-
17
10
  def predicate?
18
11
  @is_predicate
19
12
  end
13
+
14
+ private
15
+ def parse! stream, options = {}
16
+ NODE.new([stream, options], options[:global]).eval options[:global], &@expected
17
+ end
20
18
  end
21
19
  end
data/lib/parser_eof.rb CHANGED
@@ -2,18 +2,6 @@ module Kaiseki
2
2
  class EOFParser
3
3
  include Parseable
4
4
 
5
- def parse! stream, options = {}
6
- stream.must_be Stream
7
- stream.lock do
8
- actual = stream.getc
9
- if actual
10
- raise ParseError.new "unexpected character \"#{actual}\" (expected end-of-string) when parsing #{self}", options
11
- else
12
- true
13
- end
14
- end
15
- end
16
-
17
5
  def eql? other
18
6
  other.is_a? self.class
19
7
  end
@@ -23,5 +11,15 @@ module Kaiseki
23
11
  def to_s
24
12
  'EOF'
25
13
  end
14
+
15
+ private
16
+ def parse! stream, options = {}
17
+ actual = stream.getc
18
+ if actual
19
+ raise ParseError.new "unexpected character \"#{actual}\" (expected end-of-string) when parsing #{self}", options
20
+ else
21
+ true
22
+ end
23
+ end
26
24
  end
27
25
  end
data/lib/parser_multi.rb CHANGED
@@ -1,10 +1,7 @@
1
1
  module Kaiseki
2
2
  class MultiParser < BasicParser
3
3
  def initialize *parsers
4
- @expected = []
5
- parsers.each do |n|
6
- append n
7
- end
4
+ @expected = parsers.collect {|n| n.to_parseable }
8
5
  end
9
6
 
10
7
  def append parseable
data/lib/parser_regexp.rb CHANGED
@@ -1,18 +1,16 @@
1
1
  module Kaiseki
2
2
  class RegexpParser < BasicParser
3
+ private
3
4
  def parse! stream, options = {}
4
- stream.must_be Stream
5
- stream.lock do
6
- match = stream.match @expected
7
- if match
8
- if options[:simplify]
9
- match.to_s
10
- else
11
- match
12
- end
5
+ match = stream.match @expected
6
+ if match
7
+ if options[:simplify]
8
+ match.to_s
13
9
  else
14
- raise ParseError.new "non-matching characters when parsing #{self}", options
10
+ match
15
11
  end
12
+ else
13
+ raise ParseError.new "non-matching characters when parsing #{self}", options
16
14
  end
17
15
  end
18
16
  end
data/lib/parser_repeat.rb CHANGED
@@ -10,48 +10,6 @@ module Kaiseki
10
10
  @max = max
11
11
  end
12
12
 
13
- def parse! stream, options = {}
14
- stream.must_be Stream
15
- stream.lock do
16
- result = []
17
- while @max.nil? or result.length < @max
18
- begin
19
- protect do
20
- result << @expected.parse(stream, options)
21
- end
22
- rescue ParseError
23
- if options[:skipping]
24
- begin
25
- protect do
26
- options[:skipping].parse stream, options.merge(:skipping => nil)
27
- end
28
- redo
29
- rescue ParseError
30
- break
31
- end
32
- else
33
- break
34
- end
35
- rescue NotImplementedError
36
- break
37
- end
38
- end
39
- if result.length < @min
40
- raise ParseError.new "expected #{@min} match#{'es' unless @min == 1} but obtained #{result.length} when parsing #{self}", options
41
- else
42
- if options[:simplify]
43
- if @min == 0 and @max == 1
44
- result.length == 0 ? nil : result[0]
45
- else
46
- result
47
- end
48
- else
49
- result
50
- end
51
- end
52
- end
53
- end
54
-
55
13
  def eql? other
56
14
  other.is_a?(self.class) and other.expected == @expected and other.min == @min and other.max == @max
57
15
  end
@@ -65,5 +23,45 @@ module Kaiseki
65
23
  @expected.to_s + " [#{@min}+]"
66
24
  end
67
25
  end
26
+
27
+ private
28
+ def parse! stream, options = {}
29
+ result = []
30
+ while @max.nil? or result.length < @max
31
+ begin
32
+ protect do
33
+ result << @expected.parse(stream, options)
34
+ end
35
+ rescue ParseError
36
+ if options[:skipping]
37
+ begin
38
+ protect do
39
+ options[:skipping].parse stream, options.merge(:skipping => nil)
40
+ end
41
+ redo
42
+ rescue ParseError
43
+ break
44
+ end
45
+ else
46
+ break
47
+ end
48
+ rescue NotImplementedError
49
+ break
50
+ end
51
+ end
52
+ if result.length < @min
53
+ raise ParseError.new "expected #{@min} match#{'es' unless @min == 1} but obtained #{result.length} when parsing #{self}", options
54
+ else
55
+ if options[:simplify]
56
+ if @min == 0 and @max == 1
57
+ result.length == 0 ? nil : result[0]
58
+ else
59
+ result
60
+ end
61
+ else
62
+ result
63
+ end
64
+ end
65
+ end
68
66
  end
69
67
  end
@@ -1,5 +1,16 @@
1
1
  module Kaiseki
2
2
  class SequenceParser < MultiParser
3
+ alias :& :append
4
+
5
+ def predicate?
6
+ @expected.find {|n| !n.predicate? } ? false : true
7
+ end
8
+
9
+ def delimiter
10
+ '&'
11
+ end
12
+
13
+ private
3
14
  def parse! stream, options = {}
4
15
  stream.must_be Stream
5
16
  stream.lock do
@@ -40,15 +51,5 @@ module Kaiseki
40
51
  end
41
52
  end
42
53
  end
43
-
44
- alias :& :append
45
-
46
- def predicate?
47
- @expected.find {|n| !n.predicate? } ? false : true
48
- end
49
-
50
- def delimiter
51
- '&'
52
- end
53
54
  end
54
55
  end
data/lib/parser_string.rb CHANGED
@@ -1,18 +1,17 @@
1
1
  module Kaiseki
2
2
  class StringParser < BasicParser
3
+
4
+ private
3
5
  def parse! stream, options = {}
4
- stream.must_be Stream
5
- stream.lock do
6
- @expected.each_char do |char|
7
- actual = stream.getc
8
- if actual.nil?
9
- raise ParseError.new "unexpected end-of-string (expected \"#{char}\") when parsing #{self}", options
10
- elsif actual != char
11
- raise ParseError.new "unexpected character \"#{actual}\" (expected \"#{char}\") when parsing #{self}", options
12
- end
6
+ @expected.each_char do |char|
7
+ actual = stream.getc
8
+ if actual.nil?
9
+ raise ParseError.new "unexpected end-of-string (expected \"#{char}\") when parsing #{self}", options
10
+ elsif actual != char
11
+ raise ParseError.new "unexpected character \"#{actual}\" (expected \"#{char}\") when parsing #{self}", options
13
12
  end
14
- @expected.dup
15
13
  end
14
+ @expected.dup
16
15
  end
17
16
  end
18
17
  end
data/lib/parser_symbol.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  module Kaiseki
2
2
  class SymbolParser < BasicParser
3
+
4
+ private
3
5
  def parse! stream, options = {}
4
- if options[:grammar]
5
- if options[:grammar].rules[@expected]
6
+ if options.key? :grammar
7
+ if options[:grammar].rules.key? @expected
6
8
  options[:grammar].rules[@expected].parse stream, options.merge(:rule => @expected.to_s)
7
9
  else
8
10
  STDERR.puts "skipping #{self}: not implemented"
data/lib/predicate_and.rb CHANGED
@@ -1,17 +1,5 @@
1
1
  module Kaiseki
2
2
  class AndPredicate < PackageParser
3
- def parse! stream, options = {}
4
- stream.must_be Stream
5
- stream.lock do
6
- begin
7
- @expected.parse stream, options
8
- rescue ParseError => e
9
- raise ParseError.new "predicate not satisfied when parsing #{self}: #{e.to_s}", options
10
- end
11
- throw :PredicateSuccess
12
- end
13
- end
14
-
15
3
  def predicate?
16
4
  true
17
5
  end
@@ -19,5 +7,15 @@ module Kaiseki
19
7
  def to_s
20
8
  "#{@expected}.and?"
21
9
  end
10
+
11
+ private
12
+ def parse! stream, options = {}
13
+ begin
14
+ @expected.parse stream, options
15
+ rescue ParseError => e
16
+ raise ParseError.new "predicate not satisfied when parsing #{self}: #{e.to_s}", options
17
+ end
18
+ throw :PredicateSuccess
19
+ end
22
20
  end
23
21
  end
data/lib/predicate_not.rb CHANGED
@@ -1,17 +1,5 @@
1
1
  module Kaiseki
2
2
  class NotPredicate < PackageParser
3
- def parse! stream, options = {}
4
- stream.must_be Stream
5
- stream.lock do
6
- begin
7
- result = @expected.parse stream, options
8
- rescue ParseError
9
- throw :PredicateSuccess
10
- end
11
- raise ParseError.new "predicate not satisfied when parsing #{self}: matched #{result}", options
12
- end
13
- end
14
-
15
3
  def predicate?
16
4
  true
17
5
  end
@@ -19,5 +7,15 @@ module Kaiseki
19
7
  def to_s
20
8
  "#{@expected}.not!"
21
9
  end
10
+
11
+ private
12
+ def parse! stream, options = {}
13
+ begin
14
+ result = @expected.parse stream, options
15
+ rescue ParseError
16
+ throw :PredicateSuccess
17
+ end
18
+ raise ParseError.new "predicate not satisfied when parsing #{self}: matched #{result}", options
19
+ end
22
20
  end
23
21
  end
@@ -1,17 +1,5 @@
1
1
  module Kaiseki
2
2
  class SkipPredicate < PackageParser
3
- def parse! stream, options = {}
4
- stream.must_be Stream
5
- stream.lock do
6
- begin
7
- @expected.parse stream, options
8
- rescue ParseError => e
9
- raise ParseError.new "predicate not satisfied when parsing #{self}: #{e.to_s}", options
10
- end
11
- throw :SkipSuccess
12
- end
13
- end
14
-
15
3
  def predicate?
16
4
  true
17
5
  end
@@ -19,5 +7,15 @@ module Kaiseki
19
7
  def to_s
20
8
  "#{@expected}.skip"
21
9
  end
10
+
11
+ private
12
+ def parse! stream, options = {}
13
+ begin
14
+ @expected.parse stream, options
15
+ rescue ParseError => e
16
+ raise ParseError.new "predicate not satisfied when parsing #{self}: #{e.to_s}", options
17
+ end
18
+ throw :SkipSuccess
19
+ end
22
20
  end
23
21
  end
data/lib/result_action.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module Kaiseki
2
2
  class ActionResult < FilterResult
3
+
4
+ private
3
5
  def parse! stream, options = {}
4
6
  if @node.is_a? Class
5
7
  node_class = @node
data/lib/result_cast.rb CHANGED
@@ -7,6 +7,13 @@ module Kaiseki
7
7
  @to_class = to_class
8
8
  end
9
9
 
10
+ def eql? other
11
+ other.is_a?(self.class) and other.expected == @expected and other.to_class == @to_class
12
+ end
13
+
14
+ alias :== :eql?
15
+
16
+ private
10
17
  def parse! stream, options = {}
11
18
  result = @expected.parse stream, options
12
19
  if @to_class == Integer
@@ -23,11 +30,5 @@ module Kaiseki
23
30
  raise "can't cast to #{@to_class}"
24
31
  end
25
32
  end
26
-
27
- def eql? other
28
- other.is_a?(self.class) and other.expected == @expected and other.to_class == @to_class
29
- end
30
-
31
- alias :== :eql?
32
33
  end
33
34
  end
data/lib/result_filter.rb CHANGED
@@ -8,6 +8,13 @@ module Kaiseki
8
8
  @block = block
9
9
  end
10
10
 
11
+ def eql? other
12
+ other.is_a?(self.class) and other.expected == @expected and other.block == @block
13
+ end
14
+
15
+ alias :== :eql?
16
+
17
+ private
11
18
  def parse! stream, options = {}
12
19
  if @node.is_a? Class
13
20
  node_class = @node
@@ -26,11 +33,5 @@ module Kaiseki
26
33
  end
27
34
  node.eval options[:global], &@block
28
35
  end
29
-
30
- def eql? other
31
- other.is_a?(self.class) and other.expected == @expected and other.block == @block
32
- end
33
-
34
- alias :== :eql?
35
36
  end
36
37
  end
data/lib/result_merge.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module Kaiseki
2
2
  class MergeResult < PackageParser
3
+
4
+ private
3
5
  def parse! stream, options = {}
4
6
  results = @expected.parse stream, options
5
7
  new_results = []
@@ -7,14 +7,15 @@ module Kaiseki
7
7
  @options = options
8
8
  end
9
9
 
10
- def parse! stream, options = {}
11
- @expected.parse stream, options.merge(@options)
12
- end
13
-
14
10
  def eql? other
15
11
  other.is_a?(self.class) and other.expected == @expected and other.options == @options
16
12
  end
17
13
 
18
14
  alias :== :eql?
15
+
16
+ private
17
+ def parse! stream, options = {}
18
+ @expected.parse stream, options.merge(@options)
19
+ end
19
20
  end
20
21
  end
@@ -7,6 +7,13 @@ module Kaiseki
7
7
  @validators = validators
8
8
  end
9
9
 
10
+ def eql? other
11
+ other.is_a?(self.class) and other.expected == @expected and other.validators == @validators
12
+ end
13
+
14
+ alias :== :eql?
15
+
16
+ private
10
17
  def parse! stream, options = {}
11
18
  result = @expected.parse stream, options
12
19
  passed = true
@@ -28,11 +35,5 @@ module Kaiseki
28
35
  raise ParseError.new "`#{result}' does not pass validation", options
29
36
  end
30
37
  end
31
-
32
- def eql? other
33
- other.is_a?(self.class) and other.expected == @expected and other.validators == @validators
34
- end
35
-
36
- alias :== :eql?
37
38
  end
38
39
  end
data/lib/rule.rb CHANGED
@@ -67,6 +67,38 @@ module Kaiseki
67
67
  end
68
68
  end
69
69
 
70
+ def validates validators
71
+ if @parseable
72
+ @parseable = @parseable.validate validators
73
+ else
74
+ raise "parseable for rule #{@name.inspect} undefined"
75
+ end
76
+ end
77
+
78
+ def set *vars
79
+ if @parseable
80
+ @parseable = @parseable.set *vars
81
+ else
82
+ raise "parseable for rule #{@name.inspect} undefined"
83
+ end
84
+ end
85
+
86
+ def tag_result name = @name
87
+ if @parseable
88
+ @parseable = @parseable.tag_result name
89
+ else
90
+ raise "parseable for rule #{@name.inspect} undefined"
91
+ end
92
+ end
93
+
94
+ def tag_error name = @name
95
+ if @parseable
96
+ @parseable = @parseable.tag_error name
97
+ else
98
+ raise "parseable for rule #{@name.inspect} undefined"
99
+ end
100
+ end
101
+
70
102
  def filter node = @name, &block
71
103
  if @parseable
72
104
  unless @grammar.nodes.key? @name
@@ -89,14 +121,6 @@ module Kaiseki
89
121
  end
90
122
  end
91
123
 
92
- def validates validators
93
- if @parseable
94
- @parseable = @parseable.validate validators
95
- else
96
- raise "parseable for rule #{@name.inspect} undefined"
97
- end
98
- end
99
-
100
124
  def node args, options = {}
101
125
  args.must_be Array
102
126
  if @grammar.nodes.key? @name
@@ -106,13 +130,5 @@ module Kaiseki
106
130
  @grammar.nodes[@name] = parent.subclass args, options
107
131
  end
108
132
  end
109
-
110
- def set *vars
111
- if @parseable
112
- @parseable = @parseable.set *vars
113
- else
114
- raise "parseable for rule #{@name.inspect} undefined"
115
- end
116
- end
117
133
  end
118
134
  end
data/lib/tag_basic.rb ADDED
@@ -0,0 +1,16 @@
1
+ module Kaiseki
2
+ class BasicTag < PackageParser
3
+ attr_reader :name
4
+
5
+ def initialize expected, name
6
+ super expected
7
+ @name = name
8
+ end
9
+
10
+ def eql? other
11
+ other.is_a?(self.class) and other.expected == @expected and other.name == @name
12
+ end
13
+
14
+ alias :== :eql?
15
+ end
16
+ end
data/lib/tag_error.rb ADDED
@@ -0,0 +1,16 @@
1
+ module Kaiseki
2
+ class ErrorTag < BasicTag
3
+
4
+ private
5
+ def parse! stream, options = {}
6
+ begin
7
+ @expected.parse stream, options
8
+ rescue ParseError => e
9
+ if options.key? :result
10
+ options[:result].errors[@name] = e
11
+ end
12
+ raise e
13
+ end
14
+ end
15
+ end
16
+ end
data/lib/tag_result.rb ADDED
@@ -0,0 +1,13 @@
1
+ module Kaiseki
2
+ class ResultTag < BasicTag
3
+
4
+ private
5
+ def parse! stream, options = {}
6
+ result = @expected.parse stream, options
7
+ if options.key? :result
8
+ options[:result].results[@name] = result
9
+ end
10
+ result
11
+ end
12
+ end
13
+ end
data/lib/var_get.rb CHANGED
@@ -7,6 +7,17 @@ module Kaiseki
7
7
  @parser = parser.to_parseable
8
8
  end
9
9
 
10
+ def eql? other
11
+ other.is_a?(self.class) and other.expected == @expected and other.parser == @parser
12
+ end
13
+
14
+ alias :== :eql?
15
+
16
+ def to_s
17
+ "#{@expected.is_a?(Symbol) ? "$#{@expected}" : @expected.inspect} (match)"
18
+ end
19
+
20
+ private
10
21
  def parse! stream, options = {}
11
22
  if @expected.is_a? Symbol
12
23
  if options[:global] and options[:global].key?(@expected)
@@ -26,15 +37,5 @@ module Kaiseki
26
37
  raise ParseError.new "unexpected result #{result.inspect} (expected #{source.inspect}) when parsing #{@parser}", options
27
38
  end
28
39
  end
29
-
30
- def eql? other
31
- other.is_a?(self.class) and other.expected == @expected and other.parser == @parser
32
- end
33
-
34
- alias :== :eql?
35
-
36
- def to_s
37
- "#{@expected.is_a?(Symbol) ? "$#{@expected}" : @expected.inspect} (match)"
38
- end
39
40
  end
40
41
  end
data/lib/var_insert.rb CHANGED
@@ -1,5 +1,10 @@
1
1
  module Kaiseki
2
2
  class InsertVar < BasicParser
3
+ def to_s
4
+ "#{@expected.is_a?(Symbol) ? "$#{@expected}" : @expected.inspect} (ins)"
5
+ end
6
+
7
+ private
3
8
  def parse! stream, options = {}
4
9
  if @expected.is_a? Symbol
5
10
  if options[:global] and options[:global].key?(@expected)
@@ -11,9 +16,5 @@ module Kaiseki
11
16
  @expected
12
17
  end
13
18
  end
14
-
15
- def to_s
16
- "#{@expected.is_a?(Symbol) ? "$#{@expected}" : @expected.inspect} (ins)"
17
- end
18
19
  end
19
20
  end
data/lib/var_set.rb CHANGED
@@ -8,17 +8,18 @@ module Kaiseki
8
8
  vars.each {|n| @vars << n }
9
9
  end
10
10
 
11
+ def eql? other
12
+ other.is_a?(self.class) and other.expected == @expected and other.vars == @vars
13
+ end
14
+
15
+ alias :== :eql?
16
+
17
+ private
11
18
  def parse! stream, options = {}
12
19
  result = @expected.parse stream, options
13
20
  options[:global] ||= {}
14
21
  @vars.each {|n| options[:global][n] = result }
15
22
  result
16
23
  end
17
-
18
- def eql? other
19
- other.is_a?(self.class) and other.expected == @expected and other.vars == @vars
20
- end
21
-
22
- alias :== :eql?
23
24
  end
24
25
  end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaiseki
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 1
8
- - 1
9
- version: 1.1.1
4
+ prerelease:
5
+ version: 1.2.1
10
6
  platform: ruby
11
7
  authors:
12
8
  - William Hamilton-Levi
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-01-24 00:00:00 -05:00
13
+ date: 2011-02-28 00:00:00 -05:00
18
14
  default_executable:
19
15
  dependencies: []
20
16
 
@@ -45,6 +41,7 @@ files:
45
41
  - lib/parseable.rb
46
42
  - lib/parser_regexp.rb
47
43
  - lib/result_filter.rb
44
+ - lib/tag_result.rb
48
45
  - lib/kaiseki.rb
49
46
  - lib/action.rb
50
47
  - lib/stream.rb
@@ -53,6 +50,7 @@ files:
53
50
  - lib/parser_sequence.rb
54
51
  - lib/mod_symbol.rb
55
52
  - lib/parser_custom.rb
53
+ - lib/tag_basic.rb
56
54
  - lib/parser_eof.rb
57
55
  - lib/result_validate.rb
58
56
  - lib/parse_result.rb
@@ -64,6 +62,7 @@ files:
64
62
  - lib/result_override.rb
65
63
  - lib/mod_regexp.rb
66
64
  - lib/parser_multi.rb
65
+ - lib/tag_error.rb
67
66
  - lib/parse_error.rb
68
67
  - lib/mod_file.rb
69
68
  - lib/mod_string.rb
@@ -83,21 +82,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
83
82
  requirements:
84
83
  - - ">="
85
84
  - !ruby/object:Gem::Version
86
- segments:
87
- - 0
88
85
  version: "0"
89
86
  required_rubygems_version: !ruby/object:Gem::Requirement
90
87
  none: false
91
88
  requirements:
92
89
  - - ">="
93
90
  - !ruby/object:Gem::Version
94
- segments:
95
- - 0
96
91
  version: "0"
97
92
  requirements: []
98
93
 
99
94
  rubyforge_project:
100
- rubygems_version: 1.3.7
95
+ rubygems_version: 1.5.2
101
96
  signing_key:
102
97
  specification_version: 3
103
98
  summary: A parsing expression grammar generator