yaparc 0.0.7 → 0.0.8

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 (5) hide show
  1. data/README +172 -8
  2. data/lib/yaparc.rb +402 -69
  3. data/tests/test_calc.rb +42 -105
  4. data/tests/test_parser.rb +304 -67
  5. metadata +2 -2
data/tests/test_parser.rb CHANGED
@@ -15,28 +15,55 @@ class YaparcTest < Test::Unit::TestCase
15
15
 
16
16
  def test_succeed_parse
17
17
  parser = ::Yaparc::SucceedParser.new(1)
18
- assert_equal [[1, "abs"]], parser.parse("abs")
19
- assert_equal [[1, "abs"]], parser.tree
18
+ result = parser.parse("abs")
19
+ assert_equal 1, result.value
20
+ assert_equal "abs", result.input
21
+ # assert_equal 1, parser.tree
20
22
  result = parser.parse("abs") do |result|
21
- result[0][0]
23
+ result
22
24
  end
23
- assert_equal 1, result
25
+ assert_equal 1, result.value
24
26
  end
25
27
 
28
+ # def test_succeed_parse
29
+ # parser = ::Yaparc::SucceedParser.new(1)
30
+ # assert_equal [[1, "abs"]], parser.parse("abs")
31
+ # assert_equal [[1, "abs"]], parser.tree
32
+ # result = parser.parse("abs") do |result|
33
+ # result[0][0]
34
+ # end
35
+ # assert_equal 1, result
36
+ # end
37
+
26
38
  def test_fail_parse
27
39
  parser = ::Yaparc::FailParser.new
28
40
  result = parser.parse("abc")
29
- assert_equal [], result
41
+ assert_instance_of Fail, result
30
42
  end
31
43
 
44
+ # def test_fail_parse
45
+ # parser = ::Yaparc::FailParser.new
46
+ # result = parser.parse("abc")
47
+ # assert_equal [], result
48
+ # end
49
+
32
50
  def test_item_parse
33
51
  parser = ::Yaparc::ItemParser.new
34
52
  result = parser.parse("")
35
- assert_equal [], result
53
+ assert_instance_of Fail, result
36
54
  result = parser.parse("abc")
37
- assert_equal [["a", "bc"]], result
55
+ assert_equal "a", result.value
56
+ assert_equal "bc", result.input
38
57
  end
39
58
 
59
+ # def test_item_parse
60
+ # parser = ::Yaparc::ItemParser.new
61
+ # result = parser.parse("")
62
+ # assert_equal [], result
63
+ # result = parser.parse("abc")
64
+ # assert_equal [["a", "bc"]], result
65
+ # end
66
+
40
67
  def test_satisfy_parse
41
68
  is_integer = lambda do |i|
42
69
  begin
@@ -48,11 +75,12 @@ class YaparcTest < Test::Unit::TestCase
48
75
  end
49
76
  parser = SatisfyParser.new(is_integer)
50
77
  result = parser.parse("123")
51
- assert_equal [["1", "23"]], result
78
+ assert_equal "1", result.value
79
+ assert_equal "23", result.input
52
80
 
53
81
  parser = SatisfyParser.new(is_integer)
54
82
  result = parser.parse("abc")
55
- assert_equal [], result
83
+ assert_instance_of Fail, result
56
84
 
57
85
  is_char = lambda do |i|
58
86
  begin
@@ -64,175 +92,384 @@ class YaparcTest < Test::Unit::TestCase
64
92
  end
65
93
  parser = SatisfyParser.new(is_char)
66
94
  result = parser.parse("abc")
67
- assert_equal [["a", "bc"]], result
95
+ assert_equal "a", result.value
96
+ assert_equal "bc", result.input
68
97
  end
69
98
 
