yaparc 0.0.9 → 0.1.0

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/yaparc.rb CHANGED
@@ -6,9 +6,27 @@ end
6
6
 
7
7
 
8
8
  module Yaparc
9
- module Parsable
10
- include Yaparc
9
+ module Result
10
+ class Base
11
+ attr_accessor :message, :input, :value
12
+ def initialize(options = {})
13
+ @message = options[:message] if options[:message]
14
+ @input = options[:input] if options[:input]
15
+ @value = options[:value] if options[:value]
16
+ end
17
+ end
18
+
19
+ class OK < Base
20
+ end
21
+
22
+ class Fail < Base
23
+ end
24
+
25
+ class Error < Base
26
+ end
27
+ end # of module Result
11
28
 
29
+ module Parsable
12
30
  attr_accessor :tree
13
31
 
14
32
  IS_LOWER = lambda {|c| c >= 'a' and c <= 'z'}
@@ -66,23 +84,7 @@ module Yaparc
66
84
  end
67
85
  end # of Module Parsable
68
86
 
69
- class Result
70
- attr_accessor :message, :input, :value
71
- def initialize(options = {})
72
- @message = options[:message] if options[:message]
73
- @input = options[:input] if options[:input]
74
- @value = options[:value] if options[:value]
75
- end
76
- end
77
-
78
- class OK < Result
79
- end
80
-
81
- class Fail < Result
82
- end
83
87
 
84
- class Error < Result
85
- end
86
88
 
87
89
  class SucceedParser
88
90
  include Parsable
@@ -90,7 +92,7 @@ module Yaparc
90
92
  def initialize(value, remaining = nil)
91
93
  @parser = lambda do |input|
92
94
  # [[value, input]]
93
- OK.new(:value => value, :input => input)
95
+ Result::OK.new(:value => value, :input => input)
94
96
  end
95
97
  @remaining = remaining
96
98
  end
@@ -100,7 +102,7 @@ module Yaparc
100
102
  include Parsable
101
103
  def initialize
102
104
  @parser = lambda do |input|
103
- Fail.new
105
+ Result::Fail.new
104
106
  end
105
107
  end
106
108
  end
@@ -111,10 +113,10 @@ module Yaparc
111
113
  def initialize
112
114
  @parser = lambda do |input|
113
115
  if input.nil? or input.empty?
114
- Fail.new
116
+ Result::Fail.new
115
117
  else
116
118
  # [[input[0..0],input[1..input.length]]]
117
- OK.new(:value => input[0..0],:input => input[1..input.length])
119
+ Result::OK.new(:value => input[0..0],:input => input[1..input.length])
118
120
  end
119
121
  end
120
122
  end
@@ -127,7 +129,7 @@ module Yaparc
127
129
 
128
130
  @parser = lambda do |input|
129
131
  case result = ItemParser.new.parse(input)
130
- when Fail
132
+ when Result::Fail
131
133
  FailParser.new
132
134
  else
133
135
  parser = if predicate.call(result.value)
@@ -158,11 +160,11 @@ module Yaparc
158
160
  def initialize(*parsers, &block)
159
161
  @parser = lambda do |input|
160
162
  args = []
161
- initial_result = OK.new(:input => input)
163
+ initial_result = Result::OK.new(:input => input)
162
164
  final_result = parsers.inject(initial_result) do |subsequent, parser|
163
165
  case result = parser.parse(subsequent.input)
164
- when Fail
165
- break Fail.new
166
+ when Result::Fail
167
+ break Result::Fail.new
166
168
  else
167
169
  args << result.value
168
170
  result
@@ -170,15 +172,15 @@ module Yaparc
170
172
  end
171
173
 
172
174
  case final_result
173
- when Fail
174
- Fail.new
175
- when OK
175
+ when Result::Fail
176
+ Result::Fail.new
177
+ when Result::OK
176
178
  final_value = if block_given?
177
179
  yield(*args)
178
180
  else
179
181
  args.last
180
182
  end
181
- OK.new(:value => final_value, :input => final_result.input)
183
+ Result::OK.new(:value => final_value, :input => final_result.input)
182
184
  else
183
185
  raise
184
186
  end
@@ -191,14 +193,14 @@ module Yaparc
191
193
  include Parsable
192
194
  def initialize(*parsers)
193
195
  @parser = lambda do |input|
194
- initial_result = OK.new(:input => input)
195
- final_result = Fail.new
196
+ initial_result = Result::OK.new(:input => input)
197
+ final_result = Result::Fail.new
196
198
  # final_result = Error.new
197
199
  parsers.each do |parser|
198
200
  case result = parser.parse(initial_result.input)
199
- when Fail
201
+ when Result::Fail
200
202
  next
201
- when OK
203
+ when Result::OK
202
204
  break final_result = result
203
205
  else
204
206
  raise
@@ -216,9 +218,9 @@ module Yaparc
216
218
  def initialize(parser, &block)
217
219
  @parser = lambda do |input|
218
220
  case result = parser.parse(input)
219
- when OK
221
+ when Result::OK
220
222
  SucceedParser.new(yield(result.value)).parse(result.input)
221
- when Fail
223
+ when Result::Fail
222
224
  FailParser.new.parse(input)
223
225
  else
224
226
  raise
@@ -233,9 +235,9 @@ module Yaparc
233
235
  def initialize(string)
