yaparc 0.2.0 → 0.2.2
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/README +13 -0
- data/lib/yaparc.rb +157 -95
- data/tests/test_parser.rb +49 -20
- metadata +2 -2
data/README
CHANGED
@@ -136,6 +136,19 @@ The ManyOne requires at least one successfull application of parser.
|
|
136
136
|
* Symbol
|
137
137
|
|
138
138
|
|
139
|
+
== Regex parser
|
140
|
+
|
141
|
+
parser = Regex.new(/\A[0-9]+/)
|
142
|
+
result = parser.parse("1234ab")
|
143
|
+
assert_equal '1234', result.value
|
144
|
+
|
145
|
+
parser = Regex.new(/([0-9]+):([a-z]+)/) do |match1, match2|
|
146
|
+
[match2,match1]
|
147
|
+
end
|
148
|
+
result = parser.parse("1234:ab")
|
149
|
+
assert_equal ["ab", "1234"], result.value
|
150
|
+
|
151
|
+
|
139
152
|
== Define your own parser
|
140
153
|
|
141
154
|
In order to construct parsers, you make parser class to be inherited from Yaparc::AbstractParser class.
|
data/lib/yaparc.rb
CHANGED
@@ -27,41 +27,55 @@ module Yaparc
|
|
27
27
|
IS_DIGIT = lambda {|i| i >= '0' and i <= '9'}
|
28
28
|
IS_SPACE = lambda {|i| i == ' '}
|
29
29
|
IS_WHITESPACE = lambda {|i| i == ' ' or i == "\n" or i == "\t"}
|
30
|
+
IS_CR = lambda {|i| i == "\n"}
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
# def self.included(mod)
|
33
|
+
# mod.extend ClassMethods
|
34
|
+
# end
|
34
35
|
|
35
|
-
def parse(input
|
36
|
+
def parse(input) #, &block)
|
36
37
|
result = @parser.call(input)
|
37
38
|
|
38
|
-
if result.respond_to?
|
39
|
-
result
|
39
|
+
if result.respond_to?(:parse)
|
40
|
+
result.parse(input)
|
40
41
|
else
|
41
|
-
if block_given?
|
42
|
-
result.value = yield result.value
|
43
|
-
@tree = result
|
44
|
-
else
|
45
|
-
@tree = result.value
|
46
|
-
end
|
47
42
|
result
|
48
43
|
end
|
49
|
-
end
|
50
44
|
|
51
|
-
|
52
|
-
|
45
|
+
# if result.respond_to? :parse
|
46
|
+
# result = result.parse(input)
|
47
|
+
# else
|
48
|
+
# # if block_given?
|
49
|
+
# # result.value = yield result.value
|
50
|
+
# # @tree = result
|
51
|
+
# # end
|
52
|
+
# result
|
53
|
+
# end
|
54
|
+
|
55
|
+
# if result.respond_to? :parse
|
56
|
+
# result = result.parse(input)
|
57
|
+
# else
|
58
|
+
# if block_given?
|
59
|
+
# result.value = yield result.value
|
60
|
+
# @tree = result
|
61
|
+
# else
|
62
|
+
# @tree = result.value
|
63
|
+
# end
|
64
|
+
# result
|
65
|
+
# end
|
53
66
|
end
|
54
67
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end # of Module Parsable
|
68
|
+
# def eval
|
69
|
+
# tree = parse(input)
|
70
|
+
# end
|
61
71
|
|
62
72
|
|
73
|
+
# module ClassMethods
|
74
|
+
# def included(mod)
|
75
|
+
# end
|
76
|
+
# end
|
77
|
+
end # of Module Parsable
|
63
78
|
|
64
|
-
# class SucceedParser
|
65
79
|
class Succeed
|
66
80
|
include Parsable
|
67
81
|
attr_reader :remaining
|
@@ -73,7 +87,6 @@ module Yaparc
|
|
73
87
|
end
|
74
88
|
end
|
75
89
|
|
76
|
-
# class FailParser
|
77
90
|
class Fail
|
78
91
|
include Parsable
|
79
92
|
def initialize
|
@@ -84,8 +97,6 @@ module Yaparc
|
|
84
97
|
end
|
85
98
|
|
86
99
|
|
87
|
-
|
88
|
-
# class ItemParser
|
89
100
|
class Item
|
90
101
|
include Parsable
|
91
102
|
def initialize
|
@@ -99,7 +110,6 @@ module Yaparc
|
|
99
110
|
end
|
100
111
|
end
|
101
112
|
|
102
|
-
# class ZeroOneParser
|
103
113
|
class ZeroOne
|
104
114
|
include Parsable
|
105
115
|
def initialize(parser, identity = [])
|
@@ -115,36 +125,43 @@ module Yaparc
|
|
115
125
|
else
|
116
126
|
raise
|
117
127
|
end
|
118
|
-
|
119
|
-
# AltParser.new(parser, Succeed.new(identity))
|
120
|
-
# case result = AltParser.new(parser, Succeed.new(identity)).parse(input)
|
121
|
-
# if input.nil? or input.empty?
|
122
|
-
# Result::Fail.new(:input => input)
|
123
|
-
# else
|
124
|
-
# Result::OK.new(:value => input[0..0],:input => input[1..input.length])
|
125
|
-
# end
|
126
|
-
|
127
128
|
end
|
128
129
|
end
|
129
130
|
end
|
130
131
|
|
131
|
-
# class SatisfyParser
|
132
132
|
class Satisfy
|
133
133
|
include Parsable
|
134
134
|
def initialize(predicate)
|
135
135
|
raise unless predicate.instance_of?(Proc)
|
136
136
|
|
137
137
|
@parser = lambda do |input|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
else
|
143
|
-
Fail.new
|
144
|
-
end
|
145
|
-
else # Result::Fail or Result::Error
|
138
|
+
result = Item.new.parse(input)
|
139
|
+
if result.instance_of?(Result::OK) and predicate.call(result.value)
|
140
|
+
Succeed.new(result.value, result.input)
|
141
|
+
else
|
146
142
|
Fail.new
|
147
143
|
end
|
144
|
+
|
145
|
+
# if result.instance_of?(Result::OK)
|
146
|
+
# if predicate.call(result.value)
|
147
|
+
# Succeed.new(result.value, result.input)
|
148
|
+
# else
|
149
|
+
# Fail.new
|
150
|
+
# end
|
151
|
+
# else # Result::Fail or Result::Error
|
152
|
+
# Fail.new
|
153
|
+
# end
|
154
|
+
|
155
|
+
# case result = Item.new.parse(input)
|
156
|
+
# when Result::OK
|
157
|
+
# parser = if predicate.call(result.value)
|
158
|
+
# Succeed.new(result.value, result.input)
|
159
|
+
# else
|
160
|
+
# Fail.new
|
161
|
+
# end
|
162
|
+
# else # Result::Fail or Result::Error
|
163
|
+
# Fail.new
|
164
|
+
# end
|
148
165
|
end
|
149
166
|
end
|
150
167
|
|
@@ -167,21 +184,26 @@ module Yaparc
|
|
167
184
|
|
168
185
|
def initialize(parser, &block)
|
169
186
|
@parser = lambda do |input|
|
170
|
-
|
171
|
-
|
187
|
+
result = parser.parse(input)
|
188
|
+
if result.instance_of?(Result::Fail)
|
172
189
|
Result::Error.new(:value => result.value, :input => result.input)
|
173
|
-
when Result::OK
|
174
|
-
Succeed.new(result.value)
|
175
190
|
else
|
176
191
|
Succeed.new(result.value)
|
177
|
-
# Result::OK.new(:value => result.value,:input => result.input)
|
178
192
|
end
|
193
|
+
# case result = parser.parse(input)
|
194
|
+
# when Result::Fail
|
195
|
+
# Result::Error.new(:value => result.value, :input => result.input)
|
196
|
+
# when Result::OK
|
197
|
+
# Succeed.new(result.value)
|
198
|
+
# else
|
199
|
+
# Succeed.new(result.value)
|
200
|
+
# # Result::OK.new(:value => result.value,:input => result.input)
|
201
|
+
# end
|
179
202
|
end
|
180
203
|
end
|
181
204
|
end # of NoFail
|
182
205
|
|
183
206
|
|
184
|
-
# class SeqParser
|
185
207
|
class Seq
|
186
208
|
include Parsable
|
187
209
|
def initialize(*parsers, &block)
|
@@ -189,15 +211,20 @@ module Yaparc
|
|
189
211
|
args = []
|
190
212
|
initial_result = Result::OK.new(:input => input)
|
191
213
|
final_result = parsers.inject(initial_result) do |subsequent, parser|
|
192
|
-
|
193
|
-
|
214
|
+
result = parser.parse(subsequent.input)
|
215
|
+
if result.instance_of?(Result::Fail)
|
194
216
|
break Result::Fail.new(:input => subsequent.input)
|
195
|
-
# when Result::Error
|
196
|
-
# break Result::Error.new(:input => subsequent.input)
|
197
217
|
else
|
198
218
|
args << result.value
|
199
219
|
result
|
200
220
|
end
|
221
|
+
# case result = parser.parse(subsequent.input)
|
222
|
+
# when Result::Fail
|
223
|
+
# break Result::Fail.new(:input => subsequent.input)
|
224
|
+
# else
|
225
|
+
# args << result.value
|
226
|
+
# result
|
227
|
+
# end
|
201
228
|
end
|
202
229
|
|
203
230
|
case final_result
|
@@ -217,21 +244,18 @@ module Yaparc
|
|
217
244
|
end # of initialize
|
218
245
|
end # of Seq
|
219
246
|
|
220
|
-
|
221
|
-
# class AltParser
|
222
247
|
class Alt
|
223
248
|
include Parsable
|
224
249
|
def initialize(*parsers)
|
225
250
|
@parser = lambda do |input|
|
226
|
-
initial_result = Result::OK.new(:input => input)
|
227
251
|
final_result = Result::Fail.new(:input => input)
|
228
252
|
parsers.each do |parser|
|
229
|
-
# case result = parser.parse(initial_result.input)
|
230
253
|
case result = parser.parse(input)
|
231
254
|
when Result::Fail
|
232
255
|
next
|
233
|
-
|
234
|
-
|
256
|
+
# when Result::Error
|
257
|
+
# raise
|
258
|
+
# return Result::Error.new(:value => result.value, :input => result.input)
|
235
259
|
when Result::OK
|
236
260
|
break final_result = result
|
237
261
|
else
|
@@ -243,17 +267,22 @@ module Yaparc
|
|
243
267
|
end # of initialize
|
244
268
|
end
|
245
269
|
|
246
|
-
# class ApplyParser
|
247
270
|
class Apply
|
248
271
|
include Parsable
|
249
272
|
def initialize(parser, &block)
|
250
273
|
@parser = lambda do |input|
|
251
|
-
|
252
|
-
|
274
|
+
result = parser.parse(input)
|
275
|
+
if result.instance_of?(Result::OK)
|
253
276
|
Succeed.new(yield(result.value)).parse(result.input)
|
254
277
|
else
|
255
278
|
Fail.new.parse(input)
|
256
279
|
end
|
280
|
+
# case result = parser.parse(input)
|
281
|
+
# when Result::OK
|
282
|
+
# Succeed.new(yield(result.value)).parse(result.input)
|
283
|
+
# else
|
284
|
+
# Fail.new.parse(input)
|
285
|
+
# end
|
257
286
|
end
|
258
287
|
end # of initialize
|
259
288
|
end # of Apply
|
@@ -261,13 +290,13 @@ module Yaparc
|
|
261
290
|
|
262
291
|
class String
|
263
292
|
include Parsable
|
264
|
-
def initialize(string)
|
293
|
+
def initialize(string, case_sensitive = true)
|
265
294
|
@parser = lambda do |input|
|
266
|
-
|
267
|
-
|
295
|
+
result = Item.new.parse(string)
|
296
|
+
if result.instance_of?(Result::OK)
|
268
297
|
Seq.new(
|
269
|
-
Char.new(result.value),
|
270
|
-
Yaparc::String.new(result.input),
|
298
|
+
Char.new(result.value, case_sensitive),
|
299
|
+
Yaparc::String.new(result.input, case_sensitive),
|
271
300
|
Succeed.new(result.value + result.input)
|
272
301
|
) do |char_result, string_result, succeed_result|
|
273
302
|
succeed_result
|
@@ -275,6 +304,18 @@ module Yaparc
|
|
275
304
|
else
|
276
305
|
Succeed.new(result) # Is it OK?
|
277
306
|
end
|
307
|
+
# case result = Item.new.parse(string)
|
308
|
+
# when Result::OK
|
309
|
+
# Seq.new(
|
310
|
+
# Char.new(result.value, case_sensitive),
|
311
|
+
# Yaparc::String.new(result.input, case_sensitive),
|
312
|
+
# Succeed.new(result.value + result.input)
|
313
|
+
# ) do |char_result, string_result, succeed_result|
|
314
|
+
# succeed_result
|
315
|
+
# end
|
316
|
+
# else
|
317
|
+
# Succeed.new(result) # Is it OK?
|
318
|
+
# end
|
278
319
|
end
|
279
320
|
end
|
280
321
|
|
@@ -283,10 +324,9 @@ module Yaparc
|
|
283
324
|
# end
|
284
325
|
end
|
285
326
|
|
286
|
-
# class RegexParser
|
287
327
|
class Regex
|
288
328
|
include Parsable
|
289
|
-
|
329
|
+
|
290
330
|
def initialize(regex, &block)
|
291
331
|
@regex = regex
|
292
332
|
@parser = lambda do |input|
|
@@ -303,6 +343,7 @@ module Yaparc
|
|
303
343
|
end
|
304
344
|
|
305
345
|
def parse_with_parameter(input)
|
346
|
+
raise "Deprecated!! Use Regex with block"
|
306
347
|
if match = Regexp.new(@regex).match(input)
|
307
348
|
if block_given?
|
308
349
|
yield match.to_a[1..match.to_a.length]
|
@@ -316,7 +357,6 @@ module Yaparc
|
|
316
357
|
end
|
317
358
|
|
318
359
|
# permits zero or more applications of parser.
|
319
|
-
# class ManyParser
|
320
360
|
class Many
|
321
361
|
include Parsable
|
322
362
|
def initialize(parser, identity = [])
|
@@ -327,7 +367,6 @@ module Yaparc
|
|
327
367
|
end
|
328
368
|
|
329
369
|
# requires at least one successfull application of parser.
|
330
|
-
# class ManyOne
|
331
370
|
class ManyOne
|
332
371
|
include Parsable
|
333
372
|
def initialize(parser, identity = [])
|
@@ -338,41 +377,53 @@ module Yaparc
|
|
338
377
|
if tail.instance_of?(::String)
|
339
378
|
head + tail
|
340
379
|
else
|
341
|
-
raise "Incompatible type: head => #{head}, tail => #{tail}"
|
380
|
+
raise "Incompatible type: head => #{head.inspect}, tail => #{tail.inspect}"
|
342
381
|
end
|
343
382
|
when ::Array
|
344
383
|
if tail.instance_of?(Array)
|
345
384
|
head + tail
|
346
385
|
else
|
347
|
-
raise "Incompatible type: head => #{head}, tail => #{tail}"
|
386
|
+
raise "Incompatible type: head => #{head.inspect}, tail => #{tail.inspect}"
|
348
387
|
end
|
349
388
|
when ::Hash
|
350
389
|
if tail.instance_of?(Hash)
|
351
390
|
head.merge(tail)
|
352
391
|
else
|
353
|
-
raise "Incompatible type: head => #{head}, tail => #{tail}"
|
392
|
+
raise "Incompatible type: head => #{head.inspect}, tail => #{tail.inspect}"
|
354
393
|
end
|
355
394
|
when ::Integer
|
356
395
|
if tail.kind_of?(Integer)
|
357
396
|
head + tail
|
358
397
|
else
|
359
|
-
raise "Incompatible type: head => #{head}, tail => #{tail}"
|
398
|
+
raise "Incompatible type: head => #{head.inspect}, tail => #{tail.inspect}"
|
360
399
|
end
|
361
400
|
else
|
362
|
-
|
401
|
+
if tail.nil?
|
402
|
+
head
|
403
|
+
else
|
404
|
+
[head] + tail
|
405
|
+
end
|
363
406
|
end
|
364
|
-
#head + tail
|
365
407
|
end
|
366
408
|
end
|
367
409
|
end
|
368
410
|
end
|
369
411
|
|
370
|
-
# class SpaceParser
|
371
412
|
class Space
|
372
413
|
include Parsable
|
373
414
|
def initialize
|
374
415
|
@parser = lambda do |input|
|
375
|
-
|
416
|
+
#Many.new(Satisfy.new(IS_SPACE),"")
|
417
|
+
Regex.new(/\A[ ]*/)
|
418
|
+
end
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
class CR
|
423
|
+
include Parsable
|
424
|
+
def initialize
|
425
|
+
@parser = lambda do |input|
|
426
|
+
Regex.new(/\A[ \t]+[\n][ \t\n]+/)
|
376
427
|
end
|
377
428
|
end
|
378
429
|
end
|
@@ -381,7 +432,8 @@ module Yaparc
|
|
381
432
|
include Parsable
|
382
433
|
def initialize
|
383
434
|
@parser = lambda do |input|
|
384
|
-
|
435
|
+
#Many.new(Satisfy.new(IS_WHITESPACE),'')
|
436
|
+
Regex.new(/\A[\t\n ]*/)
|
385
437
|
end
|
386
438
|
end
|
387
439
|
end
|
@@ -392,7 +444,7 @@ module Yaparc
|
|
392
444
|
|
393
445
|
def initialize(parser, args = { }, &block)
|
394
446
|
@parser = lambda do |input|
|
395
|
-
@prefix = args[:prefix] ? args[:prefix] : WhiteSpace.new
|
447
|
+
@prefix = args[:prefix] ? args[:prefix] : WhiteSpace.new
|
396
448
|
@postfix = args[:postfix] ? args[:postfix] : WhiteSpace.new
|
397
449
|
if block_given?
|
398
450
|
yield self
|
@@ -408,18 +460,16 @@ module Yaparc
|
|
408
460
|
end
|
409
461
|
end
|
410
462
|
|
411
|
-
# class LiteralParser
|
412
463
|
class Literal
|
413
464
|
include Parsable
|
414
|
-
def initialize(literal)
|
465
|
+
def initialize(literal, case_sensitive = true)
|
415
466
|
@parser = lambda do |input|
|
416
|
-
Tokenize.new(Yaparc::String.new(literal))
|
467
|
+
Tokenize.new(Yaparc::String.new(literal, case_sensitive))
|
417
468
|
end
|
418
469
|
end
|
419
470
|
end
|
420
471
|
|
421
472
|
# Refer to http://www.cs.nott.ac.uk/~gmh/monparsing.pdf, p.23
|
422
|
-
|
423
473
|
class Identifier
|
424
474
|
include Yaparc::Parsable
|
425
475
|
@@identifier_regex = ::Yaparc::Regex.new(/\A[a-zA-Z_]+[a-zA-Z0-9_]*/)
|
@@ -442,17 +492,21 @@ module Yaparc
|
|
442
492
|
end
|
443
493
|
end
|
444
494
|
|
445
|
-
|
446
|
-
|
447
|
-
|
495
|
+
# def parse(input)
|
496
|
+
# @parser.call(input).parse(input)
|
497
|
+
# end
|
448
498
|
end
|
449
499
|
|
450
|
-
# class Char
|
451
500
|
class Char
|
452
501
|
include Parsable
|
453
502
|
|
454
|
-
def initialize(char)
|
455
|
-
|
503
|
+
def initialize(char, case_sensitive = true)
|
504
|
+
raise unless char.length == 1
|
505
|
+
if case_sensitive
|
506
|
+
equal_char = lambda {|i| i == char}
|
507
|
+
else # in case of case-insentive
|
508
|
+
equal_char = lambda {|i| i.casecmp(char) == 0}
|
509
|
+
end
|
456
510
|
@parser = lambda do |input|
|
457
511
|
Satisfy.new(equal_char)
|
458
512
|
end
|
@@ -464,9 +518,9 @@ module Yaparc
|
|
464
518
|
def initialize
|
465
519
|
@parser = lambda do |input|
|
466
520
|
Seq.new(
|
467
|
-
|
468
|
-
|
469
|
-
|
521
|
+
Satisfy.new(IS_LOWER),
|
522
|
+
Many.new(Satisfy.new(IS_ALPHANUM),"")
|
523
|
+
) do |head, tail|
|
470
524
|
head + tail
|
471
525
|
end
|
472
526
|
end
|
@@ -519,6 +573,14 @@ module Yaparc
|
|
519
573
|
class AbstractParser
|
520
574
|
include Parsable
|
521
575
|
|
576
|
+
# def parse(input, &block)
|
577
|
+
# tree = @parser.call.parse(input)
|
578
|
+
# if block_given?
|
579
|
+
# yield tree
|
580
|
+
# else
|
581
|
+
# tree
|
582
|
+
# end
|
583
|
+
# end
|
522
584
|
def parse(input, &block)
|
523
585
|
tree = @parser.call.parse(input)
|
524
586
|
if block_given?
|
data/tests/test_parser.rb
CHANGED
@@ -186,6 +186,14 @@ class YaparcTest < Test::Unit::TestCase
|
|
186
186
|
parser = Char.new("a")
|
187
187
|
result = parser.parse("123")
|
188
188
|
assert_instance_of Result::Fail, result
|
189
|
+
|
190
|
+
parser = Char.new("a", false)
|
191
|
+
result = parser.parse("a")
|
192
|
+
assert_instance_of Result::OK, result
|
193
|
+
result = parser.parse("A")
|
194
|
+
assert_instance_of Result::OK, result
|
195
|
+
result = parser.parse("!")
|
196
|
+
assert_instance_of Result::Fail, result
|
189
197
|
end
|
190
198
|
|
191
199
|
def test_string_parse
|
@@ -197,6 +205,12 @@ class YaparcTest < Test::Unit::TestCase
|
|
197
205
|
parser = Yaparc::String.new("abc")
|
198
206
|
result = parser.parse("ab1234")
|
199
207
|
assert_instance_of Result::Fail, result
|
208
|
+
|
209
|
+
parser = Yaparc::String.new("abc", false)
|
210
|
+
result = parser.parse("abc")
|
211
|
+
assert_instance_of Result::OK, result
|
212
|
+
result = parser.parse("aBc")
|
213
|
+
assert_instance_of Result::OK, result
|
200
214
|
end
|
201
215
|
|
202
216
|
def test_regex_parse
|
@@ -211,15 +225,17 @@ class YaparcTest < Test::Unit::TestCase
|
|
211
225
|
assert_equal "ab", result.input
|
212
226
|
|
213
227
|
parser = Regex.new(/\A[0-9]+/)
|
214
|
-
result = parser.parse("1234ab")
|
215
|
-
|
216
|
-
|
217
|
-
|
228
|
+
result = parser.parse("1234ab")
|
229
|
+
# result = parser.parse("1234ab") do |match|
|
230
|
+
# Integer(match)
|
231
|
+
# end
|
232
|
+
# assert_equal 1234, result.value
|
233
|
+
assert_equal '1234', result.value
|
218
234
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
235
|
+
# parser = Regex.new(/([0-9]+):([a-z]+)/)
|
236
|
+
# result = parser.parse_with_parameter("1234:ab") do |match1, match2|
|
237
|
+
# assert_equal 'ab', match2
|
238
|
+
# end
|
223
239
|
|
224
240
|
parser = Regex.new(/([0-9]+):([a-z]+)/) do |match1, match2|
|
225
241
|
[match2,match1]
|
@@ -305,19 +321,26 @@ class YaparcTest < Test::Unit::TestCase
|
|
305
321
|
assert_equal "", result.input
|
306
322
|
end
|
307
323
|
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
324
|
+
def test_space
|
325
|
+
parser = Space.new
|
326
|
+
result = parser.parse(" abc")
|
327
|
+
assert_instance_of Result::OK, result
|
328
|
+
assert_equal "abc", result.input
|
329
|
+
end
|
314
330
|
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
331
|
+
def test_whitespace
|
332
|
+
parser = WhiteSpace.new
|
333
|
+
result = parser.parse(" \n abc")
|
334
|
+
assert_instance_of Result::OK, result
|
335
|
+
assert_equal "abc", result.input
|
336
|
+
snip =<<-SNIP
|
337
|
+
|
338
|
+
abc
|
339
|
+
SNIP
|
340
|
+
result = parser.parse(snip)
|
341
|
+
assert_instance_of Result::OK, result
|
342
|
+
assert_equal "abc\n", result.input
|
343
|
+
end
|
321
344
|
|
322
345
|
# def test_token
|
323
346
|
# parser = Token.new
|
@@ -406,6 +429,12 @@ class YaparcTest < Test::Unit::TestCase
|
|
406
429
|
result = parser.parse(" % ")
|
407
430
|
assert_equal "%", result.value
|
408
431
|
assert_equal "", result.input
|
432
|
+
|
433
|
+
parser = Literal.new('vgh', false)
|
434
|
+
result = parser.parse(" vgh ")
|
435
|
+
assert_instance_of Result::OK, result
|
436
|
+
result = parser.parse(" vgH ")
|
437
|
+
assert_instance_of Result::OK, result
|
409
438
|
end
|
410
439
|
end
|
411
440
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaparc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akimichi Tatsukawa
|
@@ -9,7 +9,7 @@ autorequire: yaparc
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-05-08 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|