yaparc 0.0.4 → 0.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.
Files changed (4) hide show
  1. data/lib/yaparc.rb +135 -91
  2. data/tests/test_calc.rb +158 -72
  3. data/tests/test_parser.rb +64 -37
  4. metadata +2 -2
data/lib/yaparc.rb CHANGED
@@ -13,7 +13,7 @@ module Yaparc
13
13
 
14
14
  IS_LOWER = lambda {|c| c >= 'a' and c <= 'z'}
15
15
  IS_ALPHANUM = lambda {|c| (c >= 'a' and c <= 'z') or (c >= '0' and c <= '9')}
16
- IS_DIGIT = lambda {|i| i > '0' and i < '9'}
16
+ IS_DIGIT = lambda {|i| i >= '0' and i <= '9'}
17
17
  IS_SPACE = lambda {|i| i == ' '}
18
18
 
19
19
  def self.included(mod)
@@ -24,7 +24,7 @@ module Yaparc
24
24
  def parse(input, &block)
25
25
  tree = @parser.call(input)
26
26
  if block_given?
27
- @tree = yield tree
27
+ @tree = yield tree
28
28
  else
29
29
  @tree = tree
30
30
  end
@@ -40,35 +40,38 @@ module Yaparc
40
40
  end
41
41
 
42
42
  def define_parser(&block)
43
- @@parser = lambda do |input|
44
- parser = yield
45
- parser.parse(input)
43
+ @@cparser = lambda do
44
+ yield
46
45
  end
47
46
  end
48
47
 
49
- def parser
50
- @@parser
51
- end
48
+ # def define_parser(&block)
49
+ # @@parser = lambda do |input|
50
+ # parser = yield
51
+ # parser.parse(input)
52
+ # end
53
+ # end
52
54
 
53
- def parse(input, &block)
54
- tree = @@parser.call(input)
55
+ def cparse(input, &block)
56
+ tree = @@cparser.call.parse(input)
55
57
  if block_given?
56
- @@tree = yield tree
58
+ yield tree
57
59
  else
58
- @@tree = tree
60
+ tree
59
61
  end
60
62
  end
61
- # def self.initialize
62
- # @parser = @@parser
63
- # end
63
+ module_function :cparse
64
64
 
65
65
  end
66
- end # of Parsable
66
+ end # of Module Parsable
67
+
67
68
 
68
69
  class SucceedParser
69
70
  include Parsable
70
- def initialize(value)
71
+ attr_reader :remaining
72
+ def initialize(value, remaining = nil)
71
73
  @parser = lambda {|input| [[value, input]]}
74
+ @remaining = remaining
72
75
  end
73
76
  end
74
77
 
@@ -100,18 +103,34 @@ module Yaparc
100
103
  @parser = lambda do |input|
101
104
  item = ItemParser.new.parse(input)
102
105
  if item == []
103
- FailParser.new.parse(input)
106
+ FailParser.new
104
107
  else
105
- if predicate.call(item[0][0])
106
- SucceedParser.new(item[0][0]).parse(item[0][1])
107
- else
108
- FailParser.new.parse(input)
109
- end
108
+ parser = if predicate.call(item[0][0])
109
+ # input = item[0][1]
110
+ SucceedParser.new(item[0][0], item[0][1])
111
+ else
112
+ FailParser.new
113
+ end
114
+ # parser.parse(input)
110
115
  end
111
116
  end
112
117
  end
118
+
119
+ def parse(input)
120
+ parser = @parser.call(input)
121
+ case parser
122
+ when SucceedParser
123
+ parser.parse(parser.remaining)
124
+ when FailParser
125
+ parser.parse(input)
126
+ else
127
+ raise
128
+ end
129
+ end
130
+
113
131
  end
114
132
 
133
+
115
134
  class SeqParser
116
135
  include Parsable
117
136
  def initialize(*parsers, &block)
@@ -134,6 +153,7 @@ module Yaparc
134
153
  end
135
154
  end
136
155
  end # of initialize
156
+
137
157
  end # of SeqParser
138
158
 
139
159
  class AltParser
@@ -152,23 +172,45 @@ module Yaparc
152
172
  end # of initialize
153
173
  end
154
174
 
