nasl 0.0.8 → 0.1.1

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 (86) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/README.md +11 -16
  4. data/Rakefile +38 -0
  5. data/bin/nasl-parse +1 -1
  6. data/lib/nasl.rb +1 -1
  7. data/lib/nasl/cli.rb +1 -1
  8. data/lib/nasl/command.rb +1 -1
  9. data/lib/nasl/commands/benchmark.rb +1 -1
  10. data/lib/nasl/commands/parse.rb +1 -1
  11. data/lib/nasl/commands/test.rb +1 -1
  12. data/lib/nasl/commands/tokenize.rb +1 -1
  13. data/lib/nasl/commands/xml.rb +1 -1
  14. data/lib/nasl/context.rb +5 -5
  15. data/lib/nasl/grammar.racc +104 -16
  16. data/lib/nasl/parser.rb +1 -1
  17. data/lib/nasl/parser/argument.rb +1 -1
  18. data/lib/nasl/parser/array.rb +51 -0
  19. data/lib/nasl/parser/assigment.rb +1 -1
  20. data/lib/nasl/parser/block.rb +7 -1
  21. data/lib/nasl/parser/break.rb +2 -2
  22. data/lib/nasl/parser/call.rb +3 -2
  23. data/lib/nasl/parser/comment.rb +2 -2
  24. data/lib/nasl/parser/continue.rb +2 -2
  25. data/lib/nasl/parser/decrement.rb +1 -1
  26. data/lib/nasl/parser/empty.rb +2 -2
  27. data/lib/nasl/parser/export.rb +1 -1
  28. data/lib/nasl/parser/expression.rb +1 -1
  29. data/lib/nasl/parser/for.rb +2 -2
  30. data/lib/nasl/parser/foreach.rb +4 -4
  31. data/lib/nasl/parser/function.rb +1 -1
  32. data/lib/nasl/parser/global.rb +1 -1
  33. data/lib/nasl/parser/identifier.rb +7 -2
  34. data/lib/nasl/parser/if.rb +2 -2
  35. data/lib/nasl/parser/import.rb +1 -1
  36. data/lib/nasl/parser/include.rb +2 -2
  37. data/lib/nasl/parser/increment.rb +1 -1
  38. data/lib/nasl/parser/integer.rb +7 -2
  39. data/lib/nasl/parser/ip.rb +2 -2
  40. data/lib/nasl/parser/key_value_pair.rb +43 -0
  41. data/lib/nasl/parser/list.rb +41 -0
  42. data/lib/nasl/parser/local.rb +1 -1
  43. data/lib/nasl/parser/lvalue.rb +1 -1
  44. data/lib/nasl/parser/node.rb +2 -2
  45. data/lib/nasl/parser/parameter.rb +43 -0
  46. data/lib/nasl/parser/reference.rb +41 -0
  47. data/lib/nasl/parser/repeat.rb +1 -1
  48. data/lib/nasl/parser/repetition.rb +1 -1
  49. data/lib/nasl/parser/return.rb +2 -2
  50. data/lib/nasl/parser/string.rb +7 -2
  51. data/lib/nasl/parser/tree.rb +2 -2
  52. data/lib/nasl/parser/undefined.rb +2 -2
  53. data/lib/nasl/parser/while.rb +1 -1
  54. data/lib/nasl/test.rb +1 -1
  55. data/lib/nasl/token.rb +2 -2
  56. data/lib/nasl/tokenizer.rb +7 -4
  57. data/lib/nasl/version.rb +27 -1
  58. data/nasl.gemspec +35 -8
  59. data/test/unit/parser/test_array.rb +174 -0
  60. data/test/unit/parser/test_assignment.rb +75 -4
  61. data/test/unit/parser/test_blank.rb +1 -1
  62. data/test/unit/parser/test_block.rb +29 -1
  63. data/test/unit/parser/test_call.rb +57 -5
  64. data/test/unit/parser/test_comment.rb +1 -1
  65. data/test/unit/parser/test_constant.rb +1 -1
  66. data/test/unit/parser/test_empty.rb +1 -1
  67. data/test/unit/parser/test_expressions.rb +8 -1
  68. data/test/unit/parser/test_foreach.rb +43 -0
  69. data/test/unit/parser/test_function.rb +147 -51
  70. data/test/unit/parser/test_global.rb +49 -0
  71. data/test/unit/parser/test_if.rb +3 -3
  72. data/test/unit/parser/test_include.rb +1 -1
  73. data/test/unit/parser/test_incr_decr.rb +1 -1
  74. data/test/unit/parser/test_ip.rb +1 -1
  75. data/test/unit/parser/test_list.rb +42 -0
  76. data/test/unit/parser/test_local.rb +49 -0
  77. data/test/unit/parser/test_return.rb +7 -3
  78. data/test/unit/parser/test_string.rb +1 -1
  79. data/test/unit/parser/test_whitespace.rb +1 -1
  80. data/test/unit/test_context.rb +1 -1
  81. data/test/unit/tokenizer/test_comment.rb +1 -1
  82. data/test/unit/tokenizer/test_empty.rb +1 -1
  83. data/test/unit/tokenizer/test_integer.rb +1 -1
  84. data/test/unit/tokenizer/test_references.rb +41 -0
  85. data/test/unit/tokenizer/test_string.rb +2 -1
  86. metadata +49 -86
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f1211036372f4f6f5cf6638769d1de8d46720ffd
4
+ data.tar.gz: 996d639bae9ddda1394e59745c19eafaca51eb45
5
+ SHA512:
6
+ metadata.gz: d376f113cf2fead0955db0b34a56855128f6c8dee42999fbb4173857b649de5ffe31aa3db31129f1879af46ed6c73adb8a7381e46d92cebbb4ae078bca6b5c5d
7
+ data.tar.gz: 8c90427b235c11cfffae66f294125dfd2094af5fe8cce28701867d84a9e9de95cfc5cba2bf33206cc3eb9b8e49556405a5293fdabac50bb2e9075af956239345
data/.gitignore CHANGED
@@ -7,3 +7,8 @@ pkg/*
7
7
  # Generated files.
8
8
  *.rex.rb
9
9
  *.tab.rb
10
+
11
+ # Backup files.
12
+ \#*\#
13
+ *~
14
+ *.bak
data/README.md CHANGED
@@ -1,32 +1,28 @@
1
- Installation
2
- ============
1
+ # Installation
3
2
 
4
- Git
5
- ---
3
+ ## Git
6
4
 
7
5
  Installing the source from Git is done as follows:
8
6
 
9
7
  git clone git://github.com/tenable/nasl.git
10
8
 
11
- Gem
12
- ---
9
+ ## Gem
10
+
13
11
 
14
12
  Installing the package from RubyGems is done as follows:
15
13
 
16
14
  gem install nasl
17
15
 
18
- Usage
19
- =====
16
+ # Usage
20
17
 
21
- Standalone
22
- ----------
18
+ ## Standalone
23
19
 
24
20
  To avoid conflicting with the NASL interpreter, the NASL gem's binary is
25
- installed as <nasl-parse>. As an application, it has very few actions that it
21
+ installed as `nasl-parse`. As an application, it has very few actions that it
26
22
  can perform.
27
23
 
28
24
  * Benchmark: This benchmarks the time taken to parse the input path(s) over a
29
- number of iterations. The number of iterations can be adjusted by the <-i>
25
+ number of iterations. The number of iterations can be adjusted by the `-i`
30
26
  switch.
31
27
 
32
28
  % nasl-parse -i 10 benchmark /opt/nessus/lib/nessus/plugins/ssl_certificate_chain.nasl
@@ -89,11 +85,10 @@ can perform.
89
85
  ...
90
86
  -------------------------[ ssl_certificate_chain.nasl ]-------------------------
91
87
 
92
- Library
93
- -------
88
+ # Library
94
89
 
95
90
  The primary users of this gem are [Pedant][pedant] and [Nasldoc][nasldoc]. Other
96
- uses are encouraged, of course! The <Parser> class is the most useful part,
91
+ uses are encouraged, of course! The `Parser` class is the most useful part,
97
92
  obviously, and can be used as follows:
98
93
 
99
94
  require 'nasl'
@@ -101,7 +96,7 @@ obviously, and can be used as follows:
101
96
  tree = Nasl::Parser.new.parse(file_contents, path_to_file)
102
97
 
103
98
  That's all there is to it. If there are any errors, it'll throw an instance of
104
- <ParseException> that will include as much context about the error as possible.
99
+ `ParseException` that will include as much context about the error as possible.
105
100
 
106
101
  [nasldoc]: https://github.com/tenable/nasldoc
107
102
  [pedant]: https://github.com/tenable/pedant
data/Rakefile CHANGED
@@ -1,3 +1,29 @@
1
+ ################################################################################
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # 1. Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+ ################################################################################
26
+
1
27
  $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
28
 
3
29
  require 'bundler/gem_tasks'
@@ -24,4 +50,16 @@ task :build => :compile do
24
50
  system "gem build nasl.gemspec"
25
51
  end
26
52
 
53
+ task :tag_and_bag do
54
+ system "git tag -a v#{Nasl::VERSION} -m 'version #{Nasl::VERSION}'"
55
+ system "git push --tags"
56
+ system "git checkout master"
57
+ system "git merge #{Nasl::VERSION}"
58
+ system "git push"
59
+ end
60
+
61
+ task :release => [:tag_and_bag, :build] do
62
+ system "gem push #{Nasl::APP_NAME}-#{Nasl::VERSION}.gem"
63
+ end
64
+
27
65
  task :default => :compile
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  ################################################################################
4
- # Copyright (c) 2011-2012, Mak Kolybabi
4
+ # Copyright (c) 2011-2014, Tenable Network Security
5
5
  # All rights reserved.
6
6
  #
7
7
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ###############################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Mak Kolybabi
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ###############################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Mak Kolybabi
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ###############################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Mak Kolybabi
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ###############################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Mak Kolybabi
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
- ###############################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
1
+ ################################################################################
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -86,18 +86,18 @@ module Nasl
86
86
  # no text to the left is at the start of the program.
87
87
  if outer.begin != inner.begin
88
88
  line = @code[outer.begin...inner.begin]
89
- line = line.color(:green) if color
89
+ line = Rainbow(line).color(:green) if color
90
90
  ctx << line
91
91
  end
92
92
 
93
93
  # Create the text in the region.
94
94
  line = @code[inner.begin...inner.end]
95
- line = line.color(:red) if color
95
+ line = Rainbow(line).color(:red) if color
96
96
  ctx << line
97
97
 
98
98
  # Create the text to the right of the region.
99
99
  line = @code[inner.end...outer.end].chomp
100
- line = line.color(:green) if color
100
+ line = Rainbow(line).color(:green) if color
101
101
  ctx << line
102
102
 
103
103
  ctx << "\n"
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -33,7 +33,7 @@ preclow
33
33
  left CMP_LT CMP_GT CMP_EQ CMP_NE CMP_GE CMP_LE SUBSTR_EQ SUBSTR_NE REGEX_EQ REGEX_NE
34
34
  left BIT_OR
35
35
  left BIT_XOR
36
- left BIT_AND
36
+ left AMPERSAND
37
37
  left BIT_SRA BIT_SRL BIT_SLL
38
38
  left ADD SUB
39
39
  left MUL DIV MOD
@@ -174,7 +174,7 @@ rule
174
174
  { n(:Empty, *val) }
175
175
  ;
176
176
 
177
- global : GLOBAL idents SEMICOLON
177
+ global : GLOBAL var_decls SEMICOLON
178
178
  { n(:Global, *val) }
179
179
  ;
180
180
 
@@ -190,7 +190,7 @@ rule
190
190
  { n(:Include, *val) }
191
191
  ;
192
192
 
193
- local : LOCAL idents SEMICOLON
193
+ local : LOCAL var_decls SEMICOLON
194
194
  { n(:Local, *val) }
195
195
  ;
196
196
 
@@ -199,6 +199,8 @@ rule
199
199
  ;
200
200
 
201
201
  return : RETURN expr SEMICOLON
202
+ { n(:Return, *val) }
203
+ | RETURN ref SEMICOLON
202
204
  { n(:Return, *val) }
203
205
  | RETURN SEMICOLON
204
206
  { n(:Return, *val) }
@@ -219,7 +221,9 @@ rule
219
221
  ;
220
222
 
221
223
  foreach : FOREACH ident LPAREN expr RPAREN statement
222
- { n(:Foreach, *val) }
224
+ { n(:Foreach, val[1], val[3], val[5]) }
225
+ | FOREACH LPAREN ident IN expr RPAREN statement
226
+ { n(:Foreach, val[2], val[4], val[6]) }
223
227
  ;
224
228
 
225
229
  if : IF LPAREN expr RPAREN statement
@@ -241,6 +245,8 @@ rule
241
245
  ##############################################################################
242
246
 
243
247
  assign_exp : lval ASS_EQ expr
248
+ { n(:Assignment, *val) }
249
+ | lval ASS_EQ ref
244
250
  { n(:Assignment, *val) }
245
251
  | lval ADD_EQ expr
246
252
  { n(:Assignment, *val) }
@@ -260,10 +266,11 @@ rule
260
266
  { n(:Assignment, *val) }
261
267
  ;
262
268
 
263
- call_exp : ident LPAREN args RPAREN
269
+ call_exp : lval LPAREN args RPAREN
264
270
  { n(:Call, *val) }
265
- | ident LPAREN RPAREN
271
+ | lval LPAREN RPAREN
266
272
  { n(:Call, *val) }
273
+ ;
267
274
 
268
275
  decr_exp : DECR lval
269
276
  { n(:Decrement, val[0]) }
@@ -301,7 +308,7 @@ rule
301
308
  { n(:Expression, *val) }
302
309
  | expr MOD expr
303
310
  { n(:Expression, *val) }
304
- | expr BIT_AND expr
311
+ | expr AMPERSAND expr
305
312
  { n(:Expression, *val) }
306
313
  | expr BIT_XOR expr
307
314
  { n(:Expression, *val) }
@@ -351,6 +358,10 @@ rule
351
358
  { val[0] }
352
359
  | undef
353
360
  { val[0] }
361
+ | list_expr
362
+ { val[0] }
363
+ | array_expr
364
+ { val[0] }
354
365
  ;
355
366
 
356
367
  ##############################################################################
@@ -358,9 +369,31 @@ rule
358
369
  ##############################################################################
359
370
 
360
371
  arg : ident COLON expr
372
+ { n(:Argument, *val) }
373
+ | ident COLON ref
361
374
  { n(:Argument, *val) }
362
375
  | expr
363
376
  { n(:Argument, *val) }
377
+ | ref
378
+ { n(:Argument, *val) }
379
+ ;
380
+
381
+ kv_pair : string COLON expr
382
+ { n(:KeyValuePair, *val) }
383
+ | int COLON expr
384
+ { n(:KeyValuePair, *val) }
385
+ | string COLON ref
386
+ { n(:KeyValuePair, *val) }
387
+ | int COLON ref
388
+ { n(:KeyValuePair, *val) }
389
+ ;
390
+
391
+ kv_pairs : kv_pair COMMA kv_pairs
392
+ { [val[0]] + val[2] }
393
+ | kv_pair COMMA
394
+ { [val[0]] }
395
+ | kv_pair
396
+ { [val[0]] }
364
397
  ;
365
398
 
366
399
  lval : ident indexes
@@ -369,6 +402,10 @@ rule
369
402
  { n(:Lvalue, *val) }
370
403
  ;
371
404
 
405
+ ref : AT_SIGN ident
406
+ { n(:Reference, val[1]) }
407
+ ;
408
+
372
409
  ##############################################################################
373
410
  # Anonymous Components
374
411
  ##############################################################################
@@ -379,6 +416,12 @@ rule
379
416
  { [val[0]] }
380
417
  ;
381
418
 
419
+ array_expr : LBRACE kv_pairs RBRACE
420
+ { n(:Array, *val) }
421
+ | LBRACE RBRACE
422
+ { n(:Array, *val) }
423
+ ;
424
+
382
425
  field : assign_exp
383
426
  { val[0] }
384
427
  | call_exp
@@ -391,21 +434,45 @@ rule
391
434
  { nil }
392
435
  ;
393
436
 
394
- idents : ident COMMA idents
395
- { [val[0]] + val[2] }
396
- | ident
437
+ index : LBRACK expr RBRACK
438
+ { val[1] }
439
+ | PERIOD ident
440
+ { val[1] }
441
+ ;
442
+
443
+ indexes : index indexes
444
+ { [val[0]] + val[1] }
445
+ | index
397
446
  { [val[0]] }
398
447
  ;
399
448
 
400
- indexes : LBRACK expr RBRACK indexes
401
- { [val[1]] + val[3] }
402
- | LBRACK expr RBRACK
403
- { [val[1]] }
449
+ list_elem : expr
450
+ { val[0] }
451
+ | ref
452
+ { val[0] }
404
453
  ;
405
454
 
406
- params : ident COMMA params
455
+ list_elems : list_elem COMMA list_elems
407
456
  { [val[0]] + val[2] }
457
+ | list_elem
458
+ { [val[0]] }
459
+ ;
460
+
461
+ list_expr : LBRACK list_elems RBRACK
462
+ { n(:List, *val) }
463
+ | LBRACK RBRACK
464
+ { n(:List, *val) }
465
+ ;
466
+
467
+ param : AMPERSAND ident
468
+ { n(:Parameter, val[1], 'reference') }
408
469
  | ident
470
+ { n(:Parameter, val[0], 'value') }
471
+ ;
472
+
473
+ params : param COMMA params
474
+ { [val[0]] + val[2] }
475
+ | param
409
476
  { [val[0]] }
410
477
  ;
411
478
 
@@ -415,6 +482,20 @@ rule
415
482
  { [val[0]] }
416
483
  ;
417
484
 
485
+ var_decl : ident ASS_EQ expr
486
+ { n(:Assignment, *val) }
487
+ | ident ASS_EQ ref
488
+ { n(:Assignment, *val) }
489
+ | ident
490
+ { val[0] }
491
+ ;
492
+
493
+ var_decls : var_decl COMMA var_decls
494
+ { [val[0]] + val[2] }
495
+ | var_decl
496
+ { [val[0]] }
497
+ ;
498
+
418
499
  ##############################################################################
419
500
  # Literals
420
501
  ##############################################################################
@@ -423,6 +504,8 @@ rule
423
504
  { n(:Identifier, *val) }
424
505
  | REP
425
506
  { n(:Identifier, *val) }
507
+ | IN
508
+ { n(:Identifier, *val) }
426
509
  ;
427
510
 
428
511
  int : INT_DEC
@@ -456,6 +539,7 @@ end
456
539
  require 'nasl/parser/tree'
457
540
 
458
541
  require 'nasl/parser/argument'
542
+ require 'nasl/parser/array'
459
543
  require 'nasl/parser/assigment'
460
544
  require 'nasl/parser/block'
461
545
  require 'nasl/parser/break'
@@ -477,8 +561,12 @@ require 'nasl/parser/include'
477
561
  require 'nasl/parser/increment'
478
562
  require 'nasl/parser/integer'
479
563
  require 'nasl/parser/ip'
564
+ require 'nasl/parser/key_value_pair'
565
+ require 'nasl/parser/list'
480
566
  require 'nasl/parser/local'
481
567
  require 'nasl/parser/lvalue'
568
+ require 'nasl/parser/parameter'
569
+ require 'nasl/parser/reference'
482
570
  require 'nasl/parser/repeat'
483
571
  require 'nasl/parser/repetition'
484
572
  require 'nasl/parser/return'