fig 1.1.0 → 1.2.0

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.
Files changed (46) hide show
  1. data/Changes +94 -0
  2. data/lib/fig.rb +1 -1
  3. data/lib/fig/command.rb +18 -7
  4. data/lib/fig/command/action/dump_package_definition_for_command_line.rb +2 -2
  5. data/lib/fig/command/action/dump_package_definition_parsed.rb +2 -2
  6. data/lib/fig/command/action/dump_package_definition_text.rb +2 -2
  7. data/lib/fig/command/action/source_package.rb +65 -0
  8. data/lib/fig/command/options.rb +64 -15
  9. data/lib/fig/command/options/parser.rb +24 -14
  10. data/lib/fig/command/package_applier.rb +32 -7
  11. data/lib/fig/command/package_loader.rb +16 -7
  12. data/lib/fig/external_program.rb +72 -0
  13. data/lib/fig/figrc.rb +1 -1
  14. data/lib/fig/grammar/v0.rb +2 -2
  15. data/lib/fig/grammar/v0.treetop +2 -2
  16. data/lib/fig/grammar/v1.rb +17 -1737
  17. data/lib/fig/grammar/v1.treetop +6 -217
  18. data/lib/fig/grammar/v1_base.rb +1750 -0
  19. data/lib/fig/grammar/v1_base.treetop +229 -0
  20. data/lib/fig/grammar/v2.rb +508 -0
  21. data/lib/fig/grammar/v2.treetop +65 -0
  22. data/lib/fig/grammar_monkey_patches.rb +7 -0
  23. data/lib/fig/no_such_package_config_error.rb +3 -1
  24. data/lib/fig/not_yet_parsed_package.rb +27 -0
  25. data/lib/fig/operating_system.rb +5 -5
  26. data/lib/fig/package.rb +20 -2
  27. data/lib/fig/package_definition_text_assembler.rb +2 -1
  28. data/lib/fig/package_descriptor.rb +11 -4
  29. data/lib/fig/parser.rb +44 -58
  30. data/lib/fig/parser_package_build_state.rb +39 -4
  31. data/lib/fig/protocol/file.rb +2 -2
  32. data/lib/fig/protocol/ftp.rb +15 -10
  33. data/lib/fig/protocol/http.rb +1 -1
  34. data/lib/fig/protocol/netrc_enabled.rb +29 -16
  35. data/lib/fig/protocol/sftp.rb +19 -12
  36. data/lib/fig/repository.rb +33 -21
  37. data/lib/fig/repository_package_publisher.rb +129 -8
  38. data/lib/fig/runtime_environment.rb +114 -28
  39. data/lib/fig/statement/include.rb +21 -4
  40. data/lib/fig/statement/include_file.rb +94 -0
  41. data/lib/fig/unparser.rb +15 -7
  42. data/lib/fig/unparser/v1.rb +2 -80
  43. data/lib/fig/unparser/v1_base.rb +85 -0
  44. data/lib/fig/unparser/v2.rb +55 -0
  45. data/lib/fig/working_directory_maintainer.rb +12 -0
  46. metadata +61 -51
@@ -1,17 +1,10 @@
1
1
  # Treetop (http://treetop.rubyforge.org/) grammar for package definitions in v1
2
2
  # format.
3
3
 
4
- # Some aspects of this grammar are significantly dumber than they could be
5
- # because:
6
- #
7
- # * We want to treat statements as identically as possible to their
8
- # command-line equivalents.
9
- # * Treetop parse errors are pretty inscrutable at times and we can make
10
- # error messages clearer by validating a lot of the terminals ourselves.
11
-
12
4
  require 'treetop'
13
5
 
14
6
  require 'fig/grammar/base'
7
+ require 'fig/grammar/v1_base'
15
8
  require 'fig/grammar/version'
16
9
 
17
10
  module Fig
@@ -19,231 +12,27 @@ module Fig
19
12
  grammar V1
20
13
  include Fig::Grammar::Base
21
14
  include Fig::Grammar::Version
15
+ include Fig::Grammar::V1Base
22
16
 
17
+ # It would nice to be able to put this into Fig::Grammar::V1Base, but it
18
+ # looks like the root has to be declared in the concrete grammar.
23
19
  rule package
24
20
  optional_ws_or_comment
25
21
  grammar_version:grammar_version?
26
22
  statements:(package_statement_with_ws*)
27
23
  optional_ws_or_comment
28
24
  {
29
- def to_package(directory, build_state)
25
+ def to_package(unparsed_package, build_state)
30
26
  return build_state.new_package_statement(
31
- directory, grammar_version, statements
32
- )
33
- end
34
- }
35
- end
36
-
37
- # Shim between "package" and "package_statement" rules to allow the
38
- # compiled v0 and v1 grammars to have the same interface.
39
- rule package_statement_with_ws
40
- package_statement:package_statement ws_or_comment+ {
41
- def to_package_statement(build_state)
42
- return package_statement.to_package_statement(build_state)
43
- end
44
- }
45
- end
46
-
47
- rule package_statement
48
- archive / resource / retrieve / config
49
- end
50
-
51
- rule archive
52
- statement_start:'archive'
53
- ws_or_comment+
54
- location:quoted_or_bare_string
55
- {
56
- def to_package_statement(build_state)
57
- return build_state.new_asset_statement(
58
- Statement::Archive, statement_start, location
59
- )
60
- end
61
- }
62
- end
63
-
64
- rule resource
65
- statement_start:'resource'
66
- ws_or_comment+
67
- location:quoted_or_bare_string
68
- {
69
- def to_package_statement(build_state)
70
- return build_state.new_asset_statement(
71
- Statement::Resource, statement_start, location
72
- )
73
- end
74
- }
75
- end
76
-
77
- rule retrieve
78
- statement_start:'retrieve'
79
- ws_or_comment+
80
- variable:environment_variable_name '->' path:quoted_or_bare_string
81
- {
82
- def to_package_statement(build_state)
83
- return build_state.new_retrieve_statement(
84
- statement_start, variable, path
27
+ unparsed_package, grammar_version, statements
85
28
  )
86
29
  end
87
30
  }
88
31
  end
89
32
 
90
- rule config
91
- statement_start:'config'
92
- ws_or_comment+
93
- config_name
94
- ws_or_comment+
95
- statements:config_statement_with_ws*
96
- 'end'
97
- {
98
- def to_package_statement(build_state)
99
- return build_state.new_configuration_statement(
100
- statement_start, config_name, statements
101
- )
102
- end
103
- }
104
- end
105
-
106
- # Shim between "config" and "config_statement" rules to allow the
107
- # compiled v0 and v1 grammars to have the same interface.
108
- rule config_statement_with_ws
109
- config_statement:config_statement ws_or_comment+ {
110
- def to_config_statement(build_state)
111
- return config_statement.to_config_statement(build_state)
112
- end
113
- }
114
- end
115
-
116
33
  rule config_statement
117
34
  override / include / command / path / set
118
35
  end