155
- class CharParser
175
+
176
+ class ParserBase
177
+ include Parsable
178
+
179
+ def parse(input)
180
+ @parser.parse(input)
181
+ end
182
+ end
183
+
184
+ class AbstractParser
156
185
  include Parsable
186
+
187
+ def parse(input, &block)
188
+ tree = @parser.call.parse(input)
189
+ if block_given?
190
+ @tree = yield tree
191
+ else
192
+ @tree = tree
193
+ end
194
+
195
+ end
196
+ end
197
+
198
+ class CharParser < ParserBase
199
+
157
200
  def initialize(char)
158
201
  equal_char = lambda {|i| i == char}
159
- @parser = lambda do |input|
160
- SatisfyParser.new(equal_char).parse(input)
161
- end
202
+ @parser = SatisfyParser.new(equal_char)
162
203
  end
163
204
  end
164
205
 
206
+
165
207
  class StringParser
166
208
  include Parsable
167
209
  def initialize(string)
168
210
  @parser = lambda do |input|
169
211
  result = ItemParser.new.parse(string)
170
212
  if result == []
171
- SucceedParser.new(result).parse(input) # FailParser.new.parse(input)
213
+ SucceedParser.new(result)
172
214
  else
173
215
  SeqParser.new(
174
216
  CharParser.new(result[0][0]),
@@ -176,14 +218,20 @@ module Yaparc
176
218
  SucceedParser.new(result[0][0] + result[0][1])
177
219
  ) do |char_result, string_result, succeed_result|
178
220
  succeed_result
179
- end.parse(input)
221
+ end
180
222
  end
181
223
  end
182
224
  end
225
+
226
+ def parse(input)
227
+ @parser.call(input).parse(input)
228
+ end
183
229
  end
184
230
 
231
+
185
232
  class RegexParser
186
233
  include Parsable
234
+
187
235
  def initialize(regex)
188
236
  @parser = lambda do |input|
189
237
  if match = Regexp.new(regex).match(input)
@@ -195,6 +243,7 @@ module Yaparc
195
243
  end
196
244
  end
197
245
 
246
+ # permits zero or more applications of parser.
198
247
  class ManyParser
199
248
  include Parsable
200
249
  def initialize(parser)
@@ -202,14 +251,18 @@ module Yaparc
202
251
  AltParser.new(ManyOneParser.new(parser), SucceedParser.new([])).parse(input)
203
252
  end
204
253
  end
254
+
255
+ def parse(input)
256
+ @parser.call(input)
257
+ end
205
258
  end
206
259
 
260
+ # requires at least one successfull application of parser.
207
261
  class ManyOneParser
208
262
  include Parsable
209
263
  def initialize(parser)
210
264
  @parser = lambda do |input|
211
265
  SeqParser.new(
212
- # SatisfyParser.new(parser),
213
266
  parser,
214
267
  ManyParser.new(parser)
215
268
  ) do |v, vs|
@@ -218,104 +271,95 @@ module Yaparc
218
271
  else
219
272
  v + vs.to_s
220
273
  end
221
- end.parse(input)
274
+ end
222
275
  end
223
276
  end
277
+
278
+ def parse(input)
279
+ @parser.call(input).parse(input)
280
+ end
224
281
  end
225
282
 
226
- class ZeroOneParser
227
- include Parsable
283
+
284
+ class ZeroOneParser < ParserBase
285
+
228
286
  def initialize(parser)
229
- @parser = lambda do |input|
230
- AltParser.new(parser,
231
- SucceedParser.new([])).parse(input)
232
- end
287
+ @parser = AltParser.new(parser, SucceedParser.new([]))
233
288
  end
234
289
  end
235
290
 
236
- class Ident
237
- include Parsable
291
+
292
+ class Ident < ParserBase
293
+
238
294
  def initialize
239
- @parser = lambda do |input|
240
- SeqParser.new(
241
- SatisfyParser.new(IS_LOWER),
242
- # ManyParser.new(IS_ALPHANUM)
243
- ManyParser.new(SatisfyParser.new(IS_ALPHANUM))
244
- ) do |v, vs|
245
- if vs == []
246
- v
247
- else
248
- v + vs.to_s
249
- end
250
- end.parse(input)
295
+ @parser = SeqParser.new(
296
+ SatisfyParser.new(IS_LOWER),
297
+ ManyParser.new(SatisfyParser.new(IS_ALPHANUM))
298
+ ) do |v, vs|
299
+ if vs == []
300
+ v
301
+ else
302
+ v + vs.to_s
303
+ end
251
304
  end