99
+ # def test_satisfy_parse
100
+ # is_integer = lambda do |i|
101
+ # begin
102
+ # Integer(i)
103
+ # true
104
+ # rescue
105
+ # false
106
+ # end
107
+ # end
108
+ # parser = SatisfyParser.new(is_integer)
109
+ # result = parser.parse("123")
110
+ # assert_equal [["1", "23"]], result
111
+
112
+ # parser = SatisfyParser.new(is_integer)
113
+ # result = parser.parse("abc")
114
+ # assert_equal [], result
115
+
116
+ # is_char = lambda do |i|
117
+ # begin
118
+ # String(i)
119
+ # true
120
+ # rescue
121
+ # false
122
+ # end
123
+ # end
124
+ # parser = SatisfyParser.new(is_char)
125
+ # result = parser.parse("abc")
126
+ # assert_equal [["a", "bc"]], result
127
+ # end
128
+
129
+
70
130
  def test_seq_parse
71
131
  parser = SeqParser.new(ItemParser.new, ItemParser.new) do |item1, item2|
72
132
  [item1, item2]
73
133
  end
74
134
  result = parser.parse("abcdef")
75
- assert_equal [[["a", "b"], "cdef"]], result
135
+ assert_equal ["a", "b"], result.value
136
+ assert_equal "cdef", result.input
76
137
 
77
138
  parser = SeqParser.new(ItemParser.new, ItemParser.new, ItemParser.new) do |item1, item2, item3|
78
139
  [item1, item3]
79
140
  end
80
141
  result = parser.parse("ABCDEF")
81
- assert_equal [[["A", "C"], "DEF"]], result
142
+ assert_equal ["A", "C"], result.value
143
+ assert_equal "DEF", result.input
82
144
 
83
145
  parser = SeqParser.new(ItemParser.new, ItemParser.new, ItemParser.new) do |item1, item2, item3|
84
146
  [item2]
85
147
  end
86
148
  result = parser.parse("ABCDEF")
87
- assert_equal [[["B"], "DEF"]], result
149
+ assert_equal ["B"], result.value
150
+ assert_equal "DEF", result.input
88
151
  end
89
152
 
153
+ # def test_seq_parse
154
+ # parser = SeqParser.new(ItemParser.new, ItemParser.new) do |item1, item2|
155
+ # [item1, item2]
156
+ # end
157
+ # result = parser.parse("abcdef")
158
+ # assert_equal [[["a", "b"], "cdef"]], result
159
+
160
+ # parser = SeqParser.new(ItemParser.new, ItemParser.new, ItemParser.new) do |item1, item2, item3|
161
+ # [item1, item3]
162
+ # end
163
+ # result = parser.parse("ABCDEF")
164
+ # assert_equal [[["A", "C"], "DEF"]], result
165
+
166
+ # parser = SeqParser.new(ItemParser.new, ItemParser.new, ItemParser.new) do |item1, item2, item3|
167
+ # [item2]
168
+ # end
169
+ # result = parser.parse("ABCDEF")
170
+ # assert_equal [[["B"], "DEF"]], result
171
+ # end
172
+
90
173
  def test_seq_parse_without_block
91
174
  parser = SeqParser.new(ItemParser.new, ItemParser.new)
92
175
  result = parser.parse("abcdef")
93
- assert_equal [["b", "cdef"]], result
176
+ assert_equal "b", result.value
177
+ assert_equal "cdef", result.input
94
178
  end
95
179
 
180
+ # def test_seq_parse_without_block
181
+ # parser = SeqParser.new(ItemParser.new, ItemParser.new)
182
+ # result = parser.parse("abcdef")
183
+ # assert_equal [["b", "cdef"]], result
184
+ # end
185
+
96
186
  def test_alt_parse
97
187
  parser = AltParser.new(ItemParser.new, SucceedParser.new('d'))
98
188
  result = parser.parse("abc")
99
- assert_equal [["a", "bc"]], result
189
+ assert_equal "a", result.value
190
+ assert_equal "bc", result.input
100
191
 
101
192
  parser = AltParser.new(FailParser.new, SucceedParser.new('d'))
102
193
  result = parser.parse("abc")
103
- assert_equal [["d", "abc"]], result
194
+ assert_equal "d", result.value
195
+ assert_equal "abc", result.input
104
196
 
105
197
  parser = AltParser.new(FailParser.new, FailParser.new)
106
198
  result = parser.parse("abc")
107
- assert_equal [], result
199
+ assert_instance_of Fail, result
108
200
  end
109
201
 