234
236
  @parser = lambda do |input|
235
237
  case result = ItemParser.new.parse(string)
236
- when Fail
238
+ when Result::Fail
237
239
  SucceedParser.new(result) # Is it OK?
238
- when OK
240
+ when Result::OK
239
241
  SeqParser.new(
240
242
  CharParser.new(result.value),
241
243
  StringParser.new(result.input),
@@ -260,9 +262,9 @@ module Yaparc
260
262
  def initialize(regex)
261
263
  @parser = lambda do |input|
262
264
  if match = Regexp.new(regex).match(input)
263
- OK.new(:value => match[0], :input => match.post_match)
265
+ Result::OK.new(:value => match[0], :input => match.post_match)
264
266
  else
265
- Fail.new
267
+ Result::Fail.new
266
268
  end
267
269
  end
268
270
  end
@@ -378,9 +380,9 @@ module Yaparc
378
380
  @parser = lambda do |input|
379
381
  keyword_parsers = keywords.map {|keyword| StringParser.new(keyword)}
380
382
  case result = AltParser.new(*keyword_parsers).parse(input)
381
- when OK
383
+ when Result::OK
382
384
  FailParser.new
383
- when Fail
385
+ when Result::Fail
384
386
  Token.new(Ident.new)
385
387
  else
386
388
  raise
data/tests/test_calc.rb CHANGED
@@ -87,7 +87,7 @@ class Factor < Yaparc::AbstractParser
87
87
 
88
88
  def initialize
89
89
  @parser = lambda do
90
- AltParser.new(
90
+ Yaparc::AltParser.new(
91
91
  Yaparc::SeqParser.new(
92
92
  Yaparc::Symbol.new('('),
93
93
  Expr.new,
@@ -125,7 +125,7 @@ class YaparcCalcTest < Test::Unit::TestCase
125
125
 
126
126
  def test_expr
127
127
  result = @expr.parse("1 + 2 ")
128
- assert_instance_of OK, result
128
+ assert_instance_of Result::OK, result
129
129
  assert_equal ["+", 1, 2], result.value
130
130
  assert_equal "", result.input
131
131
  assert_equal 3, @expr.evaluate("1 + 2 ")
data/tests/test_parser.rb CHANGED
@@ -38,7 +38,7 @@ class YaparcTest < Test::Unit::TestCase
38
38
  def test_fail_parse
39
39
  parser = ::Yaparc::FailParser.new
40
40
  result = parser.parse("abc")
41
- assert_instance_of Fail, result
41
+ assert_instance_of Result::Fail, result
42
42
  end
43
43
 
44
44
  # def test_fail_parse
@@ -50,7 +50,7 @@ class YaparcTest < Test::Unit::TestCase
50
50
  def test_item_parse
51
51
  parser = ::Yaparc::ItemParser.new
52
52
  result = parser.parse("")
53
- assert_instance_of Fail, result
53
+ assert_instance_of Result::Fail, result
54
54
  result = parser.parse("abc")
55
55
  assert_equal "a", result.value
56
56
  assert_equal "bc", result.input
@@ -80,7 +80,7 @@ class YaparcTest < Test::Unit::TestCase
80
80
 
81
81
  parser = SatisfyParser.new(is_integer)
82
82
  result = parser.parse("abc")
83
- assert_instance_of Fail, result
83
+ assert_instance_of Result::Fail, result
84
84
 
85
85
  is_char = lambda do |i|
86
86
  begin
@@ -196,7 +196,7 @@ class YaparcTest < Test::Unit::TestCase
196
196
 
197
197
  parser = AltParser.new(FailParser.new, FailParser.new)
198
198
  result = parser.parse("abc")
199
- assert_instance_of Fail, result
199
+ assert_instance_of Result::Fail, result
200
200
  end
201
201
 
202
202
 
@@ -233,7 +233,7 @@ class YaparcTest < Test::Unit::TestCase
233
233
 
234
234
  parser = CharParser.new("a")
235
235
  result = parser.parse("123")
236
- assert_instance_of Fail, result
236
+ assert_instance_of Result::Fail, result
237
237
  end
238
238
 
239
239
  # def test_char_parse
@@ -254,7 +254,7 @@ class YaparcTest < Test::Unit::TestCase
254
254
 
255
255
  parser = StringParser.new("abc")
256
256
  result = parser.parse("ab1234")
257
- assert_instance_of Fail, result
257
+ assert_instance_of Result::Fail, result
258
258
  end
259
259
 
260
260
  # def test_string_parse
@@ -397,7 +397,7 @@ class YaparcTest < Test::Unit::TestCase
397
397
 
398
398
  parser_with_keyword = Identifier.new("abc","efg")
399
399
  result = parser_with_keyword.parse("abc")
400
- assert_instance_of Fail, result
400
+ assert_instance_of Result::Fail, result
401
401
  result = parser_with_keyword.parse(" xyz")
402
402
  assert_equal "xyz", result.value
403
403
  assert_equal "", result.input
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.3
3
3
  specification_version: 1
4
4
  name: yaparc
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.9
7
- date: 2008-01-11 00:00:00 +09:00
6
+ version: 0.1.0
7
+ date: 2008-01-16 00:00:00 +09:00
8
8
  summary: Yet Another Combinator Parser Library
9
9
  require_paths:
10
10
  - lib