252
305
  end
253
306
  end
254
307
 
255
- class Nat
256
- include Parsable
308
+ class Nat < ParserBase
309
+
257
310
  def initialize
258
- @parser = lambda do |input|
259
- # SeqParser.new(ManyOneParser.new(IS_DIGIT)) do |vs|
260
- SeqParser.new(ManyOneParser.new(SatisfyParser.new(IS_DIGIT))) do |vs|
261
- if vs == []
262
- vs
263
- else
264
- vs.to_i
265
- end
266
- end.parse(input)
311
+ @parser = SeqParser.new(ManyOneParser.new(SatisfyParser.new(IS_DIGIT))) do |vs|
312
+ if vs == []
313
+ vs
314
+ else
315
+ vs.to_i
316
+ end
267
317
  end
268
318
  end
269
319
  end
270
320
 
271
- class Space
272
- include Parsable
321
+
322
+ class Space < ParserBase
323
+
273
324
  def initialize
274
- @parser = lambda do |input|
275
- # SeqParser.new(ManyParser.new(IS_SPACE)) do |vs|
276
- SeqParser.new(ManyParser.new(SatisfyParser.new(IS_SPACE))) do |vs|
277
- []
278
- end.parse(input)
325
+ @parser = SeqParser.new(ManyParser.new(SatisfyParser.new(IS_SPACE))) do |vs|
326
+ []
279
327
  end
280
328
  end
281
329
  end
282
330
 
283
- class Token
284
- include Parsable
331
+
332
+ class Token < ParserBase
333
+
285
334
  def initialize(parser)
286
- @parser = lambda do |input|
287
- SeqParser.new(Space.new, parser, Space.new) do |_, vs, _|
288
- vs
289
- end.parse(input)
335
+ @parser = SeqParser.new(Space.new, parser, Space.new) do |_, vs, _|
336
+ vs
290
337
  end
291
338
  end
292
339
  end
293
340
 
294
- class Identifier
295
- include Parsable
341
+
342
+ class Identifier < ParserBase
343
+
296
344
  def initialize
297
- @parser = lambda do |input|
298
- Token.new(Ident.new).parse(input)
299
- end
345
+ @parser = Token.new(Ident.new)
300
346
  end
301
347
  end
302
348
 
303
- class Natural
304
- include Parsable
349
+
350
+ class Natural < ParserBase
351
+
305
352
  def initialize
306
- @parser = lambda do |input|
307
- Token.new(Nat.new).parse(input)
308
- end
353
+ @parser = Token.new(Nat.new)
309
354
  end
310
355
  end
311
356
 
312
- class Symbol
313
- include Parsable
357
+
358
+ class Symbol < ParserBase
359
+
314
360
  def initialize(literal)
315
- @parser = lambda do |input|
316
- Token.new(StringParser.new(literal)).parse(input)
317
- end
361
+ @parser = Token.new(StringParser.new(literal))
318
362
  end
319
363
  end
320
364
 
321
- end
365
+ end # of Yaparc
data/tests/test_calc.rb CHANGED
@@ -3,38 +3,55 @@ require 'test/unit'
3
3
  require 'pp'
4
4
 
5
5
 
6
+ class Expr < Yaparc::AbstractParser
7
+ # include Yaparc::Parsable
6
8
 
7
- class Expr
8
- include Yaparc::Parsable
9
-
10
- define_parser do
11
- AltParser.new(
12
- SeqParser.new(Term.new,
13
- Symbol.new('+'),
14
- Expr.new) do |term, _, expr|
15
- ['+', term,expr]
16
- end,
17
- Term.new
18
- )
19
- end
9
+ # define_parser do
10
+ # Yaparc::AltParser.new(
11
+ # Yaparc::SeqParser.new(Term.new,
12
+ # Yaparc::Symbol.new('+'),
13
+ # Expr.new) do |term, _, expr|
14
+ # ['+', term,expr]
15
+ # end,
16
+ # Term.new
17
+ # )
18
+ # end
20
19
 
21
20
  def initialize