110
202
 
203
+ # def test_alt_parse
204
+ # parser = AltParser.new(ItemParser.new, SucceedParser.new('d'))
205
+ # result = parser.parse("abc")
206
+ # assert_equal [["a", "bc"]], result
207
+
208
+ # parser = AltParser.new(FailParser.new, SucceedParser.new('d'))
209
+ # result = parser.parse("abc")
210
+ # assert_equal [["d", "abc"]], result
211
+
212
+ # parser = AltParser.new(FailParser.new, FailParser.new)
213
+ # result = parser.parse("abc")
214
+ # assert_equal [], result
215
+ # end
216
+
217
+ # def test_apply_parse
218
+ # is_digit = lambda {|i| i >= '0' and i <= '9'}
219
+ # parser = ApplyParser.new(SatisfyParser.new(is_digit)) do |digit|
220
+ # digit.to_i - '0'.to_i
221
+ # end
222
+
223
+ # result = parser.parse('7')
224
+ # assert_equal [[7, ""]], result
225
+ # end
226
+
111
227
  def test_char_parse
112
228
  parser = CharParser.new("a")
113
229
  result = parser.parse("abc")
114
- assert_equal [["a", "bc"]], result
230
+ assert_equal "a", result.value
231
+ assert_equal "bc", result.input
115
232
 
116
233
  parser = CharParser.new("a")
117
234
  result = parser.parse("123")
118
- assert_equal [], result
235
+ assert_instance_of Fail, result
119
236
  end
120
237
 
238
+ # def test_char_parse
239
+ # parser = CharParser.new("a")
240
+ # result = parser.parse("abc")
241
+ # assert_equal [["a", "bc"]], result
242
+
243
+ # parser = CharParser.new("a")
244
+ # result = parser.parse("123")
245
+ # assert_equal [], result
246
+ # end
247
+
121
248
  def test_string_parse
122
249
  parser = StringParser.new("abc")
123
250
  result = parser.parse("abcdef")
124
- assert_equal [["abc", "def"]], result
251
+ assert_equal "abc", result.value
252
+ assert_equal "def", result.input
125
253
 
126
254
  parser = StringParser.new("abc")
127
255
  result = parser.parse("ab1234")
128
- assert_equal [], result
256
+ assert_instance_of Fail, result
129
257
  end
130
258
 
259
+ # def test_string_parse
260
+ # parser = StringParser.new("abc")
261
+ # result = parser.parse("abcdef")
262
+ # assert_equal [["abc", "def"]], result
263
+
264
+ # parser = StringParser.new("abc")
265
+ # result = parser.parse("ab1234")
266
+ # assert_equal [], result
267
+ # end
268
+
131
269
  def test_regex_parse
132
270
  parser = RegexParser.new(/[a-z]/)
133
271
  result = parser.parse("abcdef")
134
- assert_equal [["a", "bcdef"]], result
272
+ assert_equal "a", result.value
273
+ assert_equal "bcdef", result.input
135
274
 
136
275
  parser = RegexParser.new(/[0-9]+/)
137
276
  result = parser.parse("1234ab")
138
- assert_equal [["1234", "ab"]], result
277
+ assert_equal "1234", result.value
278
+ assert_equal "ab", result.input
139
279
  end
140
280
 
281
+ # def test_regex_parse
282
+ # parser = RegexParser.new(/[a-z]/)
283
+ # result = parser.parse("abcdef")
284
+ # assert_equal [["a", "bcdef"]], result
285
+
286
+ # parser = RegexParser.new(/[0-9]+/)
287
+ # result = parser.parse("1234ab")
288
+ # assert_equal [["1234", "ab"]], result
289
+ # end
290
+
141
291
  def test_zero_one_parse
142
292
  parser = ZeroOneParser.new(StringParser.new("abc"))
143
293
  result = parser.parse("abc ")
144
- assert_equal [["abc", " "]], result
294
+ assert_equal "abc", result.value
295
+ assert_equal " ", result.input
145
296
  parser = ZeroOneParser.new(StringParser.new("abc"))
146
297
  result = parser.parse("123")
