fig 0.1.76 → 0.1.77
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/Changes +40 -0
- data/lib/fig.rb +1 -1
- data/lib/fig/grammar/v0_asset_location.rb +162 -0
- data/lib/fig/grammar/v0_ish.rb +1356 -0
- data/lib/fig/grammar/v1_asset_location.rb +162 -0
- data/lib/fig/grammar/v2.rb +1478 -0
- data/lib/fig/working_directory_maintainer.rb +31 -1
- metadata +51 -47
data/Changes
CHANGED
@@ -1,3 +1,43 @@
|
|
1
|
+
v0.1.77
|
2
|
+
|
3
|
+
Bug fixes:
|
4
|
+
|
5
|
+
- Fix for the case where the value of an environment variable statement is
|
6
|
+
the path to a symlink when a retrieve is in effect. Note that retrieves of
|
7
|
+
symlinks will be copied as the target of the symlink and not as the
|
8
|
+
symlink; however, if the retrieve is of a directory which contains
|
9
|
+
symlinks, those symlinks will be copied as symlinks.
|
10
|
+
|
11
|
+
If we have a package.fig that looks like
|
12
|
+
|
13
|
+
retrieve SOMEPATH->somewhere
|
14
|
+
config default
|
15
|
+
include foo/57
|
16
|
+
end
|
17
|
+
|
18
|
+
and the contents of the "foo" package look like
|
19
|
+
|
20
|
+
config default
|
21
|
+
set SOMEPATH=a_symlink
|
22
|
+
end
|
23
|
+
|
24
|
+
then the target of "a_symlink" will be copied to "somewhere" as the type of
|
25
|
+
the target (i.e. a file or directory). If, however, the contents of the
|
26
|
+
"foo" package look like
|
27
|
+
|
28
|
+
config default
|
29
|
+
set SOMEPATH=a_directory
|
30
|
+
end
|
31
|
+
|
32
|
+
and "a_directory" contains a symlink named "another_symlink", then
|
33
|
+
"another_symlink" will be copied to "somewhere" as a symlink.
|
34
|
+
|
35
|
+
- Retrieves of symlinks will not occur if the symlink was previously
|
36
|
+
retrieved. Previously, if you updates the same package multiple times and
|
37
|
+
that package contained symlinks, the symlinks would be recreated on every
|
38
|
+
update, even though the regular files would not.
|
39
|
+
|
40
|
+
|
1
41
|
v0.1.76
|
2
42
|
|
3
43
|
New features:
|
data/lib/fig.rb
CHANGED
@@ -0,0 +1,162 @@
|
|
1
|
+
# Autogenerated from a Treetop grammar. Edits may be lost.
|
2
|
+
|
3
|
+
|
4
|
+
# The asset location stuff is broken out from the v0 grammar proper because
|
5
|
+
# having a rule within a file makes it the root of the grammar, which causes
|
6
|
+
# initialization issues in the generated Ruby code. So, the v0-specific asset
|
7
|
+
# stuff is in a separate file and the v0 grammar proper simply includes
|
8
|
+
# everything it needs.
|
9
|
+
|
10
|
+
require 'treetop'
|
11
|
+
|
12
|
+
module Fig
|
13
|
+
module Grammar
|
14
|
+
module V0AssetLocation
|
15
|
+
include Treetop::Runtime
|
16
|
+
|
17
|
+
def root
|
18
|
+
@root ||= :asset_location
|
19
|
+
end
|
20
|
+
|
21
|
+
module AssetLocation0
|
22
|
+
def location
|
23
|
+
elements[0]
|
24
|
+
end
|
25
|
+
|
26
|
+
def ws
|
27
|
+
elements[1]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module AssetLocation1
|
32
|
+
def location
|
33
|
+
elements[1]
|
34
|
+
end
|
35
|
+
|
36
|
+
def ws
|
37
|
+
elements[3]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def _nt_asset_location
|
42
|
+
start_index = index
|
43
|
+
if node_cache[:asset_location].has_key?(index)
|
44
|
+
cached = node_cache[:asset_location][index]
|
45
|
+
if cached
|
46
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
47
|
+
@index = cached.interval.end
|
48
|
+
end
|
49
|
+
return cached
|
50
|
+
end
|
51
|
+
|
52
|
+
i0 = index
|
53
|
+
i1, s1 = index, []
|
54
|
+
s2, i2 = [], index
|
55
|
+
loop do
|
56
|
+
if has_terminal?('\G[^@\'"<>|\\s]', true, index)
|
57
|
+
r3 = true
|
58
|
+
@index += 1
|
59
|
+
else
|
60
|
+
r3 = nil
|
61
|
+
end
|
62
|
+
if r3
|
63
|
+
s2 << r3
|
64
|
+
else
|
65
|
+
break
|
66
|
+
end
|
67
|
+
end
|
68
|
+
if s2.empty?
|
69
|
+
@index = i2
|
70
|
+
r2 = nil
|
71
|
+
else
|
72
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
73
|
+
end
|
74
|
+
s1 << r2
|
75
|
+
if r2
|
76
|
+
r4 = _nt_ws
|
77
|
+
s1 << r4
|
78
|
+
end
|
79
|
+
if s1.last
|
80
|
+
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
|
81
|
+
r1.extend(AssetLocation0)
|
82
|
+
else
|
83
|
+
@index = i1
|
84
|
+
r1 = nil
|
85
|
+
end
|
86
|
+
if r1
|
87
|
+
r0 = r1
|
88
|
+
else
|
89
|
+
i5, s5 = index, []
|
90
|
+
if has_terminal?('"', false, index)
|
91
|
+
r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
92
|
+
@index += 1
|
93
|
+
else
|
94
|
+
terminal_parse_failure('"')
|
95
|
+
r6 = nil
|
96
|
+
end
|
97
|
+
s5 << r6
|
98
|
+
if r6
|
99
|
+
s7, i7 = [], index
|
100
|
+
loop do
|
101
|
+
if has_terminal?('\G[^@\'"<>|*?\\[\\]{}\\s]', true, index)
|
102
|
+
r8 = true
|
103
|
+
@index += 1
|
104
|
+
else
|
105
|
+
r8 = nil
|
106
|
+
end
|
107
|
+
if r8
|
108
|
+
s7 << r8
|
109
|
+
else
|
110
|
+
break
|
111
|
+
end
|
112
|
+
end
|
113
|
+
if s7.empty?
|
114
|
+
@index = i7
|
115
|
+
r7 = nil
|
116
|
+
else
|
117
|
+
r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
|
118
|
+
end
|
119
|
+
s5 << r7
|
120
|
+
if r7
|
121
|
+
if has_terminal?('"', false, index)
|
122
|
+
r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
123
|
+
@index += 1
|
124
|
+
else
|
125
|
+
terminal_parse_failure('"')
|
126
|
+
r9 = nil
|
127
|
+
end
|
128
|
+
s5 << r9
|
129
|
+
if r9
|
130
|
+
r10 = _nt_ws
|
131
|
+
s5 << r10
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
if s5.last
|
136
|
+
r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
|
137
|
+
r5.extend(AssetLocation1)
|
138
|
+
else
|
139
|
+
@index = i5
|
140
|
+
r5 = nil
|
141
|
+
end
|
142
|
+
if r5
|
143
|
+
r0 = r5
|
144
|
+
else
|
145
|
+
@index = i0
|
146
|
+
r0 = nil
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
node_cache[:asset_location][start_index] = r0
|
151
|
+
|
152
|
+
r0
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
|
157
|
+
class V0AssetLocationParser < Treetop::Runtime::CompiledParser
|
158
|
+
include V0AssetLocation
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
end
|
@@ -0,0 +1,1356 @@
|
|
1
|
+
# Autogenerated from a Treetop grammar. Edits may be lost.
|
2
|
+
|
3
|
+
|
4
|
+
# Treetop (http://treetop.rubyforge.org/) grammar for package definitions from
|
5
|
+
# the early days, which we're calling v0. Since we're making a slight
|
6
|
+
# incompatibility in asset locations, v1 is being used as a "gentle
|
7
|
+
# introduction" to the concept of multiple grammar versions. Since v0 and v1
|
8
|
+
# are so close, this is everything from the early grammar other than the asset
|
9
|
+
# location.
|
10
|
+
|
11
|
+
# Some aspects of this grammar are significantly dumber than they could be
|
12
|
+
# because:
|
13
|
+
#
|
14
|
+
# * We want to treat statements as identically as possible to their
|
15
|
+
# command-line equivalents.
|
16
|
+
# * Treetop parse errors are pretty inscrutable at times and we can make
|
17
|
+
# error messages clearer by validating a lot of the terminals ourselves.
|
18
|
+
|
19
|
+
require 'treetop'
|
20
|
+
|
21
|
+
module Fig
|
22
|
+
module Grammar
|
23
|
+
module V0Ish
|
24
|
+
include Treetop::Runtime
|
25
|
+
|
26
|
+
def root
|
27
|
+
@root ||= :package
|
28
|
+
end
|
29
|
+
|
30
|
+
module Package0
|
31
|
+
def optional_ws1
|
32
|
+
elements[0]
|
33
|
+
end
|
34
|
+
|
35
|
+
def grammar_version
|
36
|
+
elements[1]
|
37
|
+
end
|
38
|
+
|
39
|
+
def statements
|
40
|
+
elements[3]
|
41
|
+
end
|
42
|
+
|
43
|
+
def optional_ws2
|
44
|
+
elements[4]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
module Package1
|
49
|
+
def to_package(directory, build_state)
|
50
|
+
return build_state.new_package_statement(
|
51
|
+
directory, grammar_version, statements
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def _nt_package
|
57
|
+
start_index = index
|
58
|
+
if node_cache[:package].has_key?(index)
|
59
|
+
cached = node_cache[:package][index]
|
60
|
+
if cached
|
61
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
62
|
+
@index = cached.interval.end
|
63
|
+
end
|
64
|
+
return cached
|
65
|
+
end
|
66
|
+
|
67
|
+
i0, s0 = index, []
|
68
|
+
r1 = _nt_optional_ws
|
69
|
+
s0 << r1
|
70
|
+
if r1
|
71
|
+
r3 = _nt_grammar_version
|
72
|
+
if r3
|
73
|
+
r2 = r3
|
74
|
+
else
|
75
|
+
r2 = instantiate_node(SyntaxNode,input, index...index)
|
76
|
+
end
|
77
|
+
s0 << r2
|
78
|
+
if r2
|
79
|
+
s4, i4 = [], index
|
80
|
+
loop do
|
81
|
+
r5 = _nt_ws
|
82
|
+
if r5
|
83
|
+
s4 << r5
|
84
|
+
else
|
85
|
+
break
|
86
|
+
end
|
87
|
+
end
|
88
|
+
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
|
89
|
+
s0 << r4
|
90
|
+
if r4
|
91
|
+
s6, i6 = [], index
|
92
|
+
loop do
|
93
|
+
r7 = _nt_package_statement
|
94
|
+
if r7
|
95
|
+
s6 << r7
|
96
|
+
else
|
97
|
+
break
|
98
|
+
end
|
99
|
+
end
|
100
|
+
r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
|
101
|
+
s0 << r6
|
102
|
+
if r6
|
103
|
+
r8 = _nt_optional_ws
|
104
|
+
s0 << r8
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
if s0.last
|
110
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
111
|
+
r0.extend(Package0)
|
112
|
+
r0.extend(Package1)
|
113
|
+
else
|
114
|
+
@index = i0
|
115
|
+
r0 = nil
|
116
|
+
end
|
117
|
+
|
118
|
+
node_cache[:package][start_index] = r0
|
119
|
+
|
120
|
+
r0
|
121
|
+
end
|
122
|
+
|
123
|
+
def _nt_package_statement
|
124
|
+
start_index = index
|
125
|
+
if node_cache[:package_statement].has_key?(index)
|
126
|
+
cached = node_cache[:package_statement][index]
|
127
|
+
if cached
|
128
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
129
|
+
@index = cached.interval.end
|
130
|
+
end
|
131
|
+
return cached
|
132
|
+
end
|
133
|
+
|
134
|
+
i0 = index
|
135
|
+
r1 = _nt_archive
|
136
|
+
if r1
|
137
|
+
r0 = r1
|
138
|
+
else
|
139
|
+
r2 = _nt_resource
|
140
|
+
if r2
|
141
|
+
r0 = r2
|
142
|
+
else
|
143
|
+
r3 = _nt_retrieve
|
144
|
+
if r3
|
145
|
+
r0 = r3
|
146
|
+
else
|
147
|
+
r4 = _nt_config
|
148
|
+
if r4
|
149
|
+
r0 = r4
|
150
|
+
else
|
151
|
+
@index = i0
|
152
|
+
r0 = nil
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
node_cache[:package_statement][start_index] = r0
|
159
|
+
|
160
|
+
r0
|
161
|
+
end
|
162
|
+
|
163
|
+
module Archive0
|
164
|
+
def statement_start
|
165
|
+
elements[0]
|
166
|
+
end
|
167
|
+
|
168
|
+
def location
|
169
|
+
elements[2]
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
module Archive1
|
174
|
+
def to_package_statement(build_state)
|
175
|
+
return build_state.new_asset_statement(
|
176
|
+
Statement::Archive, statement_start, location.location
|
177
|
+
)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def _nt_archive
|
182
|
+
start_index = index
|
183
|
+
if node_cache[:archive].has_key?(index)
|
184
|
+
cached = node_cache[:archive][index]
|
185
|
+
if cached
|
186
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
187
|
+
@index = cached.interval.end
|
188
|
+
end
|
189
|
+
return cached
|
190
|
+
end
|
191
|
+
|
192
|
+
i0, s0 = index, []
|
193
|
+
if has_terminal?('archive', false, index)
|
194
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
|
195
|
+
@index += 7
|
196
|
+
else
|
197
|
+
terminal_parse_failure('archive')
|
198
|
+
r1 = nil
|
199
|
+
end
|
200
|
+
s0 << r1
|
201
|
+
if r1
|
202
|
+
s2, i2 = [], index
|
203
|
+
loop do
|
204
|
+
r3 = _nt_ws
|
205
|
+
if r3
|
206
|
+
s2 << r3
|
207
|
+
else
|
208
|
+
break
|
209
|
+
end
|
210
|
+
end
|
211
|
+
if s2.empty?
|
212
|
+
@index = i2
|
213
|
+
r2 = nil
|
214
|
+
else
|
215
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
216
|
+
end
|
217
|
+
s0 << r2
|
218
|
+
if r2
|
219
|
+
r4 = _nt_asset_location
|
220
|
+
s0 << r4
|
221
|
+
end
|
222
|
+
end
|
223
|
+
if s0.last
|
224
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
225
|
+
r0.extend(Archive0)
|
226
|
+
r0.extend(Archive1)
|
227
|
+
else
|
228
|
+
@index = i0
|
229
|
+
r0 = nil
|
230
|
+
end
|
231
|
+
|
232
|
+
node_cache[:archive][start_index] = r0
|
233
|
+
|
234
|
+
r0
|
235
|
+
end
|
236
|
+
|
237
|
+
module Resource0
|
238
|
+
def statement_start
|
239
|
+
elements[0]
|
240
|
+
end
|
241
|
+
|
242
|
+
def location
|
243
|
+
elements[2]
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
module Resource1
|
248
|
+
def to_package_statement(build_state)
|
249
|
+
return build_state.new_asset_statement(
|
250
|
+
Statement::Resource, statement_start, location.location
|
251
|
+
)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
def _nt_resource
|
256
|
+
start_index = index
|
257
|
+
if node_cache[:resource].has_key?(index)
|
258
|
+
cached = node_cache[:resource][index]
|
259
|
+
if cached
|
260
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
261
|
+
@index = cached.interval.end
|
262
|
+
end
|
263
|
+
return cached
|
264
|
+
end
|
265
|
+
|
266
|
+
i0, s0 = index, []
|
267
|
+
if has_terminal?('resource', false, index)
|
268
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
|
269
|
+
@index += 8
|
270
|
+
else
|
271
|
+
terminal_parse_failure('resource')
|
272
|
+
r1 = nil
|
273
|
+
end
|
274
|
+
s0 << r1
|
275
|
+
if r1
|
276
|
+
s2, i2 = [], index
|
277
|
+
loop do
|
278
|
+
r3 = _nt_ws
|
279
|
+
if r3
|
280
|
+
s2 << r3
|
281
|
+
else
|
282
|
+
break
|
283
|
+
end
|
284
|
+
end
|
285
|
+
if s2.empty?
|
286
|
+
@index = i2
|
287
|
+
r2 = nil
|
288
|
+
else
|
289
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
290
|
+
end
|
291
|
+
s0 << r2
|
292
|
+
if r2
|
293
|
+
r4 = _nt_asset_location
|
294
|
+
s0 << r4
|
295
|
+
end
|
296
|
+
end
|
297
|
+
if s0.last
|
298
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
299
|
+
r0.extend(Resource0)
|
300
|
+
r0.extend(Resource1)
|
301
|
+
else
|
302
|
+
@index = i0
|
303
|
+
r0 = nil
|
304
|
+
end
|
305
|
+
|
306
|
+
node_cache[:resource][start_index] = r0
|
307
|
+
|
308
|
+
r0
|
309
|
+
end
|
310
|
+
|
311
|
+
module Retrieve0
|
312
|
+
def statement_start
|
313
|
+
elements[0]
|
314
|
+
end
|
315
|
+
|
316
|
+
def var
|
317
|
+
elements[2]
|
318
|
+
end
|
319
|
+
|
320
|
+
def path
|
321
|
+
elements[4]
|
322
|
+
end
|
323
|
+
|
324
|
+
end
|
325
|
+
|
326
|
+
module Retrieve1
|
327
|
+
def to_package_statement(build_state)
|
328
|
+
return build_state.new_retrieve_statement(statement_start, var, path)
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
def _nt_retrieve
|
333
|
+
start_index = index
|
334
|
+
if node_cache[:retrieve].has_key?(index)
|
335
|
+
cached = node_cache[:retrieve][index]
|
336
|
+
if cached
|
337
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
338
|
+
@index = cached.interval.end
|
339
|
+
end
|
340
|
+
return cached
|
341
|
+
end
|
342
|
+
|
343
|
+
i0, s0 = index, []
|
344
|
+
if has_terminal?('retrieve', false, index)
|
345
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
|
346
|
+
@index += 8
|
347
|
+
else
|
348
|
+
terminal_parse_failure('retrieve')
|
349
|
+
r1 = nil
|
350
|
+
end
|
351
|
+
s0 << r1
|
352
|
+
if r1
|
353
|
+
s2, i2 = [], index
|
354
|
+
loop do
|
355
|
+
r3 = _nt_ws
|
356
|
+
if r3
|
357
|
+
s2 << r3
|
358
|
+
else
|
359
|
+
break
|
360
|
+
end
|
361
|
+
end
|
362
|
+
if s2.empty?
|
363
|
+
@index = i2
|
364
|
+
r2 = nil
|
365
|
+
else
|
366
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
367
|
+
end
|
368
|
+
s0 << r2
|
369
|
+
if r2
|
370
|
+
r4 = _nt_environment_variable_name
|
371
|
+
s0 << r4
|
372
|
+
if r4
|
373
|
+
if has_terminal?('->', false, index)
|
374
|
+
r5 = instantiate_node(SyntaxNode,input, index...(index + 2))
|
375
|
+
@index += 2
|
376
|
+
else
|
377
|
+
terminal_parse_failure('->')
|
378
|
+
r5 = nil
|
379
|
+
end
|
380
|
+
s0 << r5
|
381
|
+
if r5
|
382
|
+
r6 = _nt_retrieve_path
|
383
|
+
s0 << r6
|
384
|
+
if r6
|
385
|
+
s7, i7 = [], index
|
386
|
+
loop do
|
387
|
+
r8 = _nt_ws
|
388
|
+
if r8
|
389
|
+
s7 << r8
|
390
|
+
else
|
391
|
+
break
|
392
|
+
end
|
393
|
+
end
|
394
|
+
if s7.empty?
|
395
|
+
@index = i7
|
396
|
+
r7 = nil
|
397
|
+
else
|
398
|
+
r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
|
399
|
+
end
|
400
|
+
s0 << r7
|
401
|
+
end
|
402
|
+
end
|
403
|
+
end
|
404
|
+
end
|
405
|
+
end
|
406
|
+
if s0.last
|
407
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
408
|
+
r0.extend(Retrieve0)
|
409
|
+
r0.extend(Retrieve1)
|
410
|
+
else
|
411
|
+
@index = i0
|
412
|
+
r0 = nil
|
413
|
+
end
|
414
|
+
|
415
|
+
node_cache[:retrieve][start_index] = r0
|
416
|
+
|
417
|
+
r0
|
418
|
+
end
|
419
|
+
|
420
|
+
def _nt_retrieve_path
|
421
|
+
start_index = index
|
422
|
+
if node_cache[:retrieve_path].has_key?(index)
|
423
|
+
cached = node_cache[:retrieve_path][index]
|
424
|
+
if cached
|
425
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
426
|
+
@index = cached.interval.end
|
427
|
+
end
|
428
|
+
return cached
|
429
|
+
end
|
430
|
+
|
431
|
+
s0, i0 = [], index
|
432
|
+
loop do
|
433
|
+
if has_terminal?('\G[a-zA-Z0-9_/.\\[\\]-]', true, index)
|
434
|
+
r1 = true
|
435
|
+
@index += 1
|
436
|
+
else
|
437
|
+
r1 = nil
|
438
|
+
end
|
439
|
+
if r1
|
440
|
+
s0 << r1
|
441
|
+
else
|
442
|
+
break
|
443
|
+
end
|
444
|
+
end
|
445
|
+
if s0.empty?
|
446
|
+
@index = i0
|
447
|
+
r0 = nil
|
448
|
+
else
|
449
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
450
|
+
end
|
451
|
+
|
452
|
+
node_cache[:retrieve_path][start_index] = r0
|
453
|
+
|
454
|
+
r0
|
455
|
+
end
|
456
|
+
|
457
|
+
module Config0
|
458
|
+
def statement_start
|
459
|
+
elements[0]
|
460
|
+
end
|
461
|
+
|
462
|
+
def config_name
|
463
|
+
elements[2]
|
464
|
+
end
|
465
|
+
|
466
|
+
def statements
|
467
|
+
elements[4]
|
468
|
+
end
|
469
|
+
|
470
|
+
end
|
471
|
+
|
472
|
+
module Config1
|
473
|
+
def to_package_statement(build_state)
|
474
|
+
return build_state.new_configuration_statement(
|
475
|
+
statement_start, config_name, statements
|
476
|
+
)
|
477
|
+
end
|
478
|
+
end
|
479
|
+
|
480
|
+
def _nt_config
|
481
|
+
start_index = index
|
482
|
+
if node_cache[:config].has_key?(index)
|
483
|
+
cached = node_cache[:config][index]
|
484
|
+
if cached
|
485
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
486
|
+
@index = cached.interval.end
|
487
|
+
end
|
488
|
+
return cached
|
489
|
+
end
|
490
|
+
|
491
|
+
i0, s0 = index, []
|
492
|
+
if has_terminal?('config', false, index)
|
493
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 6))
|
494
|
+
@index += 6
|
495
|
+
else
|
496
|
+
terminal_parse_failure('config')
|
497
|
+
r1 = nil
|
498
|
+
end
|
499
|
+
s0 << r1
|
500
|
+
if r1
|
501
|
+
s2, i2 = [], index
|
502
|
+
loop do
|
503
|
+
r3 = _nt_ws
|
504
|
+
if r3
|
505
|
+
s2 << r3
|
506
|
+
else
|
507
|
+
break
|
508
|
+
end
|
509
|
+
end
|
510
|
+
if s2.empty?
|
511
|
+
@index = i2
|
512
|
+
r2 = nil
|
513
|
+
else
|
514
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
515
|
+
end
|
516
|
+
s0 << r2
|
517
|
+
if r2
|
518
|
+
r4 = _nt_config_name
|
519
|
+
s0 << r4
|
520
|
+
if r4
|
521
|
+
s5, i5 = [], index
|
522
|
+
loop do
|
523
|
+
r6 = _nt_ws
|
524
|
+
if r6
|
525
|
+
s5 << r6
|
526
|
+
else
|
527
|
+
break
|
528
|
+
end
|
529
|
+
end
|
530
|
+
if s5.empty?
|
531
|
+
@index = i5
|
532
|
+
r5 = nil
|
533
|
+
else
|
534
|
+
r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
|
535
|
+
end
|
536
|
+
s0 << r5
|
537
|
+
if r5
|
538
|
+
s7, i7 = [], index
|
539
|
+
loop do
|
540
|
+
r8 = _nt_config_statement
|
541
|
+
if r8
|
542
|
+
s7 << r8
|
543
|
+
else
|
544
|
+
break
|
545
|
+
end
|
546
|
+
end
|
547
|
+
r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
|
548
|
+
s0 << r7
|
549
|
+
if r7
|
550
|
+
if has_terminal?('end', false, index)
|
551
|
+
r9 = instantiate_node(SyntaxNode,input, index...(index + 3))
|
552
|
+
@index += 3
|
553
|
+
else
|
554
|
+
terminal_parse_failure('end')
|
555
|
+
r9 = nil
|
556
|
+
end
|
557
|
+
s0 << r9
|
558
|
+
if r9
|
559
|
+
s10, i10 = [], index
|
560
|
+
loop do
|
561
|
+
r11 = _nt_ws
|
562
|
+
if r11
|
563
|
+
s10 << r11
|
564
|
+
else
|
565
|
+
break
|
566
|
+
end
|
567
|
+
end
|
568
|
+
if s10.empty?
|
569
|
+
@index = i10
|
570
|
+
r10 = nil
|
571
|
+
else
|
572
|
+
r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
|
573
|
+
end
|
574
|
+
s0 << r10
|
575
|
+
end
|
576
|
+
end
|
577
|
+
end
|
578
|
+
end
|
579
|
+
end
|
580
|
+
end
|
581
|
+
if s0.last
|
582
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
583
|
+
r0.extend(Config0)
|
584
|
+
r0.extend(Config1)
|
585
|
+
else
|
586
|
+
@index = i0
|
587
|
+
r0 = nil
|
588
|
+
end
|
589
|
+
|
590
|
+
node_cache[:config][start_index] = r0
|
591
|
+
|
592
|
+
r0
|
593
|
+
end
|
594
|
+
|
595
|
+
def _nt_config_name
|
596
|
+
start_index = index
|
597
|
+
if node_cache[:config_name].has_key?(index)
|
598
|
+
cached = node_cache[:config_name][index]
|
599
|
+
if cached
|
600
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
601
|
+
@index = cached.interval.end
|
602
|
+
end
|
603
|
+
return cached
|
604
|
+
end
|
605
|
+
|
606
|
+
s0, i0 = [], index
|
607
|
+
loop do
|
608
|
+
if has_terminal?('\G[a-zA-Z0-9_.-]', true, index)
|
609
|
+
r1 = true
|
610
|
+
@index += 1
|
611
|
+
else
|
612
|
+
r1 = nil
|
613
|
+
end
|
614
|
+
if r1
|
615
|
+
s0 << r1
|
616
|
+
else
|
617
|
+
break
|
618
|
+
end
|
619
|
+
end
|
620
|
+
if s0.empty?
|
621
|
+
@index = i0
|
622
|
+
r0 = nil
|
623
|
+
else
|
624
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
625
|
+
end
|
626
|
+
|
627
|
+
node_cache[:config_name][start_index] = r0
|
628
|
+
|
629
|
+
r0
|
630
|
+
end
|
631
|
+
|
632
|
+
def _nt_config_statement
|
633
|
+
start_index = index
|
634
|
+
if node_cache[:config_statement].has_key?(index)
|
635
|
+
cached = node_cache[:config_statement][index]
|
636
|
+
if cached
|
637
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
638
|
+
@index = cached.interval.end
|
639
|
+
end
|
640
|
+
return cached
|
641
|
+
end
|
642
|
+
|
643
|
+
i0 = index
|
644
|
+
r1 = _nt_override
|
645
|
+
if r1
|
646
|
+
r0 = r1
|
647
|
+
else
|
648
|
+
r2 = _nt_include
|
649
|
+
if r2
|
650
|
+
r0 = r2
|
651
|
+
else
|
652
|
+
r3 = _nt_command
|
653
|
+
if r3
|
654
|
+
r0 = r3
|
655
|
+
else
|
656
|
+
r4 = _nt_path
|
657
|
+
if r4
|
658
|
+
r0 = r4
|
659
|
+
else
|
660
|
+
r5 = _nt_set
|
661
|
+
if r5
|
662
|
+
r0 = r5
|
663
|
+
else
|
664
|
+
@index = i0
|
665
|
+
r0 = nil
|
666
|
+
end
|
667
|
+
end
|
668
|
+
end
|
669
|
+
end
|
670
|
+
end
|
671
|
+
|
672
|
+
node_cache[:config_statement][start_index] = r0
|
673
|
+
|
674
|
+
r0
|
675
|
+
end
|
676
|
+
|
677
|
+
module Include0
|
678
|
+
def statement_start
|
679
|
+
elements[0]
|
680
|
+
end
|
681
|
+
|
682
|
+
def descriptor_string
|
683
|
+
elements[2]
|
684
|
+
end
|
685
|
+
|
686
|
+
end
|
687
|
+
|
688
|
+
module Include1
|
689
|
+
def to_config_statement(build_state)
|
690
|
+
return build_state.new_include_statement(
|
691
|
+
statement_start, descriptor_string
|
692
|
+
)
|
693
|
+
end
|
694
|
+
end
|
695
|
+
|
696
|
+
def _nt_include
|
697
|
+
start_index = index
|
698
|
+
if node_cache[:include].has_key?(index)
|
699
|
+
cached = node_cache[:include][index]
|
700
|
+
if cached
|
701
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
702
|
+
@index = cached.interval.end
|
703
|
+
end
|
704
|
+
return cached
|
705
|
+
end
|
706
|
+
|
707
|
+
i0, s0 = index, []
|
708
|
+
if has_terminal?('include', false, index)
|
709
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
|
710
|
+
@index += 7
|
711
|
+
else
|
712
|
+
terminal_parse_failure('include')
|
713
|
+
r1 = nil
|
714
|
+
end
|
715
|
+
s0 << r1
|
716
|
+
if r1
|
717
|
+
s2, i2 = [], index
|
718
|
+
loop do
|
719
|
+
r3 = _nt_ws
|
720
|
+
if r3
|
721
|
+
s2 << r3
|
722
|
+
else
|
723
|
+
break
|
724
|
+
end
|
725
|
+
end
|
726
|
+
if s2.empty?
|
727
|
+
@index = i2
|
728
|
+
r2 = nil
|
729
|
+
else
|
730
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
731
|
+
end
|
732
|
+
s0 << r2
|
733
|
+
if r2
|
734
|
+
r4 = _nt_descriptor_string
|
735
|
+
s0 << r4
|
736
|
+
if r4
|
737
|
+
s5, i5 = [], index
|
738
|
+
loop do
|
739
|
+
r6 = _nt_ws
|
740
|
+
if r6
|
741
|
+
s5 << r6
|
742
|
+
else
|
743
|
+
break
|
744
|
+
end
|
745
|
+
end
|
746
|
+
if s5.empty?
|
747
|
+
@index = i5
|
748
|
+
r5 = nil
|
749
|
+
else
|
750
|
+
r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
|
751
|
+
end
|
752
|
+
s0 << r5
|
753
|
+
end
|
754
|
+
end
|
755
|
+
end
|
756
|
+
if s0.last
|
757
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
758
|
+
r0.extend(Include0)
|
759
|
+
r0.extend(Include1)
|
760
|
+
else
|
761
|
+
@index = i0
|
762
|
+
r0 = nil
|
763
|
+
end
|
764
|
+
|
765
|
+
node_cache[:include][start_index] = r0
|
766
|
+
|
767
|
+
r0
|
768
|
+
end
|
769
|
+
|
770
|
+
module Override0
|
771
|
+
def statement_start
|
772
|
+
elements[0]
|
773
|
+
end
|
774
|
+
|
775
|
+
def descriptor_string
|
776
|
+
elements[2]
|
777
|
+
end
|
778
|
+
|
779
|
+
end
|
780
|
+
|
781
|
+
module Override1
|
782
|
+
def to_config_statement(build_state)
|
783
|
+
return build_state.new_override_statement(
|
784
|
+
statement_start, descriptor_string
|
785
|
+
)
|
786
|
+
end
|
787
|
+
end
|
788
|
+
|
789
|
+
def _nt_override
|
790
|
+
start_index = index
|
791
|
+
if node_cache[:override].has_key?(index)
|
792
|
+
cached = node_cache[:override][index]
|
793
|
+
if cached
|
794
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
795
|
+
@index = cached.interval.end
|
796
|
+
end
|
797
|
+
return cached
|
798
|
+
end
|
799
|
+
|
800
|
+
i0, s0 = index, []
|
801
|
+
if has_terminal?('override', false, index)
|
802
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
|
803
|
+
@index += 8
|
804
|
+
else
|
805
|
+
terminal_parse_failure('override')
|
806
|
+
r1 = nil
|
807
|
+
end
|
808
|
+
s0 << r1
|
809
|
+
if r1
|
810
|
+
s2, i2 = [], index
|
811
|
+
loop do
|
812
|
+
r3 = _nt_ws
|
813
|
+
if r3
|
814
|
+
s2 << r3
|
815
|
+
else
|
816
|
+
break
|
817
|
+
end
|
818
|
+
end
|
819
|
+
if s2.empty?
|
820
|
+
@index = i2
|
821
|
+
r2 = nil
|
822
|
+
else
|
823
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
824
|
+
end
|
825
|
+
s0 << r2
|
826
|
+
if r2
|
827
|
+
r4 = _nt_descriptor_string
|
828
|
+
s0 << r4
|
829
|
+
if r4
|
830
|
+
s5, i5 = [], index
|
831
|
+
loop do
|
832
|
+
r6 = _nt_ws
|
833
|
+
if r6
|
834
|
+
s5 << r6
|
835
|
+
else
|
836
|
+
break
|
837
|
+
end
|
838
|
+
end
|
839
|
+
if s5.empty?
|
840
|
+
@index = i5
|
841
|
+
r5 = nil
|
842
|
+
else
|
843
|
+
r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
|
844
|
+
end
|
845
|
+
s0 << r5
|
846
|
+
end
|
847
|
+
end
|
848
|
+
end
|
849
|
+
if s0.last
|
850
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
851
|
+
r0.extend(Override0)
|
852
|
+
r0.extend(Override1)
|
853
|
+
else
|
854
|
+
@index = i0
|
855
|
+
r0 = nil
|
856
|
+
end
|
857
|
+
|
858
|
+
node_cache[:override][start_index] = r0
|
859
|
+
|
860
|
+
r0
|
861
|
+
end
|
862
|
+
|
863
|
+
module Path0
|
864
|
+
def statement_start
|
865
|
+
elements[0]
|
866
|
+
end
|
867
|
+
|
868
|
+
def name_value
|
869
|
+
elements[2]
|
870
|
+
end
|
871
|
+
|
872
|
+
end
|
873
|
+
|
874
|
+
module Path1
|
875
|
+
def to_config_statement(build_state)
|
876
|
+
return build_state.new_environment_variable_statement(
|
877
|
+
Statement::Path, statement_start, name_value
|
878
|
+
)
|
879
|
+
end
|
880
|
+
end
|
881
|
+
|
882
|
+
def _nt_path
|
883
|
+
start_index = index
|
884
|
+
if node_cache[:path].has_key?(index)
|
885
|
+
cached = node_cache[:path][index]
|
886
|
+
if cached
|
887
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
888
|
+
@index = cached.interval.end
|
889
|
+
end
|
890
|
+
return cached
|
891
|
+
end
|
892
|
+
|
893
|
+
i0, s0 = index, []
|
894
|
+
i1 = index
|
895
|
+
if has_terminal?('add', false, index)
|
896
|
+
r2 = instantiate_node(SyntaxNode,input, index...(index + 3))
|
897
|
+
@index += 3
|
898
|
+
else
|
899
|
+
terminal_parse_failure('add')
|
900
|
+
r2 = nil
|
901
|
+
end
|
902
|
+
if r2
|
903
|
+
r1 = r2
|
904
|
+
else
|
905
|
+
if has_terminal?('append', false, index)
|
906
|
+
r3 = instantiate_node(SyntaxNode,input, index...(index + 6))
|
907
|
+
@index += 6
|
908
|
+
else
|
909
|
+
terminal_parse_failure('append')
|
910
|
+
r3 = nil
|
911
|
+
end
|
912
|
+
if r3
|
913
|
+
r1 = r3
|
914
|
+
else
|
915
|
+
if has_terminal?('path', false, index)
|
916
|
+
r4 = instantiate_node(SyntaxNode,input, index...(index + 4))
|
917
|
+
@index += 4
|
918
|
+
else
|
919
|
+
terminal_parse_failure('path')
|
920
|
+
r4 = nil
|
921
|
+
end
|
922
|
+
if r4
|
923
|
+
r1 = r4
|
924
|
+
else
|
925
|
+
@index = i1
|
926
|
+
r1 = nil
|
927
|
+
end
|
928
|
+
end
|
929
|
+
end
|
930
|
+
s0 << r1
|
931
|
+
if r1
|
932
|
+
s5, i5 = [], index
|
933
|
+
loop do
|
934
|
+
r6 = _nt_ws
|
935
|
+
if r6
|
936
|
+
s5 << r6
|
937
|
+
else
|
938
|
+
break
|
939
|
+
end
|
940
|
+
end
|
941
|
+
if s5.empty?
|
942
|
+
@index = i5
|
943
|
+
r5 = nil
|
944
|
+
else
|
945
|
+
r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
|
946
|
+
end
|
947
|
+
s0 << r5
|
948
|
+
if r5
|
949
|
+
s7, i7 = [], index
|
950
|
+
loop do
|
951
|
+
if has_terminal?('\G[\\S]', true, index)
|
952
|
+
r8 = true
|
953
|
+
@index += 1
|
954
|
+
else
|
955
|
+
r8 = nil
|
956
|
+
end
|
957
|
+
if r8
|
958
|
+
s7 << r8
|
959
|
+
else
|
960
|
+
break
|
961
|
+
end
|
962
|
+
end
|
963
|
+
if s7.empty?
|
964
|
+
@index = i7
|
965
|
+
r7 = nil
|
966
|
+
else
|
967
|
+
r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
|
968
|
+
end
|
969
|
+
s0 << r7
|
970
|
+
if r7
|
971
|
+
s9, i9 = [], index
|
972
|
+
loop do
|
973
|
+
r10 = _nt_ws
|
974
|
+
if r10
|
975
|
+
s9 << r10
|
976
|
+
else
|
977
|
+
break
|
978
|
+
end
|
979
|
+
end
|
980
|
+
if s9.empty?
|
981
|
+
@index = i9
|
982
|
+
r9 = nil
|
983
|
+
else
|
984
|
+
r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
|
985
|
+
end
|
986
|
+
s0 << r9
|
987
|
+
end
|
988
|
+
end
|
989
|
+
end
|
990
|
+
if s0.last
|
991
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
992
|
+
r0.extend(Path0)
|
993
|
+
r0.extend(Path1)
|
994
|
+
else
|
995
|
+
@index = i0
|
996
|
+
r0 = nil
|
997
|
+
end
|
998
|
+
|
999
|
+
node_cache[:path][start_index] = r0
|
1000
|
+
|
1001
|
+
r0
|
1002
|
+
end
|
1003
|
+
|
1004
|
+
def _nt_environment_variable_name
|
1005
|
+
start_index = index
|
1006
|
+
if node_cache[:environment_variable_name].has_key?(index)
|
1007
|
+
cached = node_cache[:environment_variable_name][index]
|
1008
|
+
if cached
|
1009
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1010
|
+
@index = cached.interval.end
|
1011
|
+
end
|
1012
|
+
return cached
|
1013
|
+
end
|
1014
|
+
|
1015
|
+
s0, i0 = [], index
|
1016
|
+
loop do
|
1017
|
+
if has_terminal?('\G[a-zA-Z0-9_]', true, index)
|
1018
|
+
r1 = true
|
1019
|
+
@index += 1
|
1020
|
+
else
|
1021
|
+
r1 = nil
|
1022
|
+
end
|
1023
|
+
if r1
|
1024
|
+
s0 << r1
|
1025
|
+
else
|
1026
|
+
break
|
1027
|
+
end
|
1028
|
+
end
|
1029
|
+
if s0.empty?
|
1030
|
+
@index = i0
|
1031
|
+
r0 = nil
|
1032
|
+
else
|
1033
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
1034
|
+
end
|
1035
|
+
|
1036
|
+
node_cache[:environment_variable_name][start_index] = r0
|
1037
|
+
|
1038
|
+
r0
|
1039
|
+
end
|
1040
|
+
|
1041
|
+
module Set0
|
1042
|
+
def statement_start
|
1043
|
+
elements[0]
|
1044
|
+
end
|
1045
|
+
|
1046
|
+
def name_value
|
1047
|
+
elements[2]
|
1048
|
+
end
|
1049
|
+
|
1050
|
+
end
|
1051
|
+
|
1052
|
+
module Set1
|
1053
|
+
def to_config_statement(build_state)
|
1054
|
+
return build_state.new_environment_variable_statement(
|
1055
|
+
Statement::Set, statement_start, name_value
|
1056
|
+
)
|
1057
|
+
end
|
1058
|
+
end
|
1059
|
+
|
1060
|
+
def _nt_set
|
1061
|
+
start_index = index
|
1062
|
+
if node_cache[:set].has_key?(index)
|
1063
|
+
cached = node_cache[:set][index]
|
1064
|
+
if cached
|
1065
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1066
|
+
@index = cached.interval.end
|
1067
|
+
end
|
1068
|
+
return cached
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
i0, s0 = index, []
|
1072
|
+
if has_terminal?('set', false, index)
|
1073
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
|
1074
|
+
@index += 3
|
1075
|
+
else
|
1076
|
+
terminal_parse_failure('set')
|
1077
|
+
r1 = nil
|
1078
|
+
end
|
1079
|
+
s0 << r1
|
1080
|
+
if r1
|
1081
|
+
s2, i2 = [], index
|
1082
|
+
loop do
|
1083
|
+
r3 = _nt_ws
|
1084
|
+
if r3
|
1085
|
+
s2 << r3
|
1086
|
+
else
|
1087
|
+
break
|
1088
|
+
end
|
1089
|
+
end
|
1090
|
+
if s2.empty?
|
1091
|
+
@index = i2
|
1092
|
+
r2 = nil
|
1093
|
+
else
|
1094
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
1095
|
+
end
|
1096
|
+
s0 << r2
|
1097
|
+
if r2
|
1098
|
+
s4, i4 = [], index
|
1099
|
+
loop do
|
1100
|
+
if has_terminal?('\G[\\S]', true, index)
|
1101
|
+
r5 = true
|
1102
|
+
@index += 1
|
1103
|
+
else
|
1104
|
+
r5 = nil
|
1105
|
+
end
|
1106
|
+
if r5
|
1107
|
+
s4 << r5
|
1108
|
+
else
|
1109
|
+
break
|
1110
|
+
end
|
1111
|
+
end
|
1112
|
+
if s4.empty?
|
1113
|
+
@index = i4
|
1114
|
+
r4 = nil
|
1115
|
+
else
|
1116
|
+
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
|
1117
|
+
end
|
1118
|
+
s0 << r4
|
1119
|
+
if r4
|
1120
|
+
s6, i6 = [], index
|
1121
|
+
loop do
|
1122
|
+
r7 = _nt_ws
|
1123
|
+
if r7
|
1124
|
+
s6 << r7
|
1125
|
+
else
|
1126
|
+
break
|
1127
|
+
end
|
1128
|
+
end
|
1129
|
+
if s6.empty?
|
1130
|
+
@index = i6
|
1131
|
+
r6 = nil
|
1132
|
+
else
|
1133
|
+
r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
|
1134
|
+
end
|
1135
|
+
s0 << r6
|
1136
|
+
end
|
1137
|
+
end
|
1138
|
+
end
|
1139
|
+
if s0.last
|
1140
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
1141
|
+
r0.extend(Set0)
|
1142
|
+
r0.extend(Set1)
|
1143
|
+
else
|
1144
|
+
@index = i0
|
1145
|
+
r0 = nil
|
1146
|
+
end
|
1147
|
+
|
1148
|
+
node_cache[:set][start_index] = r0
|
1149
|
+
|
1150
|
+
r0
|
1151
|
+
end
|
1152
|
+
|
1153
|
+
module Command0
|
1154
|
+
def statement_start
|
1155
|
+
elements[0]
|
1156
|
+
end
|
1157
|
+
|
1158
|
+
def string
|
1159
|
+
elements[2]
|
1160
|
+
end
|
1161
|
+
|
1162
|
+
end
|
1163
|
+
|
1164
|
+
module Command1
|
1165
|
+
def to_config_statement(build_state)
|
1166
|
+
return build_state.new_command_statement(statement_start, string)
|
1167
|
+
end
|
1168
|
+
end
|
1169
|
+
|
1170
|
+
def _nt_command
|
1171
|
+
start_index = index
|
1172
|
+
if node_cache[:command].has_key?(index)
|
1173
|
+
cached = node_cache[:command][index]
|
1174
|
+
if cached
|
1175
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1176
|
+
@index = cached.interval.end
|
1177
|
+
end
|
1178
|
+
return cached
|
1179
|
+
end
|
1180
|
+
|
1181
|
+
i0, s0 = index, []
|
1182
|
+
if has_terminal?('command', false, index)
|
1183
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
|
1184
|
+
@index += 7
|
1185
|
+
else
|
1186
|
+
terminal_parse_failure('command')
|
1187
|
+
r1 = nil
|
1188
|
+
end
|
1189
|
+
s0 << r1
|
1190
|
+
if r1
|
1191
|
+
s2, i2 = [], index
|
1192
|
+
loop do
|
1193
|
+
r3 = _nt_ws
|
1194
|
+
if r3
|
1195
|
+
s2 << r3
|
1196
|
+
else
|
1197
|
+
break
|
1198
|
+
end
|
1199
|
+
end
|
1200
|
+
if s2.empty?
|
1201
|
+
@index = i2
|
1202
|
+
r2 = nil
|
1203
|
+
else
|
1204
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
1205
|
+
end
|
1206
|
+
s0 << r2
|
1207
|
+
if r2
|
1208
|
+
r4 = _nt_string
|
1209
|
+
s0 << r4
|
1210
|
+
if r4
|
1211
|
+
s5, i5 = [], index
|
1212
|
+
loop do
|
1213
|
+
r6 = _nt_ws
|
1214
|
+
if r6
|
1215
|
+
s5 << r6
|
1216
|
+
else
|
1217
|
+
break
|
1218
|
+
end
|
1219
|
+
end
|
1220
|
+
if s5.empty?
|
1221
|
+
@index = i5
|
1222
|
+
r5 = nil
|
1223
|
+
else
|
1224
|
+
r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
|
1225
|
+
end
|
1226
|
+
s0 << r5
|
1227
|
+
end
|
1228
|
+
end
|
1229
|
+
end
|
1230
|
+
if s0.last
|
1231
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
1232
|
+
r0.extend(Command0)
|
1233
|
+
r0.extend(Command1)
|
1234
|
+
else
|
1235
|
+
@index = i0
|
1236
|
+
r0 = nil
|
1237
|
+
end
|
1238
|
+
|
1239
|
+
node_cache[:command][start_index] = r0
|
1240
|
+
|
1241
|
+
r0
|
1242
|
+
end
|
1243
|
+
|
1244
|
+
module String0
|
1245
|
+
def value
|
1246
|
+
elements[1]
|
1247
|
+
end
|
1248
|
+
|
1249
|
+
end
|
1250
|
+
|
1251
|
+
def _nt_string
|
1252
|
+
start_index = index
|
1253
|
+
if node_cache[:string].has_key?(index)
|
1254
|
+
cached = node_cache[:string][index]
|
1255
|
+
if cached
|
1256
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1257
|
+
@index = cached.interval.end
|
1258
|
+
end
|
1259
|
+
return cached
|
1260
|
+
end
|
1261
|
+
|
1262
|
+
i0, s0 = index, []
|
1263
|
+
if has_terminal?('"', false, index)
|
1264
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
1265
|
+
@index += 1
|
1266
|
+
else
|
1267
|
+
terminal_parse_failure('"')
|
1268
|
+
r1 = nil
|
1269
|
+
end
|
1270
|
+
s0 << r1
|
1271
|
+
if r1
|
1272
|
+
s2, i2 = [], index
|
1273
|
+
loop do
|
1274
|
+
if has_terminal?('\G[^"]', true, index)
|
1275
|
+
r3 = true
|
1276
|
+
@index += 1
|
1277
|
+
else
|
1278
|
+
r3 = nil
|
1279
|
+
end
|
1280
|
+
if r3
|
1281
|
+
s2 << r3
|
1282
|
+
else
|
1283
|
+
break
|
1284
|
+
end
|
1285
|
+
end
|
1286
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
1287
|
+
s0 << r2
|
1288
|
+
if r2
|
1289
|
+
if has_terminal?('"', false, index)
|
1290
|
+
r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
1291
|
+
@index += 1
|
1292
|
+
else
|
1293
|
+
terminal_parse_failure('"')
|
1294
|
+
r4 = nil
|
1295
|
+
end
|
1296
|
+
s0 << r4
|
1297
|
+
end
|
1298
|
+
end
|
1299
|
+
if s0.last
|
1300
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
1301
|
+
r0.extend(String0)
|
1302
|
+
else
|
1303
|
+
@index = i0
|
1304
|
+
r0 = nil
|
1305
|
+
end
|
1306
|
+
|
1307
|
+
node_cache[:string][start_index] = r0
|
1308
|
+
|
1309
|
+
r0
|
1310
|
+
end
|
1311
|
+
|
1312
|
+
def _nt_descriptor_string
|
1313
|
+
start_index = index
|
1314
|
+
if node_cache[:descriptor_string].has_key?(index)
|
1315
|
+
cached = node_cache[:descriptor_string][index]
|
1316
|
+
if cached
|
1317
|
+
cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
1318
|
+
@index = cached.interval.end
|
1319
|
+
end
|
1320
|
+
return cached
|
1321
|
+
end
|
1322
|
+
|
1323
|
+
s0, i0 = [], index
|
1324
|
+
loop do
|
1325
|
+
if has_terminal?('\G[\\S]', true, index)
|
1326
|
+
r1 = true
|
1327
|
+
@index += 1
|
1328
|
+
else
|
1329
|
+
r1 = nil
|
1330
|
+
end
|
1331
|
+
if r1
|
1332
|
+
s0 << r1
|
1333
|
+
else
|
1334
|
+
break
|
1335
|
+
end
|
1336
|
+
end
|
1337
|
+
if s0.empty?
|
1338
|
+
@index = i0
|
1339
|
+
r0 = nil
|
1340
|
+
else
|
1341
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
1342
|
+
end
|
1343
|
+
|
1344
|
+
node_cache[:descriptor_string][start_index] = r0
|
1345
|
+
|
1346
|
+
r0
|
1347
|
+
end
|
1348
|
+
|
1349
|
+
end
|
1350
|
+
|
1351
|
+
class V0IshParser < Treetop::Runtime::CompiledParser
|
1352
|
+
include V0Ish
|
1353
|
+
end
|
1354
|
+
|
1355
|
+
end
|
1356
|
+
end
|