119
-
120
- rule include
121
- statement_start:'include' ws_or_comment+ descriptor_string {
122
- def to_config_statement(build_state)
123
- return build_state.new_include_statement(
124
- statement_start, descriptor_string
125
- )
126
- end
127
- }
128
- end
129
-
130
- rule override
131
- statement_start:'override' ws_or_comment+ descriptor_string {
132
- def to_config_statement(build_state)
133
- return build_state.new_override_statement(
134
- statement_start, descriptor_string
135
- )
136
- end
137
- }
138
- end
139
-
140
- rule set
141
- statement_start:'set' ws_or_comment+ environment_variable_name_value {
142
- def to_config_statement(build_state)
143
- return build_state.new_environment_variable_statement(
144
- Statement::Set, statement_start, environment_variable_name_value
145
- )
146
- end
147
- }
148
- end
149
-
150
- rule path
151
- statement_start:('add' / 'append' / 'path')
152
- ws_or_comment+
153
- environment_variable_name_value
154
- {
155
- def to_config_statement(build_state)
156
- return build_state.new_environment_variable_statement(
157
- Statement::Path, statement_start, environment_variable_name_value
158
- )
159
- end
160
- }
161
- end
162
-
163
- rule command
164
- statement_start:'command'
165
- ws_or_comment+
166
- command_line
167
- ws_or_comment+
168
- 'end'
169
- {
170
- def to_config_statement(build_state)
171
- return build_state.new_v1_command_statement(
172
- statement_start, gather_command_argument_nodes(command_line)
173
- )
174
- end
175
-
176
- def gather_command_argument_nodes(node, arguments = [])
177
- if node.respond_to? 'quoted_or_bare_string?'
178
- arguments << node
179
- return arguments
180
- end
181
-
182
- return arguments if not node.elements
183
-
184
- node.elements.each do
185
- |element|
186
- gather_command_argument_nodes(element, arguments)
187
- end
188
-
189
- return arguments
190
- end
191
- }
192
- end
193
-
194
- rule command_line
195
- quoted_or_bare_string
196
- ! { |sequence| sequence[-1].text_value == 'end' }
197
- (
198
- ws_or_comment+
199
- quoted_or_bare_string
200
- ! { |sequence| sequence[-1].text_value == 'end' }
201
- )*
202
- end
203
-
204
- # Terminals
205
-
206
- rule descriptor_string
207
- [^\s#]+
208
- end
209
-
210
- rule config_name
211
- [a-zA-Z0-9_.-]+
212
- end
213
-
214
- rule quoted_or_bare_string
215
- # In order to deal with the hierarchy of nodes that the command_line
216
- # rule above generates, we tag each of the expressions here so that
217
- # they can be found in the syntax tree.
218
- [^\s#\\"]* '"' ( [^"\\] / '\\' . )* '"'
219
- { def quoted_or_bare_string?() return true end }
220
-
221
- /
222
-
223
- [^\s#\\']* "'" ( [^'\\] / '\\' . )* "'"
224
- { def quoted_or_bare_string?() return true end }
225
-
226
- /
227
-
228
- [^\s#]+
229
- { def quoted_or_bare_string?() return true end }
230
- end
231
-
232
- rule environment_variable_name
233
- [a-zA-Z0-9_]+
234
- end
235
-
236
- rule environment_variable_name_value
237
- # This is like quoted_or_bare_string, but allows for the unquoted
238
- # variable name followed by equals sign prior to the quotation marks
239
- # coming in.
240
- #
241
- # Should result in somewhat reasonable handling by Treetop when
242
- # encountering mis-quoted constructs.
243
- [^\s#\\'"]* '"' ( [^"\\] / '\\' . )* '"' /
244
- [^\s#\\'"]* "'" ( [^'\\] / '\\' . )* "'" /
245
- [^\s#]+
246
- end
247
36
  end
248
37
  end
249
38
  end
@@ -0,0 +1,1750 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ # Reusable parts of Treetop (http://treetop.rubyforge.org/) grammar for package
5
+ # definitions in v1 format.
6
+
7
+ # Some aspects of this grammar are significantly dumber than they could be
8
+ # because:
9
+ #
10
+ # * We want to treat statements as identically as possible to their
11
+ # command-line equivalents.
12
+ # * Treetop parse errors are pretty inscrutable at times and we can make
13
+ # error messages clearer by validating a lot of the terminals ourselves.
14
+
15
+ require 'treetop'
16
+
17
+ module Fig
18
+ module Grammar
19
+ # Consumers of this need to mix in Fig::Grammar::Base and
20
+ # Fig::Grammar::Version and have a "rule config_statement".
21
+ module V1Base
22
+ include Treetop::Runtime
23
+
24
+ def root
25
+ @root ||= :package_statement_with_ws
26
+ end
27
+
28
+ module PackageStatementWithWs0
29
+ def package_statement
30
+ elements[0]
31
+ end
32
+
33
+ end
34
+
35
+ module PackageStatementWithWs1
36
+ def to_package_statement(build_state)
37
+ return package_statement.to_package_statement(build_state)
38
+ end
39
+ end
40
+
41
+ def _nt_package_statement_with_ws
42
+ start_index = index
43
+ if node_cache[:package_statement_with_ws].has_key?(index)
44
+ cached = node_cache[:package_statement_with_ws][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, s0 = index, []
53
+ r1 = _nt_package_statement
54
+ s0 << r1
55
+ if r1
56
+ s2, i2 = [], index
57
+ loop do
58
+ r3 = _nt_ws_or_comment
59
+ if r3
60
+ s2 << r3
61
+ else
62
+ break
63
+ end
64
+ end
65
+ if s2.empty?
66
+ @index = i2
67
+ r2 = nil
68
+ else
69
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
70
+ end
71
+ s0 << r2
72
+ end
73
+ if s0.last
74
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
75
+ r0.extend(PackageStatementWithWs0)
76
+ r0.extend(PackageStatementWithWs1)
77
+ else
78
+ @index = i0
79
+ r0 = nil
80
+ end
81
+
82
+ node_cache[:package_statement_with_ws][start_index] = r0
83
+
84
+ r0
85
+ end
86
+
87
+ def _nt_package_statement
88
+ start_index = index
89
+ if node_cache[:package_statement].has_key?(index)
90
+ cached = node_cache[:package_statement][index]
91
+ if cached
92
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
93
+ @index = cached.interval.end
94
+ end
95
+ return cached
96
+ end
97
+
98
+ i0 = index
99
+ r1 = _nt_archive
100
+ if r1
101
+ r0 = r1
102
+ else
103
+ r2 = _nt_resource
104
+ if r2
105
+ r0 = r2
106
+ else
107
+ r3 = _nt_retrieve
108
+ if r3
109
+ r0 = r3
110
+ else
111
+ r4 = _nt_config
112
+ if r4
113
+ r0 = r4
114
+ else
115
+ @index = i0
116
+ r0 = nil
117
+ end
118
+ end
119
+ end
120
+ end
121
+
122
+ node_cache[:package_statement][start_index] = r0
123
+
124
+ r0
125
+ end
126
+
127
+ module Archive0
128
+ def statement_start
129
+ elements[0]
130
+ end
131
+
132
+ def location
133
+ elements[2]
134
+ end
135
+ end
136
+
137
+ module Archive1
138
+ def to_package_statement(build_state)
139
+ return build_state.new_asset_statement(
140
+ Statement::Archive, statement_start, location
141
+ )
142
+ end
143
+ end
144
+
145
+ def _nt_archive
146
+ start_index = index
147
+ if node_cache[:archive].has_key?(index)
148
+ cached = node_cache[:archive][index]
149
+ if cached
150
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
151
+ @index = cached.interval.end
152
+ end
153
+ return cached
154
+ end
155
+
156
+ i0, s0 = index, []
157
+ if has_terminal?('archive', false, index)
158
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
159
+ @index += 7
160
+ else
161
+ terminal_parse_failure('archive')
162
+ r1 = nil
163
+ end
164
+ s0 << r1
165
+ if r1
166
+ s2, i2 = [], index
167
+ loop do
168
+ r3 = _nt_ws_or_comment
169
+ if r3
170
+ s2 << r3
171
+ else
172
+ break
173
+ end
174
+ end
175
+ if s2.empty?
176
+ @index = i2
177
+ r2 = nil
178
+ else
179
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
180
+ end
181
+ s0 << r2
182
+ if r2
183
+ r4 = _nt_quoted_or_bare_string
184
+ s0 << r4
185
+ end
186
+ end
187
+ if s0.last
188
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
189
+ r0.extend(Archive0)
190
+ r0.extend(Archive1)
191
+ else
192
+ @index = i0
193
+ r0 = nil
194
+ end
195
+
196
+ node_cache[:archive][start_index] = r0
197
+
198
+ r0
199
+ end
200
+
201
+ module Resource0
202
+ def statement_start
203
+ elements[0]
204
+ end
205
+
206
+ def location
207
+ elements[2]
208
+ end
209
+ end
210
+
211
+ module Resource1
212
+ def to_package_statement(build_state)
213
+ return build_state.new_asset_statement(
214
+ Statement::Resource, statement_start, location
215
+ )
216
+ end
217
+ end
218
+
219
+ def _nt_resource
220
+ start_index = index
221
+ if node_cache[:resource].has_key?(index)
222
+ cached = node_cache[:resource][index]
223
+ if cached
224
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
225
+ @index = cached.interval.end
226
+ end
227
+ return cached
228
+ end
229
+
230
+ i0, s0 = index, []
231
+ if has_terminal?('resource', false, index)
232
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
233
+ @index += 8
234
+ else
235
+ terminal_parse_failure('resource')
236
+ r1 = nil
237
+ end
238
+ s0 << r1
239
+ if r1
240
+ s2, i2 = [], index
241
+ loop do
242
+ r3 = _nt_ws_or_comment
243
+ if r3
244
+ s2 << r3
245
+ else
246
+ break
247
+ end
248
+ end
249
+ if s2.empty?
250
+ @index = i2
251
+ r2 = nil
252
+ else
253
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
254
+ end
255
+ s0 << r2
256
+ if r2
257
+ r4 = _nt_quoted_or_bare_string
258
+ s0 << r4
259
+ end
260
+ end
261
+ if s0.last
262
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
263
+ r0.extend(Resource0)
264
+ r0.extend(Resource1)
265
+ else
266
+ @index = i0
267
+ r0 = nil
268
+ end
269
+
270
+ node_cache[:resource][start_index] = r0
271
+
272
+ r0
273
+ end
274
+
275
+ module Retrieve0
276
+ def statement_start
277
+ elements[0]
278
+ end
279
+
280
+ def variable
281
+ elements[2]
282
+ end
283
+
284
+ def path
285
+ elements[4]
286
+ end
287
+ end
288
+
289
+ module Retrieve1
290
+ def to_package_statement(build_state)
291
+ return build_state.new_retrieve_statement(
292
+ statement_start, variable, path
293
+ )
294
+ end
295
+ end
296
+
297
+ def _nt_retrieve
298
+ start_index = index
299
+ if node_cache[:retrieve].has_key?(index)
300
+ cached = node_cache[:retrieve][index]
301
+ if cached
302
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
303
+ @index = cached.interval.end
304
+ end
305
+ return cached
306
+ end
307
+
308
+ i0, s0 = index, []
309
+ if has_terminal?('retrieve', false, index)
310
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
311
+ @index += 8
312
+ else
313
+ terminal_parse_failure('retrieve')
314
+ r1 = nil
315
+ end
316
+ s0 << r1
317
+ if r1
318
+ s2, i2 = [], index
319
+ loop do
320
+ r3 = _nt_ws_or_comment
321
+ if r3
322
+ s2 << r3
323
+ else
324
+ break
325
+ end
326
+ end
327
+ if s2.empty?
328
+ @index = i2
329
+ r2 = nil
330
+ else
331
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
332
+ end
333
+ s0 << r2
334
+ if r2
335
+ r4 = _nt_environment_variable_name
336
+ s0 << r4
337
+ if r4
338
+ if has_terminal?('->', false, index)
339
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 2))
340
+ @index += 2
341
+ else
342
+ terminal_parse_failure('->')
343
+ r5 = nil
344
+ end
345
+ s0 << r5
346
+ if r5
347
+ r6 = _nt_quoted_or_bare_string
348
+ s0 << r6
349
+ end
350
+ end
351
+ end
352
+ end
353
+ if s0.last
354
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
355
+ r0.extend(Retrieve0)
356
+ r0.extend(Retrieve1)
357
+ else
358
+ @index = i0
359
+ r0 = nil
360
+ end
361
+
362
+ node_cache[:retrieve][start_index] = r0
363
+
364
+ r0
365
+ end
366
+
367
+ module Config0
368
+ def statement_start
369
+ elements[0]
370
+ end
371
+
372
+ def config_name
373
+ elements[2]
374
+ end
375
+
376
+ def statements
377
+ elements[4]
378
+ end
379
+
380
+ end
381
+
382
+ module Config1
383
+ def to_package_statement(build_state)
384
+ return build_state.new_configuration_statement(
385
+ statement_start, config_name, statements
386
+ )
387
+ end
388
+ end
389
+
390
+ def _nt_config
391
+ start_index = index
392
+ if node_cache[:config].has_key?(index)
393
+ cached = node_cache[:config][index]
394
+ if cached
395
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
396
+ @index = cached.interval.end
397
+ end
398
+ return cached
399
+ end
400
+
401
+ i0, s0 = index, []
402
+ if has_terminal?('config', false, index)
403
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 6))
404
+ @index += 6
405
+ else
406
+ terminal_parse_failure('config')
407
+ r1 = nil
408
+ end
409
+ s0 << r1
410
+ if r1
411
+ s2, i2 = [], index
412
+ loop do
413
+ r3 = _nt_ws_or_comment
414
+ if r3
415
+ s2 << r3
416
+ else
417
+ break
418
+ end
419
+ end
420
+ if s2.empty?
421
+ @index = i2
422
+ r2 = nil
423
+ else
424
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
425
+ end
426
+ s0 << r2
427
+ if r2
428
+ r4 = _nt_config_name
429
+ s0 << r4
430
+ if r4
431
+ s5, i5 = [], index
432
+ loop do
433
+ r6 = _nt_ws_or_comment
434
+ if r6
435
+ s5 << r6
436
+ else
437
+ break
438
+ end
439
+ end
440
+ if s5.empty?
441
+ @index = i5
442
+ r5 = nil
443
+ else
444
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
445
+ end
446
+ s0 << r5
447
+ if r5
448
+ s7, i7 = [], index
449
+ loop do
450
+ r8 = _nt_config_statement_with_ws
451
+ if r8
452
+ s7 << r8
453
+ else
454
+ break
455
+ end
456
+ end
457
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
458
+ s0 << r7
459
+ if r7
460
+ if has_terminal?('end', false, index)
461
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 3))
462
+ @index += 3
463
+ else
464
+ terminal_parse_failure('end')
465
+ r9 = nil
466
+ end
467
+ s0 << r9
468
+ end
469
+ end
470
+ end
471
+ end
472
+ end
473
+ if s0.last
474
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
475
+ r0.extend(Config0)
476
+ r0.extend(Config1)
477
+ else
478
+ @index = i0
479
+ r0 = nil
480
+ end
481
+
482
+ node_cache[:config][start_index] = r0
483
+
484
+ r0
485
+ end
486
+
487
+ module ConfigStatementWithWs0
488
+ def config_statement
489
+ elements[0]
490
+ end
491
+
492
+ end
493
+
494
+ module ConfigStatementWithWs1
495
+ def to_config_statement(build_state)
496
+ return config_statement.to_config_statement(build_state)
497
+ end
498
+ end
499
+
500
+ def _nt_config_statement_with_ws
501
+ start_index = index
502
+ if node_cache[:config_statement_with_ws].has_key?(index)
503
+ cached = node_cache[:config_statement_with_ws][index]
504
+ if cached
505
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
506
+ @index = cached.interval.end
507
+ end
508
+ return cached
509
+ end
510
+
511
+ i0, s0 = index, []
512
+ r1 = _nt_config_statement
513
+ s0 << r1
514
+ if r1
515
+ s2, i2 = [], index
516
+ loop do
517
+ r3 = _nt_ws_or_comment
518
+ if r3
519
+ s2 << r3
520
+ else
521
+ break
522
+ end
523
+ end
524
+ if s2.empty?
525
+ @index = i2
526
+ r2 = nil
527
+ else
528
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
529
+ end
530
+ s0 << r2
531
+ end
532
+ if s0.last
533
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
534
+ r0.extend(ConfigStatementWithWs0)
535
+ r0.extend(ConfigStatementWithWs1)
536
+ else
537
+ @index = i0
538
+ r0 = nil
539
+ end
540
+
541
+ node_cache[:config_statement_with_ws][start_index] = r0
542
+
543
+ r0
544
+ end
545
+
546
+ module Include0
547
+ def statement_start
548
+ elements[0]
549
+ end
550
+
551
+ def descriptor_string
552
+ elements[2]
553
+ end
554
+ end
555
+
556
+ module Include1
557
+ def to_config_statement(build_state)
558
+ return build_state.new_include_statement(
559
+ statement_start, descriptor_string
560
+ )
561
+ end
562
+ end
563
+
564
+ def _nt_include
565
+ start_index = index
566
+ if node_cache[:include].has_key?(index)
567
+ cached = node_cache[:include][index]
568
+ if cached
569
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
570
+ @index = cached.interval.end
571
+ end
572
+ return cached
573
+ end
574
+
575
+ i0, s0 = index, []
576
+ if has_terminal?('include', false, index)
577
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
578
+ @index += 7
579
+ else
580
+ terminal_parse_failure('include')
581
+ r1 = nil
582
+ end
583
+ s0 << r1
584
+ if r1
585
+ s2, i2 = [], index
586
+ loop do
587
+ r3 = _nt_ws_or_comment
588
+ if r3
589
+ s2 << r3
590
+ else
591
+ break
592
+ end
593
+ end
594
+ if s2.empty?
595
+ @index = i2
596
+ r2 = nil
597
+ else
598
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
599
+ end
600
+ s0 << r2
601
+ if r2
602
+ r4 = _nt_descriptor_string
603
+ s0 << r4
604
+ end
605
+ end
606
+ if s0.last
607
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
608
+ r0.extend(Include0)
609
+ r0.extend(Include1)
610
+ else
611
+ @index = i0
612
+ r0 = nil
613
+ end
614
+
615
+ node_cache[:include][start_index] = r0
616
+
617
+ r0
618
+ end
619
+
620
+ module Override0
621
+ def statement_start
622
+ elements[0]
623
+ end
624
+
625
+ def descriptor_string
626
+ elements[2]
627
+ end
628
+ end
629
+
630
+ module Override1
631
+ def to_config_statement(build_state)
632
+ return build_state.new_override_statement(
633
+ statement_start, descriptor_string
634
+ )
635
+ end
636
+ end
637
+
638
+ def _nt_override
639
+ start_index = index
640
+ if node_cache[:override].has_key?(index)
641
+ cached = node_cache[:override][index]
642
+ if cached
643
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
644
+ @index = cached.interval.end
645
+ end
646
+ return cached
647
+ end
648
+
649
+ i0, s0 = index, []
650
+ if has_terminal?('override', false, index)
651
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
652
+ @index += 8
653
+ else
654
+ terminal_parse_failure('override')
655
+ r1 = nil
656
+ end
657
+ s0 << r1
658
+ if r1
659
+ s2, i2 = [], index
660
+ loop do
661
+ r3 = _nt_ws_or_comment
662
+ if r3
663
+ s2 << r3
664
+ else
665
+ break
666
+ end
667
+ end
668
+ if s2.empty?
669
+ @index = i2
670
+ r2 = nil
671
+ else
672
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
673
+ end
674
+ s0 << r2
675
+ if r2
676
+ r4 = _nt_descriptor_string
677
+ s0 << r4
678
+ end
679
+ end
680
+ if s0.last
681
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
682
+ r0.extend(Override0)
683
+ r0.extend(Override1)
684
+ else
685
+ @index = i0
686
+ r0 = nil
687
+ end
688
+
689
+ node_cache[:override][start_index] = r0
690
+
691
+ r0
692
+ end
693
+
694
+ module Set0
695
+ def statement_start
696
+ elements[0]
697
+ end
698
+
699
+ def environment_variable_name_value
700
+ elements[2]
701
+ end
702
+ end
703
+
704
+ module Set1
705
+ def to_config_statement(build_state)
706
+ return build_state.new_environment_variable_statement(
707
+ Statement::Set, statement_start, environment_variable_name_value
708
+ )
709
+ end
710
+ end
711
+
712
+ def _nt_set
713
+ start_index = index
714
+ if node_cache[:set].has_key?(index)
715
+ cached = node_cache[:set][index]
716
+ if cached
717
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
718
+ @index = cached.interval.end
719
+ end
720
+ return cached
721
+ end
722
+
723
+ i0, s0 = index, []
724
+ if has_terminal?('set', false, index)
725
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
726
+ @index += 3
727
+ else
728
+ terminal_parse_failure('set')
729
+ r1 = nil
730
+ end
731
+ s0 << r1
732
+ if r1
733
+ s2, i2 = [], index
734
+ loop do
735
+ r3 = _nt_ws_or_comment
736
+ if r3
737
+ s2 << r3
738
+ else
739
+ break
740
+ end
741
+ end
742
+ if s2.empty?
743
+ @index = i2
744
+ r2 = nil
745
+ else
746
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
747
+ end
748
+ s0 << r2
749
+ if r2
750
+ r4 = _nt_environment_variable_name_value
751
+ s0 << r4
752
+ end
753
+ end
754
+ if s0.last
755
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
756
+ r0.extend(Set0)
757
+ r0.extend(Set1)
758
+ else
759
+ @index = i0
760
+ r0 = nil
761
+ end
762
+
763
+ node_cache[:set][start_index] = r0
764
+
765
+ r0
766
+ end
767
+
768
+ module Path0
769
+ def statement_start
770
+ elements[0]
771
+ end
772
+
773
+ def environment_variable_name_value
774
+ elements[2]
775
+ end
776
+ end
777
+
778
+ module Path1
779
+ def to_config_statement(build_state)
780
+ return build_state.new_environment_variable_statement(
781
+ Statement::Path, statement_start, environment_variable_name_value
782
+ )
783
+ end
784
+ end
785
+
786
+ def _nt_path
787
+ start_index = index
788
+ if node_cache[:path].has_key?(index)
789
+ cached = node_cache[:path][index]
790
+ if cached
791
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
792
+ @index = cached.interval.end
793
+ end
794
+ return cached
795
+ end
796
+
797
+ i0, s0 = index, []
798
+ i1 = index
799
+ if has_terminal?('add', false, index)
800
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 3))
801
+ @index += 3
802
+ else
803
+ terminal_parse_failure('add')
804
+ r2 = nil
805
+ end
806
+ if r2
807
+ r1 = r2
808
+ else
809
+ if has_terminal?('append', false, index)
810
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 6))
811
+ @index += 6
812
+ else
813
+ terminal_parse_failure('append')
814
+ r3 = nil
815
+ end
816
+ if r3
817
+ r1 = r3
818
+ else
819
+ if has_terminal?('path', false, index)
820
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 4))
821
+ @index += 4
822
+ else
823
+ terminal_parse_failure('path')
824
+ r4 = nil
825
+ end
826
+ if r4
827
+ r1 = r4
828
+ else
829
+ @index = i1
830
+ r1 = nil
831
+ end
832
+ end
833
+ end
834
+ s0 << r1
835
+ if r1
836
+ s5, i5 = [], index
837
+ loop do
838
+ r6 = _nt_ws_or_comment
839
+ if r6
840
+ s5 << r6
841
+ else
842
+ break
843
+ end
844
+ end
845
+ if s5.empty?
846
+ @index = i5
847
+ r5 = nil
848
+ else
849
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
850
+ end
851
+ s0 << r5
852
+ if r5
853
+ r7 = _nt_environment_variable_name_value
854
+ s0 << r7
855
+ end
856
+ end
857
+ if s0.last
858
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
859
+ r0.extend(Path0)
860
+ r0.extend(Path1)
861
+ else
862
+ @index = i0
863
+ r0 = nil
864
+ end
865
+
866
+ node_cache[:path][start_index] = r0
867
+
868
+ r0
869
+ end
870
+
871
+ module Command0
872
+ def statement_start
873
+ elements[0]
874
+ end
875
+
876
+ def command_line
877
+ elements[2]
878
+ end
879
+
880
+ end
881
+
882
+ module Command1
883
+ def to_config_statement(build_state)
884
+ return build_state.new_v1_command_statement(
885
+ statement_start, gather_command_argument_nodes(command_line)
886
+ )
887
+ end
888
+
889
+ def gather_command_argument_nodes(node, arguments = [])
890
+ if node.respond_to? 'quoted_or_bare_string?'
891
+ arguments << node
892
+ return arguments
893
+ end
894
+
895
+ return arguments if not node.elements
896
+
897
+ node.elements.each do
898
+ |element|
899
+ gather_command_argument_nodes(element, arguments)
900
+ end
901
+
902
+ return arguments
903
+ end
904
+ end
905
+
906
+ def _nt_command
907
+ start_index = index
908
+ if node_cache[:command].has_key?(index)
909
+ cached = node_cache[:command][index]
910
+ if cached
911
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
912
+ @index = cached.interval.end
913
+ end
914
+ return cached
915
+ end
916
+
917
+ i0, s0 = index, []
918
+ if has_terminal?('command', false, index)
919
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
920
+ @index += 7
921
+ else
922
+ terminal_parse_failure('command')
923
+ r1 = nil
924
+ end
925
+ s0 << r1
926
+ if r1
927
+ s2, i2 = [], index
928
+ loop do
929
+ r3 = _nt_ws_or_comment
930
+ if r3
931
+ s2 << r3
932
+ else
933
+ break
934
+ end
935
+ end
936
+ if s2.empty?
937
+ @index = i2
938
+ r2 = nil
939
+ else
940
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
941
+ end
942
+ s0 << r2
943
+ if r2
944
+ r4 = _nt_command_line
945
+ s0 << r4
946
+ if r4
947
+ s5, i5 = [], index
948
+ loop do
949
+ r6 = _nt_ws_or_comment
950
+ if r6
951
+ s5 << r6
952
+ else
953
+ break
954
+ end
955
+ end
956
+ if s5.empty?
957
+ @index = i5
958
+ r5 = nil
959
+ else
960
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
961
+ end
962
+ s0 << r5
963
+ if r5
964
+ if has_terminal?('end', false, index)
965
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 3))
966
+ @index += 3
967
+ else
968
+ terminal_parse_failure('end')
969
+ r7 = nil
970
+ end
971
+ s0 << r7
972
+ end
973
+ end
974
+ end
975
+ end
976
+ if s0.last
977
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
978
+ r0.extend(Command0)
979
+ r0.extend(Command1)
980
+ else
981
+ @index = i0
982
+ r0 = nil
983
+ end
984
+
985
+ node_cache[:command][start_index] = r0
986
+
987
+ r0
988
+ end
989
+
990
+ module CommandLine0
991
+ def quoted_or_bare_string
992
+ elements[1]
993
+ end
994
+
995
+ end
996
+
997
+ module CommandLine1
998
+ def quoted_or_bare_string
999
+ elements[0]
1000
+ end
1001
+
1002
+ end
1003
+
1004
+ def _nt_command_line
1005
+ start_index = index
1006
+ if node_cache[:command_line].has_key?(index)
1007
+ cached = node_cache[:command_line][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
+ i0, s0 = index, []
1016
+ r1 = _nt_quoted_or_bare_string
1017
+ s0 << r1
1018
+ if r1
1019
+ i2 = index
1020
+ r3 = lambda { |sequence| sequence[-1].text_value == 'end' }.call(s0)
1021
+ if r3
1022
+ r2 = nil
1023
+ else
1024
+ @index = i2
1025
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1026
+ end
1027
+ s0 << r2
1028
+ if r2
1029
+ s4, i4 = [], index
1030
+ loop do
1031
+ i5, s5 = index, []
1032
+ s6, i6 = [], index
1033
+ loop do
1034
+ r7 = _nt_ws_or_comment
1035
+ if r7
1036
+ s6 << r7
1037
+ else
1038
+ break
1039
+ end
1040
+ end
1041
+ if s6.empty?
1042
+ @index = i6
1043
+ r6 = nil
1044
+ else
1045
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
1046
+ end
1047
+ s5 << r6
1048
+ if r6
1049
+ r8 = _nt_quoted_or_bare_string
1050
+ s5 << r8
1051
+ if r8
1052
+ i9 = index
1053
+ r10 = lambda { |sequence| sequence[-1].text_value == 'end' }.call(s5)
1054
+ if r10
1055
+ r9 = nil
1056
+ else
1057
+ @index = i9
1058
+ r9 = instantiate_node(SyntaxNode,input, index...index)
1059
+ end
1060
+ s5 << r9
1061
+ end
1062
+ end
1063
+ if s5.last
1064
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1065
+ r5.extend(CommandLine0)
1066
+ else
1067
+ @index = i5
1068
+ r5 = nil
1069
+ end
1070
+ if r5
1071
+ s4 << r5
1072
+ else
1073
+ break
1074
+ end
1075
+ end
1076
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1077
+ s0 << r4
1078
+ end
1079
+ end
1080
+ if s0.last
1081
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1082
+ r0.extend(CommandLine1)
1083
+ else
1084
+ @index = i0
1085
+ r0 = nil
1086
+ end
1087
+
1088
+ node_cache[:command_line][start_index] = r0
1089
+
1090
+ r0
1091
+ end
1092
+
1093
+ def _nt_descriptor_string
1094
+ start_index = index
1095
+ if node_cache[:descriptor_string].has_key?(index)
1096
+ cached = node_cache[:descriptor_string][index]
1097
+ if cached
1098
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1099
+ @index = cached.interval.end
1100
+ end
1101
+ return cached
1102
+ end
1103
+
1104
+ s0, i0 = [], index
1105
+ loop do
1106
+ if has_terminal?('\G[^\\s#]', true, index)
1107
+ r1 = true
1108
+ @index += 1
1109
+ else
1110
+ r1 = nil
1111
+ end
1112
+ if r1
1113
+ s0 << r1
1114
+ else
1115
+ break
1116
+ end
1117
+ end
1118
+ if s0.empty?
1119
+ @index = i0
1120
+ r0 = nil
1121
+ else
1122
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1123
+ end
1124
+
1125
+ node_cache[:descriptor_string][start_index] = r0
1126
+
1127
+ r0
1128
+ end
1129
+
1130
+ def _nt_config_name
1131
+ start_index = index
1132
+ if node_cache[:config_name].has_key?(index)
1133
+ cached = node_cache[:config_name][index]
1134
+ if cached
1135
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1136
+ @index = cached.interval.end
1137
+ end
1138
+ return cached
1139
+ end
1140
+
1141
+ s0, i0 = [], index
1142
+ loop do
1143
+ if has_terminal?('\G[a-zA-Z0-9_.-]', true, index)
1144
+ r1 = true
1145
+ @index += 1
1146
+ else
1147
+ r1 = nil
1148
+ end
1149
+ if r1
1150
+ s0 << r1
1151
+ else
1152
+ break
1153
+ end
1154
+ end
1155
+ if s0.empty?
1156
+ @index = i0
1157
+ r0 = nil
1158
+ else
1159
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1160
+ end
1161
+
1162
+ node_cache[:config_name][start_index] = r0
1163
+
1164
+ r0
1165
+ end
1166
+
1167
+ module QuotedOrBareString0
1168
+ end
1169
+
1170
+ module QuotedOrBareString1
1171
+ end
1172
+
1173
+ module QuotedOrBareString2
1174
+ def quoted_or_bare_string?() return true end
1175
+ end
1176
+
1177
+ module QuotedOrBareString3
1178
+ end
1179
+
1180
+ module QuotedOrBareString4
1181
+ end
1182
+
1183
+ module QuotedOrBareString5
1184
+ def quoted_or_bare_string?() return true end
1185
+ end
1186
+
1187
+ module QuotedOrBareString6
1188
+ def quoted_or_bare_string?() return true end
1189
+ end
1190
+
1191
+ def _nt_quoted_or_bare_string
1192
+ start_index = index
1193
+ if node_cache[:quoted_or_bare_string].has_key?(index)
1194
+ cached = node_cache[:quoted_or_bare_string][index]
1195
+ if cached
1196
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1197
+ @index = cached.interval.end
1198
+ end
1199
+ return cached
1200
+ end
1201
+
1202
+ i0 = index
1203
+ i1, s1 = index, []
1204
+ s2, i2 = [], index
1205
+ loop do
1206
+ if has_terminal?('\G[^\\s#\\\\"]', true, index)
1207
+ r3 = true
1208
+ @index += 1
1209
+ else
1210
+ r3 = nil
1211
+ end
1212
+ if r3
1213
+ s2 << r3
1214
+ else
1215
+ break
1216
+ end
1217
+ end
1218
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1219
+ s1 << r2
1220
+ if r2
1221
+ if has_terminal?('"', false, index)
1222
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1223
+ @index += 1
1224
+ else
1225
+ terminal_parse_failure('"')
1226
+ r4 = nil
1227
+ end
1228
+ s1 << r4
1229
+ if r4
1230
+ s5, i5 = [], index
1231
+ loop do
1232
+ i6 = index
1233
+ if has_terminal?('\G[^"\\\\]', true, index)
1234
+ r7 = true
1235
+ @index += 1
1236
+ else
1237
+ r7 = nil
1238
+ end
1239
+ if r7
1240
+ r6 = r7
1241
+ else
1242
+ i8, s8 = index, []
1243
+ if has_terminal?('\\', false, index)
1244
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
1245
+ @index += 1
1246
+ else
1247
+ terminal_parse_failure('\\')
1248
+ r9 = nil
1249
+ end
1250
+ s8 << r9
1251
+ if r9
1252
+ if index < input_length
1253
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
1254
+ @index += 1
1255
+ else
1256
+ terminal_parse_failure("any character")
1257
+ r10 = nil
1258
+ end
1259
+ s8 << r10
1260
+ end
1261
+ if s8.last
1262
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1263
+ r8.extend(QuotedOrBareString0)
1264
+ else
1265
+ @index = i8
1266
+ r8 = nil
1267
+ end
1268
+ if r8
1269
+ r6 = r8
1270
+ else
1271
+ @index = i6
1272
+ r6 = nil
1273
+ end
1274
+ end
1275
+ if r6
1276
+ s5 << r6
1277
+ else
1278
+ break
1279
+ end
1280
+ end
1281
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1282
+ s1 << r5
1283
+ if r5
1284
+ if has_terminal?('"', false, index)
1285
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
1286
+ @index += 1
1287
+ else
1288
+ terminal_parse_failure('"')
1289
+ r11 = nil
1290
+ end
1291
+ s1 << r11
1292
+ end
1293
+ end
1294
+ end
1295
+ if s1.last
1296
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1297
+ r1.extend(QuotedOrBareString1)
1298
+ r1.extend(QuotedOrBareString2)
1299
+ else
1300
+ @index = i1
1301
+ r1 = nil
1302
+ end
1303
+ if r1
1304
+ r0 = r1
1305
+ else
1306
+ i12, s12 = index, []
1307
+ s13, i13 = [], index
1308
+ loop do
1309
+ if has_terminal?('\G[^\\s#\\\\\']', true, index)
1310
+ r14 = true
1311
+ @index += 1
1312
+ else
1313
+ r14 = nil
1314
+ end
1315
+ if r14
1316
+ s13 << r14
1317
+ else
1318
+ break
1319
+ end
1320
+ end
1321
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
1322
+ s12 << r13
1323
+ if r13
1324
+ if has_terminal?("'", false, index)
1325
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
1326
+ @index += 1
1327
+ else
1328
+ terminal_parse_failure("'")
1329
+ r15 = nil
1330
+ end
1331
+ s12 << r15
1332
+ if r15
1333
+ s16, i16 = [], index
1334
+ loop do
1335
+ i17 = index
1336
+ if has_terminal?('\G[^\'\\\\]', true, index)
1337
+ r18 = true
1338
+ @index += 1
1339
+ else
1340
+ r18 = nil
1341
+ end
1342
+ if r18
1343
+ r17 = r18
1344
+ else
1345
+ i19, s19 = index, []
1346
+ if has_terminal?('\\', false, index)
1347
+ r20 = instantiate_node(SyntaxNode,input, index...(index + 1))
1348
+ @index += 1
1349
+ else
1350
+ terminal_parse_failure('\\')
1351
+ r20 = nil
1352
+ end
1353
+ s19 << r20
1354
+ if r20
1355
+ if index < input_length
1356
+ r21 = instantiate_node(SyntaxNode,input, index...(index + 1))
1357
+ @index += 1
1358
+ else
1359
+ terminal_parse_failure("any character")
1360
+ r21 = nil
1361
+ end
1362
+ s19 << r21
1363
+ end
1364
+ if s19.last
1365
+ r19 = instantiate_node(SyntaxNode,input, i19...index, s19)
1366
+ r19.extend(QuotedOrBareString3)
1367
+ else
1368
+ @index = i19
1369
+ r19 = nil
1370
+ end
1371
+ if r19
1372
+ r17 = r19
1373
+ else
1374
+ @index = i17
1375
+ r17 = nil
1376
+ end
1377
+ end
1378
+ if r17
1379
+ s16 << r17
1380
+ else
1381
+ break
1382
+ end
1383
+ end
1384
+ r16 = instantiate_node(SyntaxNode,input, i16...index, s16)
1385
+ s12 << r16
1386
+ if r16
1387
+ if has_terminal?("'", false, index)
1388
+ r22 = instantiate_node(SyntaxNode,input, index...(index + 1))
1389
+ @index += 1
1390
+ else
1391
+ terminal_parse_failure("'")
1392
+ r22 = nil
1393
+ end
1394
+ s12 << r22
1395
+ end
1396
+ end
1397
+ end
1398
+ if s12.last
1399
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
1400
+ r12.extend(QuotedOrBareString4)
1401
+ r12.extend(QuotedOrBareString5)
1402
+ else
1403
+ @index = i12
1404
+ r12 = nil
1405
+ end
1406
+ if r12
1407
+ r0 = r12
1408
+ else
1409
+ s23, i23 = [], index
1410
+ loop do
1411
+ if has_terminal?('\G[^\\s#]', true, index)
1412
+ r24 = true
1413
+ @index += 1
1414
+ else
1415
+ r24 = nil
1416
+ end
1417
+ if r24
1418
+ s23 << r24
1419
+ else
1420
+ break
1421
+ end
1422
+ end
1423
+ if s23.empty?
1424
+ @index = i23
1425
+ r23 = nil
1426
+ else
1427
+ r23 = instantiate_node(SyntaxNode,input, i23...index, s23)
1428
+ r23.extend(QuotedOrBareString6)
1429
+ end
1430
+ if r23
1431
+ r0 = r23
1432
+ else
1433
+ @index = i0
1434
+ r0 = nil
1435
+ end
1436
+ end
1437
+ end
1438
+
1439
+ node_cache[:quoted_or_bare_string][start_index] = r0
1440
+
1441
+ r0
1442
+ end
1443
+
1444
+ def _nt_environment_variable_name
1445
+ start_index = index
1446
+ if node_cache[:environment_variable_name].has_key?(index)
1447
+ cached = node_cache[:environment_variable_name][index]
1448
+ if cached
1449
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1450
+ @index = cached.interval.end
1451
+ end
1452
+ return cached
1453
+ end
1454
+
1455
+ s0, i0 = [], index
1456
+ loop do
1457
+ if has_terminal?('\G[a-zA-Z0-9_]', true, index)
1458
+ r1 = true
1459
+ @index += 1
1460
+ else
1461
+ r1 = nil
1462
+ end
1463
+ if r1
1464
+ s0 << r1
1465
+ else
1466
+ break
1467
+ end
1468
+ end
1469
+ if s0.empty?
1470
+ @index = i0
1471
+ r0 = nil
1472
+ else
1473
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1474
+ end
1475
+
1476
+ node_cache[:environment_variable_name][start_index] = r0
1477
+
1478
+ r0
1479
+ end
1480
+
1481
+ module EnvironmentVariableNameValue0
1482
+ end
1483
+
1484
+ module EnvironmentVariableNameValue1
1485
+ end
1486
+
1487
+ module EnvironmentVariableNameValue2
1488
+ end
1489
+
1490
+ module EnvironmentVariableNameValue3
1491
+ end
1492
+
1493
+ def _nt_environment_variable_name_value
1494
+ start_index = index
1495
+ if node_cache[:environment_variable_name_value].has_key?(index)
1496
+ cached = node_cache[:environment_variable_name_value][index]
1497
+ if cached
1498
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1499
+ @index = cached.interval.end
1500
+ end
1501
+ return cached
1502
+ end
1503
+
1504
+ i0 = index
1505
+ i1, s1 = index, []
1506
+ s2, i2 = [], index
1507
+ loop do
1508
+ if has_terminal?('\G[^\\s#\\\\\'"]', true, index)
1509
+ r3 = true
1510
+ @index += 1
1511
+ else
1512
+ r3 = nil
1513
+ end
1514
+ if r3
1515
+ s2 << r3
1516
+ else
1517
+ break
1518
+ end
1519
+ end
1520
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1521
+ s1 << r2
1522
+ if r2
1523
+ if has_terminal?('"', false, index)
1524
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1525
+ @index += 1
1526
+ else
1527
+ terminal_parse_failure('"')
1528
+ r4 = nil
1529
+ end
1530
+ s1 << r4
1531
+ if r4
1532
+ s5, i5 = [], index
1533
+ loop do
1534
+ i6 = index
1535
+ if has_terminal?('\G[^"\\\\]', true, index)
1536
+ r7 = true
1537
+ @index += 1
1538
+ else
1539
+ r7 = nil
1540
+ end
1541
+ if r7
1542
+ r6 = r7
1543
+ else
1544
+ i8, s8 = index, []
1545
+ if has_terminal?('\\', false, index)
1546
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
1547
+ @index += 1
1548
+ else
1549
+ terminal_parse_failure('\\')
1550
+ r9 = nil
1551
+ end
1552
+ s8 << r9
1553
+ if r9
1554
+ if index < input_length
1555
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
1556
+ @index += 1
1557
+ else
1558
+ terminal_parse_failure("any character")
1559
+ r10 = nil
1560
+ end
1561
+ s8 << r10
1562
+ end
1563
+ if s8.last
1564
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1565
+ r8.extend(EnvironmentVariableNameValue0)
1566
+ else
1567
+ @index = i8
1568
+ r8 = nil
1569
+ end
1570
+ if r8
1571
+ r6 = r8
1572
+ else
1573
+ @index = i6
1574
+ r6 = nil
1575
+ end
1576
+ end
1577
+ if r6
1578
+ s5 << r6
1579
+ else
1580
+ break
1581
+ end
1582
+ end
1583
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1584
+ s1 << r5
1585
+ if r5
1586
+ if has_terminal?('"', false, index)
1587
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
1588
+ @index += 1
1589
+ else
1590
+ terminal_parse_failure('"')
1591
+ r11 = nil
1592
+ end
1593
+ s1 << r11
1594
+ end
1595
+ end
1596
+ end
1597
+ if s1.last
1598
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1599
+ r1.extend(EnvironmentVariableNameValue1)
1600
+ else
1601
+ @index = i1
1602
+ r1 = nil
1603
+ end
1604
+ if r1
1605
+ r0 = r1
1606
+ else
1607
+ i12, s12 = index, []
1608
+ s13, i13 = [], index
1609
+ loop do
1610
+ if has_terminal?('\G[^\\s#\\\\\'"]', true, index)
1611
+ r14 = true
1612
+ @index += 1
1613
+ else
1614
+ r14 = nil
1615
+ end
1616
+ if r14
1617
+ s13 << r14
1618
+ else
1619
+ break
1620
+ end
1621
+ end
1622
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
1623
+ s12 << r13
1624
+ if r13
1625
+ if has_terminal?("'", false, index)
1626
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
1627
+ @index += 1
1628
+ else
1629
+ terminal_parse_failure("'")
1630
+ r15 = nil
1631
+ end
1632
+ s12 << r15
1633
+ if r15
1634
+ s16, i16 = [], index
1635
+ loop do
1636
+ i17 = index
1637
+ if has_terminal?('\G[^\'\\\\]', true, index)
1638
+ r18 = true
1639
+ @index += 1
1640
+ else
1641
+ r18 = nil
1642
+ end
1643
+ if r18
1644
+ r17 = r18
1645
+ else
1646
+ i19, s19 = index, []
1647
+ if has_terminal?('\\', false, index)
1648
+ r20 = instantiate_node(SyntaxNode,input, index...(index + 1))
1649
+ @index += 1
1650
+ else
1651
+ terminal_parse_failure('\\')
1652
+ r20 = nil
1653
+ end
1654
+ s19 << r20
1655
+ if r20
1656
+ if index < input_length
1657
+ r21 = instantiate_node(SyntaxNode,input, index...(index + 1))
1658
+ @index += 1
1659
+ else
1660
+ terminal_parse_failure("any character")
1661
+ r21 = nil
1662
+ end
1663
+ s19 << r21
1664
+ end
1665
+ if s19.last
1666
+ r19 = instantiate_node(SyntaxNode,input, i19...index, s19)
1667
+ r19.extend(EnvironmentVariableNameValue2)
1668
+ else
1669
+ @index = i19
1670
+ r19 = nil
1671
+ end
1672
+ if r19
1673
+ r17 = r19
1674
+ else
1675
+ @index = i17
1676
+ r17 = nil
1677
+ end
1678
+ end
1679
+ if r17
1680
+ s16 << r17
1681
+ else
1682
+ break
1683
+ end
1684
+ end
1685
+ r16 = instantiate_node(SyntaxNode,input, i16...index, s16)
1686
+ s12 << r16
1687
+ if r16
1688
+ if has_terminal?("'", false, index)
1689
+ r22 = instantiate_node(SyntaxNode,input, index...(index + 1))
1690
+ @index += 1
1691
+ else
1692
+ terminal_parse_failure("'")
1693
+ r22 = nil
1694
+ end
1695
+ s12 << r22
1696
+ end
1697
+ end
1698
+ end
1699
+ if s12.last
1700
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
1701
+ r12.extend(EnvironmentVariableNameValue3)
1702
+ else
1703
+ @index = i12
1704
+ r12 = nil
1705
+ end
1706
+ if r12
1707
+ r0 = r12
1708
+ else
1709
+ s23, i23 = [], index
1710
+ loop do
1711
+ if has_terminal?('\G[^\\s#]', true, index)
1712
+ r24 = true
1713
+ @index += 1
1714
+ else
1715
+ r24 = nil
1716
+ end
1717
+ if r24
1718
+ s23 << r24
1719
+ else
1720
+ break
1721
+ end
1722
+ end
1723
+ if s23.empty?
1724
+ @index = i23
1725
+ r23 = nil
1726
+ else
1727
+ r23 = instantiate_node(SyntaxNode,input, i23...index, s23)
1728
+ end
1729
+ if r23
1730
+ r0 = r23
1731
+ else
1732
+ @index = i0
1733
+ r0 = nil
1734
+ end
1735
+ end
1736
+ end
1737
+
1738
+ node_cache[:environment_variable_name_value][start_index] = r0
1739
+
1740
+ r0
1741
+ end
1742
+
1743
+ end
1744
+
1745
+ class V1BaseParser < Treetop::Runtime::CompiledParser
1746
+ include V1Base
1747
+ end
1748
+
1749
+ end
1750
+ end