147
- assert_equal [[[], "123"]], result
298
+ assert_equal [], result.value
299
+ assert_equal "123", result.input
148
300
  end
149
301
 
302
+ # def test_zero_one_parse
303
+ # parser = ZeroOneParser.new(StringParser.new("abc"))
304
+ # result = parser.parse("abc ")
305
+ # assert_equal [["abc", " "]], result
306
+ # parser = ZeroOneParser.new(StringParser.new("abc"))
307
+ # result = parser.parse("123")
308
+ # assert_equal [[[], "123"]], result
309
+ # end
310
+
150
311
  def test_many_parse
151
- # is_digit = lambda {|i| i > '0' and i < '9'}
152
- is_digit = SatisfyParser.new(lambda {|i| i > '0' and i < '9'})
312
+ is_digit = SatisfyParser.new(lambda {|i| i >= '0' and i <= '9'})
153
313
  parser = ManyParser.new(is_digit)
154
314
  result = parser.parse("123abc")
155
- assert_equal [["123", "abc"]], result
315
+ assert_equal "123", result.value
316
+ assert_equal "abc", result.input
156
317
 
157
318
  result = parser.parse("abcdef")
158
- assert_equal [[[], "abcdef"]], result
319
+ assert_equal "", result.value
320
+ assert_equal "abcdef", result.input
159
321
  end
160
322
 
323
+ # def test_many_parse
324
+ # is_digit = SatisfyParser.new(lambda {|i| i >= '0' and i <= '9'})
325
+ # parser = ManyParser.new(is_digit)
326
+ # result = parser.parse("123abc")
327
+ # assert_equal [["123", "abc"]], result
328
+
329
+ # result = parser.parse("abcdef")
330
+ # assert_equal [[[], "abcdef"]], result
331
+ # end
332
+
161
333
 
162
334
  def test_ident
163
335
  parser = Ident.new
164
336
  result = parser.parse("abc def")
165
- assert_equal [["abc", " def"]], result
337
+ assert_equal "abc", result.value
338
+ assert_equal " def", result.input
166
339
  end
167
340
 
341
+ # def test_ident
342
+ # parser = Ident.new
343
+ # result = parser.parse("abc def")
344
+ # assert_equal [["abc", " def"]], result
345
+ # end
346
+
168
347
  def test_nat
169
348
  parser = Nat.new
170
349
  result = parser.parse("123 abc")
171
- assert_equal [[123, " abc"]], result
350
+ assert_equal 123, result.value
351
+ assert_equal " abc", result.input
172
352
  end
173
353
 
354
+
355
+ # def test_nat
356
+ # parser = Nat.new
357
+ # result = parser.parse("123 abc")
358
+ # assert_equal [[123, " abc"]], result
359
+ # end
360
+
174
361
  def test_nat_ident
175
362
  parser = SeqParser.new(Nat.new, Ident.new) do |nat, ident|
176
363
  [nat,ident]
177
364
  end
178
365
  result = parser.parse("123abc")
179
- assert_equal [[[123, "abc"], ""]], result
366
+ assert_equal [123, "abc"], result.value
367
+ assert_equal "", result.input
180
368
  end
181
369
 
370
+ # def test_nat_ident
371
+ # parser = SeqParser.new(Nat.new, Ident.new) do |nat, ident|
372
+ # [nat,ident]
373
+ # end
374
+ # result = parser.parse("123abc")
375
+ # assert_equal [[[123, "abc"], ""]], result
376
+ # end
377
+
182
378
  def test_space
183
379
  parser = Space.new
184
380
  result = parser.parse(" abc")
185
- assert_equal [[[], "abc"]], result
381
+ assert_equal [], result.value
382
+ assert_equal "abc", result.input
186
383
  end
187
384
 
385
+ # def test_space
386
+ # parser = Space.new
387
+ # result = parser.parse(" abc")
388
+ # assert_equal [[[], "abc"]], result
389
+ # end
390
+
188
391
  def test_identifier
189
392
  parser = Identifier.new
190
393
  result = parser.parse(" abc ")