22
- @parser = lambda do |input|
23
- AltParser.new(
24
- SeqParser.new(Term.new,
25
- Symbol.new('+'),
26
- Expr.new) do |term, _, expr|
27
- ['+', term,expr]
28
- end,
29
- Term.new
30
- ).parse(input)
21
+ @parser = lambda do
22
+ Yaparc::AltParser.new(
23
+ Yaparc::SeqParser.new(Term.new,
24
+ Yaparc::Symbol.new('+'),
25
+ Expr.new) do |term, _, expr|
26
+ ['+', term,expr]
27
+ end,
28
+ Term.new
29
+ )
30
+ # SeqParser.new(Term.new,
31
+ # AltParser.new(
32
+ # SeqParser.new(
33
+ # Symbol.new('+'),
34
+ # Expr.new) do |_, expr|
35
+ # expr
36
+ # end,
37
+ # SucceedParser.new([]))
38
+ # ) do |term, expr|
39
+ # if expr == []
40
+ # term
41
+ # else
42
+ # ['+', term,expr]
43
+ # end
44
+ # end
31
45
  end
32
46
  end
33
47
 
34
- def eval(input)
48
+ # def parse(input)
49
+ # @parser.call.parse(input)
50
+ # end
51
+
52
+ def evaluate(input)
35
53
  result = parse(input)
36
54
  tree = result[0][0]
37
- # p tree
38
55
  eval_tree(tree)
39
56
  end
40
57
 
@@ -54,85 +71,154 @@ class Expr
54
71
  else
55
72
  tree
56
73
  end
57
-
58
74
  end
59
75
  end
60
76
 
61
- class Term
62
- include Yaparc::Parsable
77
+ class Term < Yaparc::AbstractParser
78
+ # include Yaparc::Parsable
63
79
 
64
80
  # define_parser do
65
- # AltParser.new(
66
- # SeqParser.new(Factor.new,
67
- # Symbol.new('*'),
68
- # Term.new) do |factor, _, term|
69
- # ['*', factor,term]
70
- # end,
71
- # Factor.new
72
- # )
81
+ # Yaparc::AltParser.new(
82
+ # Yaparc::SeqParser.new(Factor.new,
83
+ # Yaparc::Symbol.new('*'),
84
+ # Term.new) do |factor, _, term|
85
+ # ['*', factor,term]
86
+ # end,
87
+ # Factor.new
88
+ # )
73
89
  # end
74
90
 
75
91
  def initialize
76
- @parser = lambda do |input|
77
- AltParser.new(
78
- SeqParser.new(Factor.new,
79
- Symbol.new('*'),
80
- Term.new) do |factor, _, term|
81
- ['*', factor,term]
82
- end,
83
- Factor.new
84
- ).parse(input)
92
+ @parser = lambda do
93
+ Yaparc::AltParser.new(
94
+ Yaparc::SeqParser.new(Factor.new,
95
+ Yaparc::Symbol.new('*'),
96
+ Term.new) do |factor, _, term|
97
+ ['*', factor,term]
98
+ end,
99
+ Factor.new
100
+ )
101
+ # SeqParser.new(Factor.new,
102
+ # AltParser.new(
103
+ # SeqParser.new(Symbol.new('*'),
104
+ # Term.new) do |_, term|
105
+ # term
106
+ # end,
107
+ # SucceedParser.new([]))
108
+ # ) do |factor, term|
109
+ # if term == []
110
+ # factor
111
+ # else
112
+ # ['*', factor,term]
113
+ # end
114
+ # end
85
115
  end
86
116
  end
117
+
118
+ # def parse(input)
119
+ # @parser.call.parse(input)
120
+ # end
87
121
  end
88
122
 
89
- class Factor
90
- include Yaparc::Parsable
123
+ class Factor < Yaparc::AbstractParser
124
+ # include Yaparc::Parsable
91
125
 
92
- # define_parser do
93
- # AltParser.new(
94
- # SeqParser.new(Symbol.new('('),
95
- # Expr.new,
96
- # Symbol.new(')')) do |_,expr, _|
97
- # expr
98
- # end,
99
- # Natural.new
100
- # )
101
- # end
126
+ define_parser do
127
+ AltParser.new(
128
+ Yaparc::SeqParser.new(
129
+ Yaparc::Symbol.new('('),
130
+ Expr.new,
131
+ Yaparc::Symbol.new(')')
132
+ ) do |_,expr, _|
133
+ expr
134
+ end,
135
+ Natural.new
136
+ )
137
+ end
102
138
 
