raabro 1.1.4 → 1.1.5
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/CHANGELOG.md +5 -0
- data/README.md +41 -0
- data/lib/raabro.rb +5 -5
- metadata +2 -2
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -163,6 +163,47 @@ end
|
|
163
163
|
(Yes, this sample parser parses string like "appletomatocabbage", it's not very useful, but I hope you get the point about `.seq`)
|
164
164
|
|
165
165
|
|
166
|
+
## trees
|
167
|
+
|
168
|
+
An instance of `Raabro::Tree` is passed to `rewrite()` and `rewrite_{name}()` functions.
|
169
|
+
|
170
|
+
The most useful methods of this class are:
|
171
|
+
```ruby
|
172
|
+
class Raabro::Tree
|
173
|
+
|
174
|
+
# Look for the first child or sub-child with the given name.
|
175
|
+
# If the given name is nil, looks for the first child with a name (not nil).
|
176
|
+
#
|
177
|
+
def sublookup(name=nil)
|
178
|
+
|
179
|
+
# Gathers all the children or sub-children with the given name.
|
180
|
+
# If the given name is nil, gathers all the children with a name (not nil).
|
181
|
+
# When a child matches, does not pursue gathering from the children of the
|
182
|
+
# matching child.
|
183
|
+
#
|
184
|
+
def subgather(name=nil)
|
185
|
+
end
|
186
|
+
```
|
187
|
+
|
188
|
+
I'm using "child or sub-child" instead of "descendant" because once a child or sub-child matches, those methods do not consider the children or sub-children of that matching entity.
|
189
|
+
|
190
|
+
Here is a closeup on the rewrite functions of the sample parser at [doc/readme1.rb](doc/readme1.rb) (extracted from an early version of [floraison/dense](https://github.com/floraison/dense):
|
191
|
+
```ruby
|
192
|
+
require 'raabro'
|
193
|
+
|
194
|
+
module PathParser include Raabro
|
195
|
+
|
196
|
+
# (...)
|
197
|
+
|
198
|
+
def rewrite_name(t); t.string; end
|
199
|
+
def rewrite_off(t); t.string.to_i; end
|
200
|
+
def rewrite_index(t); rewrite(t.sublookup); end
|
201
|
+
def rewrite_path(t); t.subgather(:index).collect { |tt| rewrite(tt) }; end
|
202
|
+
end
|
203
|
+
```
|
204
|
+
Where `rewrite_index(t)` returns the result of the rewrite of the first of its children that has a name and `rewrite_path(t)` collects the result of the rewrite of all of its children that have the "index" name.
|
205
|
+
|
206
|
+
|
166
207
|
## errors
|
167
208
|
|
168
209
|
By default, a parser will return nil when it cannot successfully parse the input.
|
data/lib/raabro.rb
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
|
26
26
|
module Raabro
|
27
27
|
|
28
|
-
VERSION = '1.1.
|
28
|
+
VERSION = '1.1.5'
|
29
29
|
|
30
30
|
class Input
|
31
31
|
|
@@ -112,7 +112,7 @@ module Raabro
|
|
112
112
|
@input.string[@offset, l]
|
113
113
|
end
|
114
114
|
|
115
|
-
def lookup(name)
|
115
|
+
def lookup(name=nil)
|
116
116
|
|
117
117
|
name = name ? name.to_s : nil
|
118
118
|
|
@@ -121,14 +121,14 @@ module Raabro
|
|
121
121
|
sublookup(name)
|
122
122
|
end
|
123
123
|
|
124
|
-
def sublookup(name)
|
124
|
+
def sublookup(name=nil)
|
125
125
|
|
126
126
|
@children.each { |c| if n = c.lookup(name); return n; end }
|
127
127
|
|
128
128
|
nil
|
129
129
|
end
|
130
130
|
|
131
|
-
def gather(name, acc=[])
|
131
|
+
def gather(name=nil, acc=[])
|
132
132
|
|
133
133
|
name = name ? name.to_s : nil
|
134
134
|
|
@@ -141,7 +141,7 @@ module Raabro
|
|
141
141
|
acc
|
142
142
|
end
|
143
143
|
|
144
|
-
def subgather(name, acc=[])
|
144
|
+
def subgather(name=nil, acc=[])
|
145
145
|
|
146
146
|
@children.each { |c| c.gather(name, acc) }
|
147
147
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: raabro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-08-
|
12
|
+
date: 2017-08-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|