yaparc 0.0.7 → 0.0.8

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