191
- assert_equal [["abc", ""]], result
394
+ assert_equal "abc", result.value
395
+ assert_equal "", result.input
396
+
397
+ parser_with_keyword = Identifier.new("abc","efg")
398
+ result = parser_with_keyword.parse("abc")
399
+ assert_instance_of Fail, result
400
+ result = parser_with_keyword.parse(" xyz")
401
+ assert_equal "xyz", result.value
402
+ assert_equal "", result.input
192
403
  end
193
404
 
405
+ # def test_identifier
406
+ # parser = Identifier.new
407
+ # result = parser.parse(" abc ")
408
+ # assert_equal [["abc", ""]], result
409
+
410
+ # parser_with_keyword = Identifier.new("abc","efg")
411
+ # result = parser_with_keyword.parse("abc")
412
+ # assert_equal [], result
413
+ # result = parser_with_keyword.parse(" xyz")
414
+ # assert_equal [["xyz", ""]], result
415
+ # end
416
+
194
417
  def test_natural
195
418
  parser = Natural.new
196
419
  result = parser.parse(" 1234 ")
197
- assert_equal [[1234, ""]], result
420
+ assert_equal 1234, result.value
421
+ assert_equal "", result.input
198
422
  end
199
423
 
424
+ # def test_natural
425
+ # parser = Natural.new
426
+ # result = parser.parse(" 1234 ")
427
+ # assert_equal [[1234, ""]], result
428
+ # end
429
+
200
430
  def test_symbol
201
431
  parser = Symbol.new('%')
202
432
  result = parser.parse(" % ")
203
- assert_equal [["%", ""]], result
433
+ assert_equal "%", result.value
434
+ assert_equal "", result.input
204
435
  end
205
436
 
206
- def test_define_parser
207
- parser = Symbol.new('%')
208
- result = parser.parse(" % ")
209
- assert_equal [["%", ""]], result
210
- end
211
-
212
- def test_combination
213
- parser = AltParser.new(
214
- SeqParser.new(Symbol.new('+'),
215
- Natural.new) do | _, nat|
216
- nat
217
- end,
218
- Natural.new
219
- )
220
- result = parser.parse("+123")
221
- assert_equal [[123, ""]], result
222
- result = parser.parse(" 123 ")
223
- assert_equal [[123, ""]], result
224
- parser = AltParser.new(
225
- SeqParser.new(
226
- Symbol.new('('),
227
- Natural.new,
228
- Symbol.new(')')
229
- ) do |_,expr, _|
230
- expr
231
- end,
232
- Natural.new
233
- )
234
- result = parser.parse("( 123 )")
235
- assert_equal [[123, ""]], result
236
- end
437
+ # def test_symbol
438
+ # parser = Symbol.new('%')
439
+ # result = parser.parse(" % ")
440
+ # assert_equal [["%", ""]], result
441
+ # end
442
+
443
+ # def test_define_parser
444
+ # parser = Symbol.new('%')
445
+ # result = parser.parse(" % ")
446
+ # assert_equal [["%", ""]], result
447
+ # end
448
+
449
+ # def test_combination
450
+ # parser = AltParser.new(
451
+ # SeqParser.new(Symbol.new('+'),
452
+ # Natural.new) do | _, nat|
453
+ # nat
454
+ # end,
455
+ # Natural.new
456
+ # )
457
+ # result = parser.parse("+123")
458
+ # assert_equal [[123, ""]], result
459
+ # result = parser.parse(" 123 ")
460
+ # assert_equal [[123, ""]], result
461
+ # parser = AltParser.new(
462
+ # SeqParser.new(
463
+ # Symbol.new('('),
464
+ # Natural.new,
465
+ # Symbol.new(')')
466
+ # ) do |_,expr, _|
467
+ # expr
468
+ # end,
469
+ # Natural.new
470
+ # )
471
+ # result = parser.parse("( 123 )")
472
+ # assert_equal [[123, ""]], result
473
+ # end
237
474
  end
238
475
 
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.7
7
- date: 2008-01-07 00:00:00 +09:00
6
+ version: 0.0.8
7
+ date: 2008-01-10 00:00:00 +09:00
8
8
  summary: Yet Another Combinator Parser Library
9
9
  require_paths:
10
10
  - lib