103
139
  def initialize
104
- @parser = lambda do |input|
140
+ @parser = lambda do
105
141
  AltParser.new(
106
- SeqParser.new(Symbol.new('('),
107
- Expr.new,
108
- Symbol.new(')')) do |_,expr, _|
142
+ Yaparc::SeqParser.new(
143
+ Yaparc::Symbol.new('('),
144
+ Expr.new,
145
+ Yaparc::Symbol.new(')')
146
+ ) do |_,expr, _|
109
147
  expr
110
148
  end,
111
- Natural.new
112
- ).parse(input)
149
+ Yaparc::Natural.new
150
+ )
113
151
  end
114
152
  end
153
+
154
+ # def parse(input)
155
+ # @parser.call.parse(input)
156
+ # end
115
157
  end
116
158
 
159
+ # class Comb < Yaparc::ParserBase
160
+ # include Yaparc::Parsable
161
+
162
+ # def initialize
163
+ # @parser = lambda do
164
+ # AltParser.new(
165
+ # SeqParser.new(Symbol.new('+'),
166
+ # Nat.new) do | _, nat|
167
+ # nat
168
+ # end,
169
+ # Nat.new
170
+ # )
171
+ # end
172
+ # end
173
+
174
+ # def parse(input)
175
+ # @parser.call.parse(input)
176
+ # end
177
+ # end
178
+
117
179
  class YaparcCalcTest < Test::Unit::TestCase
118
180
  include ::Yaparc
119
181
 
120
182
  def setup
183
+ @expr = Expr.new
184
+ @factor = Factor.new
121
185
  end
122
186
 
123
187
  def test_expr
124
- parser = Expr.new
125
- result = parser.parse("1 + 2 ")
188
+ result = @expr.parse("1 + 2 ")
126
189
  assert_equal [[["+", 1, 2], ""]], result
127
- assert_equal 3, parser.eval("1 + 2 ")
128
- assert_equal 9, parser.eval("(1 + 2) * 3 ")
190
+ assert_equal 3, @expr.evaluate("1 + 2 ")
191
+ assert_equal 9, @expr.evaluate("(1 + 2) * 3 ")
129
192
  end
130
193
 
131
- def test_expr_define_parser
132
- parser = Expr.new
133
- result = Expr.parse("1 + 2 ")
134
- assert_equal [[["+", 1, 2], ""]], result
135
- assert_equal 3, parser.eval("1 + 2 ")
136
- assert_equal 9, parser.eval("(1 + 2) * 3 ")
194
+ def test_factor
195
+ result = @factor.parse("1")
196
+ assert_equal [[1, ""]], result
197
+
198
+ result = @factor.parse("( 1 )")
199
+ assert_equal [[1, ""]], result
200
+
201
+ result = @factor.parse("( 312 )")
202
+ assert_equal [[312, ""]], result
137
203
  end
204
+
205
+ # def test_cexpr
206
+ # result = @expr.cparse("1 + 2 ")
207
+ # assert_equal [[["+", 1, 2], ""]], result
208
+ # end
209
+
210
+ # def test_comb
211
+ # comb = Comb.new
212
+ # result = comb.parse("+123")
213
+ # assert_equal [[123, ""]], result
214
+ # end
215
+
216
+
217
+ # def test_expr_define_parser
218
+ # parser = Expr.new
219
+ # result = Expr.parse("1 + 2 ")
220
+ # assert_equal [[["+", 1, 2], ""]], result
221
+ # # assert_equal 3, parser.evaluate("1 + 2 ")
222
+ # # assert_equal 9, parser.evaluate("(1 + 2) * 3 ")
223
+ # end
138
224
  end
data/tests/test_parser.rb CHANGED
@@ -37,6 +37,36 @@ class YaparcTest < Test::Unit::TestCase
37
37
  assert_equal [["a", "bc"]], result
38
38
  end
39
39
 
