parser_combinator_dsl 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/base_parsers.rb +9 -5
- data/test/spec_helpers.rb +1 -0
- data/test/test_base_parsers.rb +12 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4f09f2cab4d3a7ec337902226fa25de2b6dfd194d2cc1ac4e7c00bff724eb54
|
4
|
+
data.tar.gz: aaa5b7b18fca3ef2334a0bea97820aef96f732adf2b089c02ef71479832ca914
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9926cf30554094f1fd5f736e52bc1173fb8ed857af09013de7a534c6f9ffaa6f332493ddbd58ad597b5213cd84c6ce36f8e24f68340adf62aef7f3ea05ceae7
|
7
|
+
data.tar.gz: 99e2a534ccbecbd89976c18f3bf85af51c04819367dbb454c4da76529af728d233ffaddd0d50abd9fb9af2901d309af0ecbcc751b32ea72bf035dc212688f372
|
data/lib/base_parsers.rb
CHANGED
@@ -153,12 +153,16 @@ module BaseParsers
|
|
153
153
|
Parser.new do |input|
|
154
154
|
first_char = input[0]
|
155
155
|
result = ParserResult.ok(matched: first_char, remaining: input[1..-1])
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
156
|
+
|
157
|
+
if !(input == "" || input.nil?)
|
158
|
+
chars.each do |char|
|
159
|
+
if first_char == char
|
160
|
+
result = ParserResult.fail(input)
|
161
|
+
break
|
162
|
+
end
|
161
163
|
end
|
164
|
+
else
|
165
|
+
result = ParserResult.fail(input)
|
162
166
|
end
|
163
167
|
|
164
168
|
result
|
data/test/spec_helpers.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
def assert_parses(parser, with:, remaining:, matched: nil, should_fail: false)
|
2
2
|
result = parser.run(with)
|
3
|
+
puts "with: " + with.to_s + " matched: " + result.matched.to_s + " remaining: " + result.remaining.to_s + " success: " + result.success.to_s
|
3
4
|
assert_equal !should_fail, result.success
|
4
5
|
assert_equal remaining, result.remaining
|
5
6
|
assert_equal matched, result.matched unless matched.nil?
|
data/test/test_base_parsers.rb
CHANGED
@@ -102,6 +102,18 @@ describe Grammar do
|
|
102
102
|
assert_parses parser, with: "asd123", remaining: "123"
|
103
103
|
end
|
104
104
|
|
105
|
+
it "matches many1 chars except newlines, followed by newline(s)" do
|
106
|
+
parser = Grammar.build do
|
107
|
+
rule(:eol) { many1 { anyChar(["\n"]) } | eof }
|
108
|
+
rule(:stuff) { many1 { anyCharBut(["\n"]) } >> (rule :eol) }
|
109
|
+
start(:stuff)
|
110
|
+
end
|
111
|
+
|
112
|
+
assert_parses parser, with: "Some stuff 123", remaining: ""
|
113
|
+
assert_parses parser, with: "Some stuff 123 \n thisremains", remaining: " thisremains"
|
114
|
+
assert_parses parser, with: "Some stuff 123öäü\nthisremains", remaining: "thisremains"
|
115
|
+
end
|
116
|
+
|
105
117
|
it "matches many0" do
|
106
118
|
parser = Grammar.build do
|
107
119
|
rule(:word) { many0 { anyLetter } }
|
metadata
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parser_combinator_dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Federico Ramirez
|
8
|
+
- Matthias Ervens
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
12
|
+
date: 2018-05-21 00:00:00.000000000 Z
|
12
13
|
dependencies: []
|
13
14
|
description: "\n\tThis library provides a DSL which you can use to easily generate
|
14
15
|
parsers in Ruby.\n\n\tAt it's core, it's a parser combinator library, but you don't
|
15
16
|
need to worry about that. You build more complex expression based on simple ones,
|
16
|
-
and match any formal language you want.\n\t"
|
17
|
+
and match any formal language you want.\n\n\tOriginally by Federico Ramirez (https://github.com/gosukiwi)\n\t"
|
17
18
|
email:
|
18
19
|
executables: []
|
19
20
|
extensions: []
|