raabro 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.txt +5 -0
- data/lib/raabro.rb +47 -2
- data/raabro.gemspec +1 -1
- metadata +2 -16
- data/spec/all_spec.rb +0 -54
- data/spec/alt_spec.rb +0 -169
- data/spec/eseq_spec.rb +0 -166
- data/spec/jseq_spec.rb +0 -67
- data/spec/ren_spec.rb +0 -43
- data/spec/rep_spec.rb +0 -94
- data/spec/rex_spec.rb +0 -52
- data/spec/sample_spec.rb +0 -43
- data/spec/sample_xel_spec.rb +0 -118
- data/spec/sample_xell_spec.rb +0 -92
- data/spec/seq_spec.rb +0 -298
- data/spec/spec_helper.rb +0 -68
- data/spec/str_spec.rb +0 -77
- data/spec/tree_spec.rb +0 -126
data/spec/seq_spec.rb
DELETED
@@ -1,298 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# specifying raabro
|
4
|
-
#
|
5
|
-
# Sun Sep 20 06:11:54 JST 2015
|
6
|
-
#
|
7
|
-
|
8
|
-
require 'spec_helper'
|
9
|
-
|
10
|
-
|
11
|
-
describe Raabro do
|
12
|
-
|
13
|
-
describe '.seq' do
|
14
|
-
|
15
|
-
it "returns a tree with result == 0 in case of failure" do
|
16
|
-
|
17
|
-
i = Raabro::Input.new('tato')
|
18
|
-
|
19
|
-
t = Raabro.seq(nil, i, :to, :ta)
|
20
|
-
|
21
|
-
expect(t.to_a).to eq(
|
22
|
-
[ nil, 0, 0, 0, nil, :seq, [
|
23
|
-
[ nil, 0, 0, 0, nil, :str, [] ]
|
24
|
-
] ]
|
25
|
-
)
|
26
|
-
expect(i.offset).to eq(0)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "returns a tree with result == 0 in case of failure (at 2nd step)" do
|
30
|
-
|
31
|
-
i = Raabro::Input.new('tato')
|
32
|
-
|
33
|
-
t = Raabro.seq(nil, i, :ta, :ta)
|
34
|
-
|
35
|
-
expect(
|
36
|
-
t.to_a(:leaves => true)
|
37
|
-
).to eq(
|
38
|
-
[ nil, 0, 0, 0, nil, :seq, [
|
39
|
-
[ nil, 1, 0, 2, nil, :str, 'ta' ],
|
40
|
-
[ nil, 0, 2, 0, nil, :str, [] ]
|
41
|
-
] ]
|
42
|
-
)
|
43
|
-
expect(i.offset).to eq(0)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "returns a tree with result == 1 in case of success" do
|
47
|
-
|
48
|
-
i = Raabro::Input.new('tato')
|
49
|
-
|
50
|
-
t = Raabro.seq(nil, i, :ta, :to)
|
51
|
-
|
52
|
-
expect(
|
53
|
-
t.to_a(:leaves => true)
|
54
|
-
).to eq(
|
55
|
-
[ nil, 1, 0, 4, nil, :seq, [
|
56
|
-
[ nil, 1, 0, 2, nil, :str, 'ta' ],
|
57
|
-
[ nil, 1, 2, 2, nil, :str, 'to' ]
|
58
|
-
] ]
|
59
|
-
)
|
60
|
-
expect(i.offset).to eq(4)
|
61
|
-
end
|
62
|
-
|
63
|
-
it "names the result if there is a name" do
|
64
|
-
|
65
|
-
i = Raabro::Input.new('tato')
|
66
|
-
|
67
|
-
t = Raabro.seq(:x, i, :ta, :to)
|
68
|
-
|
69
|
-
expect(
|
70
|
-
t.to_a(:leaves => true)
|
71
|
-
).to eq(
|
72
|
-
[ :x, 1, 0, 4, nil, :seq, [
|
73
|
-
[ nil, 1, 0, 2, nil, :str, 'ta' ],
|
74
|
-
[ nil, 1, 2, 2, nil, :str, 'to' ]
|
75
|
-
] ]
|
76
|
-
)
|
77
|
-
expect(i.offset).to eq(4)
|
78
|
-
end
|
79
|
-
|
80
|
-
it "names in case of failure as well" do
|
81
|
-
|
82
|
-
i = Raabro::Input.new('tato')
|
83
|
-
|
84
|
-
t = Raabro.seq(:y, i, :ta, :ta)
|
85
|
-
|
86
|
-
expect(
|
87
|
-
t.to_a(:leaves => true)
|
88
|
-
).to eq(
|
89
|
-
[ :y, 0, 0, 0, nil, :seq, [
|
90
|
-
[ nil, 1, 0, 2, nil, :str, 'ta' ],
|
91
|
-
[ nil, 0, 2, 0, nil, :str, [] ]
|
92
|
-
] ]
|
93
|
-
)
|
94
|
-
expect(i.offset).to eq(0)
|
95
|
-
end
|
96
|
-
|
97
|
-
it "fails when the input string ends" do
|
98
|
-
|
99
|
-
i = Raabro::Input.new('to')
|
100
|
-
|
101
|
-
t = Raabro.seq(:z, i, :to, :ta)
|
102
|
-
|
103
|
-
expect(
|
104
|
-
t.to_a(:leaves => true)
|
105
|
-
).to eq(
|
106
|
-
[ :z, 0, 0, 0, nil, :seq, [
|
107
|
-
[ nil, 1, 0, 2, nil, :str, 'to' ],
|
108
|
-
[ nil, 0, 2, 0, nil, :str, [] ]
|
109
|
-
] ]
|
110
|
-
)
|
111
|
-
expect(i.offset).to eq(0)
|
112
|
-
end
|
113
|
-
|
114
|
-
it "accepts an empty input" do
|
115
|
-
|
116
|
-
i = Raabro::Input.new('tato', 4)
|
117
|
-
|
118
|
-
t = Raabro.seq(nil, i, :to, :ta)
|
119
|
-
|
120
|
-
expect(t.to_a).to eq(
|
121
|
-
[ nil, 0, 4, 0, nil, :seq, [
|
122
|
-
[ nil, 0, 4, 0, nil, :str, [] ]
|
123
|
-
] ]
|
124
|
-
)
|
125
|
-
expect(i.offset).to eq(4)
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
describe 'seq and quantifiers' do
|
130
|
-
|
131
|
-
describe 'a lonely quantifier' do
|
132
|
-
|
133
|
-
it 'raises an ArgumentError' do
|
134
|
-
|
135
|
-
i = Raabro::Input.new('tato')
|
136
|
-
|
137
|
-
expect {
|
138
|
-
t = Raabro.seq(nil, i, '?')
|
139
|
-
}.to raise_error(ArgumentError, 'lone quantifier ?')
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
describe 'the question mark quantifier' do
|
144
|
-
|
145
|
-
it 'lets optional elements appear in sequences (miss)' do
|
146
|
-
|
147
|
-
i = Raabro::Input.new('tato')
|
148
|
-
|
149
|
-
t = Raabro.seq(nil, i, :ta, :tu, '?', :to)
|
150
|
-
|
151
|
-
expect(t.to_a(:leaves => true)).to eq(
|
152
|
-
[ nil, 1, 0, 4, nil, :seq, [
|
153
|
-
[ nil, 1, 0, 2, nil, :str, 'ta' ],
|
154
|
-
[ nil, 0, 2, 0, nil, :str, [] ],
|
155
|
-
[ nil, 1, 2, 2, nil, :str, 'to' ]
|
156
|
-
] ]
|
157
|
-
)
|
158
|
-
expect(i.offset).to eq(4)
|
159
|
-
end
|
160
|
-
|
161
|
-
it 'lets optional elements appear in sequences (hit)' do
|
162
|
-
|
163
|
-
i = Raabro::Input.new('tatuto')
|
164
|
-
|
165
|
-
t = Raabro.seq(nil, i, :ta, :tu, '?', :to)
|
166
|
-
|
167
|
-
expect(t.to_a(:leaves => true)).to eq(
|
168
|
-
[ nil, 1, 0, 6, nil, :seq, [
|
169
|
-
[ nil, 1, 0, 2, nil, :str, 'ta' ],
|
170
|
-
[ nil, 1, 2, 2, nil, :str, 'tu' ],
|
171
|
-
[ nil, 1, 4, 2, nil, :str, 'to' ]
|
172
|
-
] ]
|
173
|
-
)
|
174
|
-
expect(i.offset).to eq(6)
|
175
|
-
end
|
176
|
-
|
177
|
-
it 'lets optional elements appear in sequences (fail)' do
|
178
|
-
|
179
|
-
i = Raabro::Input.new('tatututo')
|
180
|
-
|
181
|
-
t = Raabro.seq(nil, i, :ta, :tu, '?', :to)
|
182
|
-
|
183
|
-
expect(t.to_a(:leaves => true)).to eq(
|
184
|
-
[ nil, 0, 0, 0, nil, :seq, [
|
185
|
-
[ nil, 1, 0, 2, nil, :str, 'ta' ],
|
186
|
-
[ nil, 1, 2, 2, nil, :str, 'tu' ],
|
187
|
-
[ nil, 0, 4, 0, nil, :str, [] ]
|
188
|
-
] ]
|
189
|
-
)
|
190
|
-
expect(i.offset).to eq(0)
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
describe 'the star quantifier' do
|
195
|
-
|
196
|
-
it 'lets optional elements recur in sequences (hit zero)' do
|
197
|
-
|
198
|
-
i = Raabro::Input.new('tato')
|
199
|
-
|
200
|
-
t = Raabro.seq(nil, i, :ta, :tu, '*', :to)
|
201
|
-
|
202
|
-
expect(t.to_a(:leaves => true)).to eq(
|
203
|
-
[ nil, 1, 0, 4, nil, :seq, [
|
204
|
-
[ nil, 1, 0, 2, nil, :str, 'ta' ],
|
205
|
-
[ nil, 0, 2, 0, nil, :str, [] ],
|
206
|
-
[ nil, 1, 2, 2, nil, :str, 'to' ]
|
207
|
-
] ]
|
208
|
-
)
|
209
|
-
expect(i.offset).to eq(4)
|
210
|
-
end
|
211
|
-
|
212
|
-
it 'lets optional elements recur in sequences (hit)' do
|
213
|
-
|
214
|
-
i = Raabro::Input.new('tatututo')
|
215
|
-
|
216
|
-
t = Raabro.seq(nil, i, :ta, :tu, '*', :to)
|
217
|
-
|
218
|
-
expect(t.to_a(:leaves => true)).to eq(
|
219
|
-
[ nil, 1, 0, 8, nil, :seq, [
|
220
|
-
[ nil, 1, 0, 2, nil, :str, 'ta' ],
|
221
|
-
[ nil, 1, 2, 2, nil, :str, 'tu' ],
|
222
|
-
[ nil, 1, 4, 2, nil, :str, 'tu' ],
|
223
|
-
[ nil, 0, 6, 0, nil, :str, [] ],
|
224
|
-
[ nil, 1, 6, 2, nil, :str, 'to' ]
|
225
|
-
] ]
|
226
|
-
)
|
227
|
-
expect(i.offset).to eq(8)
|
228
|
-
end
|
229
|
-
|
230
|
-
it 'stops when there is no progress' do
|
231
|
-
|
232
|
-
i = Raabro::Input.new('abc')
|
233
|
-
|
234
|
-
t = Raabro.seq(nil, i, :to_star, '*');
|
235
|
-
|
236
|
-
expect(t.to_a(:leaves => true)).to eq(
|
237
|
-
[ nil, 1, 0, 0, nil, :seq, [
|
238
|
-
[ nil, 1, 0, 0, nil, :rep, [
|
239
|
-
[ nil, 0, 0, 0, nil, :str, [] ]
|
240
|
-
] ]
|
241
|
-
] ]
|
242
|
-
)
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
describe 'the plus quantifier' do
|
247
|
-
|
248
|
-
it 'lets elements recur in sequences (hit)' do
|
249
|
-
|
250
|
-
i = Raabro::Input.new('tatututo')
|
251
|
-
|
252
|
-
t = Raabro.seq(nil, i, :ta, :tu, '+', :to)
|
253
|
-
|
254
|
-
expect(t.to_a(:leaves => true)).to eq(
|
255
|
-
[ nil, 1, 0, 8, nil, :seq, [
|
256
|
-
[ nil, 1, 0, 2, nil, :str, 'ta' ],
|
257
|
-
[ nil, 1, 2, 2, nil, :str, 'tu' ],
|
258
|
-
[ nil, 1, 4, 2, nil, :str, 'tu' ],
|
259
|
-
[ nil, 0, 6, 0, nil, :str, [] ],
|
260
|
-
[ nil, 1, 6, 2, nil, :str, 'to' ]
|
261
|
-
] ]
|
262
|
-
)
|
263
|
-
expect(i.offset).to eq(8)
|
264
|
-
end
|
265
|
-
|
266
|
-
it 'lets elements recur in sequences (fail)' do
|
267
|
-
|
268
|
-
i = Raabro::Input.new('tato')
|
269
|
-
|
270
|
-
t = Raabro.seq(nil, i, :ta, :tu, '+', :to)
|
271
|
-
|
272
|
-
expect(t.to_a(:leaves => true)).to eq(
|
273
|
-
[ nil, 0, 0, 0, nil, :seq, [
|
274
|
-
[ nil, 1, 0, 2, nil, :str, 'ta' ],
|
275
|
-
[ nil, 0, 2, 0, nil, :str, [] ]
|
276
|
-
] ]
|
277
|
-
)
|
278
|
-
expect(i.offset).to eq(0)
|
279
|
-
end
|
280
|
-
|
281
|
-
it 'stops when there is no progress' do
|
282
|
-
|
283
|
-
i = Raabro::Input.new('abc')
|
284
|
-
|
285
|
-
t = Raabro.seq(nil, i, :to_star, '+');
|
286
|
-
|
287
|
-
expect(t.to_a(:leaves => true)).to eq(
|
288
|
-
[ nil, 1, 0, 0, nil, :seq, [
|
289
|
-
[ nil, 1, 0, 0, nil, :rep, [
|
290
|
-
[ nil, 0, 0, 0, nil, :str, [] ]
|
291
|
-
] ]
|
292
|
-
] ]
|
293
|
-
)
|
294
|
-
end
|
295
|
-
end
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
data/spec/spec_helper.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Specifying raabro
|
4
|
-
#
|
5
|
-
# Sat Sep 19 21:12:35 JST 2015
|
6
|
-
#
|
7
|
-
|
8
|
-
require 'pp'
|
9
|
-
|
10
|
-
require 'raabro'
|
11
|
-
|
12
|
-
#
|
13
|
-
# parsers
|
14
|
-
|
15
|
-
def ta(i); Raabro.str(nil, i, 'ta'); end
|
16
|
-
def to(i); Raabro.str(nil, i, 'to'); end
|
17
|
-
def tu(i); Raabro.str(nil, i, 'tu'); end
|
18
|
-
|
19
|
-
def to_plus(input); Raabro.rep(:tos, input, :to, 1); end
|
20
|
-
def to_star(input); Raabro.rep(nil, input, :to, 0); end
|
21
|
-
def to_qmark(input); Raabro.rep(nil, input, :to, 0, 1); end
|
22
|
-
|
23
|
-
def nta(i); Raabro.str('the-ta', i, 'ta'); end
|
24
|
-
|
25
|
-
def cha(i); Raabro.rex(nil, i, /\A[a-z]/); end
|
26
|
-
def com(i); Raabro.str(nil, i, ','); end
|
27
|
-
|
28
|
-
def lt(i); Raabro.str(nil, i, '<'); end
|
29
|
-
def gt(i); Raabro.str(nil, i, '>'); end
|
30
|
-
|
31
|
-
def onex(i); Raabro.str(:onex, i, 'x'); end
|
32
|
-
def twox(i); Raabro.str(:twox, i, 'xx'); end
|
33
|
-
def deux(i); Raabro.str(:deux, i, 'xx'); end
|
34
|
-
|
35
|
-
# testing eseq...
|
36
|
-
def acom(i); Raabro.rex(nil, i, /,?/); end
|
37
|
-
def aval(i); Raabro.rex(nil, i, /[a-z]?/); end
|
38
|
-
def arr(i); Raabro.eseq(nil, i, :lt, :aval, :acom, :gt); end
|
39
|
-
|
40
|
-
|
41
|
-
#
|
42
|
-
# test modules
|
43
|
-
|
44
|
-
module Sample; end
|
45
|
-
|
46
|
-
module Sample::Cal include Raabro
|
47
|
-
|
48
|
-
def sp(i); rex(nil, i, /\s+/); end
|
49
|
-
|
50
|
-
def num(i); rex(:num, i, /-?[0-9]+/); end
|
51
|
-
def op(i); rex(:op, i, /[+\-*\/]/); end
|
52
|
-
def item(i); alt(:item, i, :num, :op); end
|
53
|
-
|
54
|
-
def suite(i); jseq(nil, i, :item, :sp); end
|
55
|
-
end
|
56
|
-
|
57
|
-
module Sample::Arith include Raabro
|
58
|
-
|
59
|
-
def number(i); rex(:number, i, /-?[0-9]+\s*/); end
|
60
|
-
def plus(i); rex(:plus, i, /\+\s*/); end
|
61
|
-
def minus(i); rex(:minus, i, /-\s*/); end
|
62
|
-
|
63
|
-
def addition(i); seq(:addition, i, :number, :plus, :op_or_num); end
|
64
|
-
def substraction(i); seq(:substraction, i, :number, :minus, :op_or_num); end
|
65
|
-
|
66
|
-
def op_or_num(i); alt(nil, i, :addition, :substraction, :number); end
|
67
|
-
end
|
68
|
-
|
data/spec/str_spec.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# specifying raabro
|
4
|
-
#
|
5
|
-
# Sun Sep 20 06:11:54 JST 2015
|
6
|
-
#
|
7
|
-
|
8
|
-
require 'spec_helper'
|
9
|
-
|
10
|
-
|
11
|
-
describe Raabro do
|
12
|
-
|
13
|
-
describe '.str' do
|
14
|
-
|
15
|
-
it 'returns a tree with result == 0 in case of failure' do
|
16
|
-
|
17
|
-
i = Raabro::Input.new('toto')
|
18
|
-
|
19
|
-
t = Raabro.str(nil, i, 'nada')
|
20
|
-
|
21
|
-
expect(t.to_a).to eq(
|
22
|
-
[ nil, 0, 0, 0, nil, :str, [] ]
|
23
|
-
)
|
24
|
-
expect(i.offset).to eq(0)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "returns a tree with result == 1 in case of success" do
|
28
|
-
|
29
|
-
i = Raabro::Input.new('toto')
|
30
|
-
|
31
|
-
t = Raabro.str(nil, i, 'toto')
|
32
|
-
|
33
|
-
expect(t.to_a).to eq(
|
34
|
-
[ nil, 1, 0, 4, nil, :str, [] ]
|
35
|
-
)
|
36
|
-
expect(i.offset).to eq(4)
|
37
|
-
end
|
38
|
-
|
39
|
-
it "names the result if there is a name" do
|
40
|
-
|
41
|
-
i = Raabro::Input.new('toto')
|
42
|
-
|
43
|
-
t = Raabro.str(:x, i, 'toto')
|
44
|
-
|
45
|
-
expect(t.to_a).to eq(
|
46
|
-
[ :x, 1, 0, 4, nil, :str, [] ]
|
47
|
-
)
|
48
|
-
expect(i.offset).to eq(4)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "names in case of failure as well" do
|
52
|
-
|
53
|
-
i = Raabro::Input.new('toto')
|
54
|
-
|
55
|
-
t = Raabro.str(:y, i, 'nada')
|
56
|
-
|
57
|
-
expect(t.to_a).to eq(
|
58
|
-
[ :y, 0, 0, 0, nil, :str, [] ]
|
59
|
-
)
|
60
|
-
expect(i.offset).to eq(0)
|
61
|
-
end
|
62
|
-
|
63
|
-
it "accepts an empty input" do
|
64
|
-
|
65
|
-
i = Raabro::Input.new('toto')
|
66
|
-
i.offset = 4
|
67
|
-
|
68
|
-
t = Raabro.str(nil, i, 'nada')
|
69
|
-
|
70
|
-
expect(t.to_a).to eq(
|
71
|
-
[ nil, 0, 4, 0, nil, :str, [] ]
|
72
|
-
)
|
73
|
-
expect(i.offset).to eq(4)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
data/spec/tree_spec.rb
DELETED
@@ -1,126 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# specifying raabro
|
4
|
-
#
|
5
|
-
# Tue Sep 22 07:55:52 JST 2015
|
6
|
-
#
|
7
|
-
|
8
|
-
require 'spec_helper'
|
9
|
-
|
10
|
-
|
11
|
-
describe Raabro::Tree do
|
12
|
-
|
13
|
-
describe '.lookup' do
|
14
|
-
|
15
|
-
it 'returns the first node with the given name' do
|
16
|
-
|
17
|
-
t = Sample::Cal.parse('4 5 6 + 1 2 3 * +', rewrite: false)
|
18
|
-
|
19
|
-
expect(
|
20
|
-
t.lookup('item').to_a(:leaves)
|
21
|
-
).to eq(
|
22
|
-
[ :item, 1, 0, 1, nil, :alt, [
|
23
|
-
[ :num, 1, 0, 1, nil, :rex, '4' ]
|
24
|
-
] ]
|
25
|
-
)
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'returns the first named node if the given name is nil' do
|
29
|
-
|
30
|
-
t = Sample::Cal.parse('4 5 6 + 1 2 3 * +', rewrite: false)
|
31
|
-
|
32
|
-
expect(
|
33
|
-
t.lookup(nil).to_a(:leaves)
|
34
|
-
).to eq(
|
35
|
-
[ :item, 1, 0, 1, nil, :alt, [
|
36
|
-
[ :num, 1, 0, 1, nil, :rex, '4' ]
|
37
|
-
] ]
|
38
|
-
)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe '.sublookup' do
|
43
|
-
|
44
|
-
it 'skips the callee node' do
|
45
|
-
|
46
|
-
t = Sample::Cal.parse('4 5 6 + 1 2 3 * +', rewrite: false)
|
47
|
-
t = t.children[0]
|
48
|
-
|
49
|
-
expect(
|
50
|
-
t.sublookup(nil).to_a(:leaves)
|
51
|
-
).to eq(
|
52
|
-
[ :num, 1, 0, 1, nil, :rex, '4' ]
|
53
|
-
)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe '.gather' do
|
58
|
-
|
59
|
-
it 'returns all the nodes with a given name' do
|
60
|
-
|
61
|
-
t = Sample::Cal.parse('4 5 6 + 1 2 3 * +', rewrite: false)
|
62
|
-
|
63
|
-
expect(
|
64
|
-
t.gather('op').collect { |n| n.to_a(:leaves) }
|
65
|
-
).to eq(
|
66
|
-
[
|
67
|
-
[ :op, 1, 6, 1, nil, :rex, '+' ],
|
68
|
-
[ :op, 1, 14, 1, nil, :rex, '*' ],
|
69
|
-
[ :op, 1, 16, 1, nil, :rex, '+' ]
|
70
|
-
]
|
71
|
-
)
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'returns all the nodes with a name if the given name is nil' do
|
75
|
-
|
76
|
-
t = Sample::Cal.parse('4 5 6 + 1 2 3 * +', rewrite: false)
|
77
|
-
|
78
|
-
expect(
|
79
|
-
t.gather(nil).collect { |n| n.to_a(:leaves) }
|
80
|
-
).to eq([
|
81
|
-
[ :item, 1, 0, 1, nil, :alt, [
|
82
|
-
[ :num, 1, 0, 1, nil, :rex, '4' ]
|
83
|
-
] ],
|
84
|
-
[ :item, 1, 2, 1, nil, :alt, [
|
85
|
-
[ :num, 1, 2, 1, nil, :rex, '5' ]
|
86
|
-
] ],
|
87
|
-
[ :item, 1, 4, 1, nil, :alt, [
|
88
|
-
[ :num, 1, 4, 1, nil, :rex, '6' ]
|
89
|
-
] ],
|
90
|
-
[ :item, 1, 6, 1, nil, :alt, [
|
91
|
-
[ :op, 1, 6, 1, nil, :rex, '+' ]
|
92
|
-
] ],
|
93
|
-
[ :item, 1, 8, 1, nil, :alt, [
|
94
|
-
[ :num, 1, 8, 1, nil, :rex, '1' ]
|
95
|
-
] ],
|
96
|
-
[ :item, 1, 10, 1, nil, :alt, [
|
97
|
-
[ :num, 1, 10, 1, nil, :rex, '2' ]
|
98
|
-
] ],
|
99
|
-
[ :item, 1, 12, 1, nil, :alt, [
|
100
|
-
[ :num, 1, 12, 1, nil, :rex, '3' ]
|
101
|
-
] ],
|
102
|
-
[ :item, 1, 14, 1, nil, :alt, [
|
103
|
-
[ :op, 1, 14, 1, nil, :rex, '*' ]
|
104
|
-
] ],
|
105
|
-
[ :item, 1, 16, 1, nil, :alt, [
|
106
|
-
[ :op, 1, 16, 1, nil, :rex, '+' ]
|
107
|
-
] ]
|
108
|
-
])
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
describe '.subgather' do
|
113
|
-
|
114
|
-
it 'skips the callee node' do
|
115
|
-
|
116
|
-
t = Sample::Cal.parse('4 5 6 + 1 2 3 * +', rewrite: false)
|
117
|
-
|
118
|
-
expect(
|
119
|
-
t.children[0].subgather(nil).collect { |n| n.to_a(:leaves) }
|
120
|
-
).to eq([
|
121
|
-
[ :num, 1, 0, 1, nil, :rex, '4' ]
|
122
|
-
])
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|