40
+ def test_satisfy_parse
41
+ is_integer = lambda do |i|
42
+ begin
43
+ Integer(i)
44
+ true
45
+ rescue
46
+ false
47
+ end
48
+ end
49
+ parser = SatisfyParser.new(is_integer)
50
+ result = parser.parse("123")
51
+ assert_equal [["1", "23"]], result
52
+
53
+ parser = SatisfyParser.new(is_integer)
54
+ result = parser.parse("abc")
55
+ assert_equal [], result
56
+
57
+ is_char = lambda do |i|
58
+ begin
59
+ String(i)
60
+ true
61
+ rescue
62
+ false
63
+ end
64
+ end
65
+ parser = SatisfyParser.new(is_char)
66
+ result = parser.parse("abc")
67
+ assert_equal [["a", "bc"]], result
68
+ end
69
+
40
70
  def test_seq_parse
41
71
  parser = SeqParser.new(ItemParser.new, ItemParser.new) do |item1, item2|
42
72
  [item1, item2]
@@ -71,35 +101,6 @@ class YaparcTest < Test::Unit::TestCase
71
101
  assert_equal [], result
72
102
  end
73
103
 
74
- def test_satisfy_parse
75
- is_integer = lambda do |i|
76
- begin
77
- Integer(i)
78
- true
79
- rescue
80
- false
81
- end
82
- end
83
- parser = SatisfyParser.new(is_integer)
84
- result = parser.parse("123")
85
- assert_equal [["1", "23"]], result
86
-
87
- parser = SatisfyParser.new(is_integer)
88
- result = parser.parse("abc")
89
- assert_equal [], result
90
-
91
- is_char = lambda do |i|
92
- begin
93
- String(i)
94
- true
95
- rescue
96
- false
97
- end
98
- end
99
- parser = SatisfyParser.new(is_char)
100
- result = parser.parse("abc")
101
- assert_equal [["a", "bc"]], result
102
- end
103
104
 
104
105
  def test_char_parse
105
106
  parser = CharParser.new("a")
@@ -131,6 +132,15 @@ class YaparcTest < Test::Unit::TestCase
131
132
  assert_equal [["1234", "ab"]], result
132
133
  end
133
134
 
135
+ def test_zero_one_parse
136
+ parser = ZeroOneParser.new(StringParser.new("abc"))
137
+ result = parser.parse("abc ")
138
+ assert_equal [["abc", " "]], result
139
+ parser = ZeroOneParser.new(StringParser.new("abc"))
140
+ result = parser.parse("123")
141
+ assert_equal [[[], "123"]], result
142
+ end
143
+
134
144
  def test_many_parse
135
145
  # is_digit = lambda {|i| i > '0' and i < '9'}
136
146
  is_digit = SatisfyParser.new(lambda {|i| i > '0' and i < '9'})
@@ -142,14 +152,6 @@ class YaparcTest < Test::Unit::TestCase
142
152
  assert_equal [[[], "abcdef"]], result
143
153
  end
144
154
 
145
- def test_zero_one_parse
146
- parser = ZeroOneParser.new(StringParser.new("abc"))
147
- result = parser.parse("abc ")
148
- assert_equal [["abc", " "]], result
149
- parser = ZeroOneParser.new(StringParser.new("abc"))
150
- result = parser.parse("123")
151
- assert_equal [[[], "123"]], result
152
- end
153
155
 
154
156
  def test_ident
155
157
  parser = Ident.new
@@ -201,5 +203,30 @@ class YaparcTest < Test::Unit::TestCase
201
203
  assert_equal [["%", ""]], result
202
204
  end
203
205
 
206
+ def test_combination
207
+ parser = AltParser.new(
208
+ SeqParser.new(Symbol.new('+'),
209
+ Natural.new) do | _, nat|
210
+ nat
211
+ end,
212
+ Natural.new
213
+ )
214
+ result = parser.parse("+123")
215
+ assert_equal [[123, ""]], result
216
+ result = parser.parse(" 123 ")
217
+ assert_equal [[123, ""]], result
218
+ parser = AltParser.new(
219
+ SeqParser.new(
220
+ Symbol.new('('),
221
+ Natural.new,
222
+ Symbol.new(')')
223
+ ) do |_,expr, _|
224
+ expr
225
+ end,
226
+ Natural.new
227
+ )
228
+ result = parser.parse("( 123 )")
229
+ assert_equal [[123, ""]], result
230
+ end
204
231
  end
205
232
 
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.4
7
- date: 2008-01-05 00:00:00 +09:00
6
+ version: 0.0.6
7
+ date: 2008-01-07 00:00:00 +09:00
8
8
  summary: Yet Another Combinator Parser Library
9
9
  require_paths:
10
10
  - lib