treetop 1.6.6 → 1.6.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +18 -0
  3. data/History.txt +18 -0
  4. data/README.md +2 -0
  5. data/Rakefile +10 -43
  6. data/Treetop.tmbundle/Preferences/Comments.tmPreferences +28 -0
  7. data/Treetop.tmbundle/Snippets/grammar ___ end.tmSnippet +20 -0
  8. data/Treetop.tmbundle/Snippets/rule ___ end.tmSnippet +18 -0
  9. data/Treetop.tmbundle/Support/nibs/SyntaxTreeViewer.nib/designable.nib +1524 -0
  10. data/Treetop.tmbundle/Support/nibs/SyntaxTreeViewer.nib/keyedobjects.nib +0 -0
  11. data/Treetop.tmbundle/Support/syntax_tree_viewer.rb +117 -0
  12. data/Treetop.tmbundle/Syntaxes/Treetop Grammar.tmLanguage +358 -0
  13. data/Treetop.tmbundle/info.plist +10 -0
  14. data/doc/pitfalls_and_advanced_techniques.markdown +6 -0
  15. data/doc/syntactic_recognition.markdown +2 -2
  16. data/lib/treetop/compiler/grammar_compiler.rb +6 -3
  17. data/lib/treetop/compiler/metagrammar.rb +97 -77
  18. data/lib/treetop/compiler/metagrammar.treetop +1 -1
  19. data/lib/treetop/compiler/ruby_builder.rb +2 -2
  20. data/lib/treetop/ruby_extensions/string.rb +0 -6
  21. data/lib/treetop/runtime/compiled_parser.rb +15 -2
  22. data/lib/treetop/version.rb +1 -1
  23. data/treetop.gemspec +25 -157
  24. metadata +15 -61
  25. data/doc/site.rb +0 -112
  26. data/doc/sitegen.rb +0 -65
  27. data/spec/compiler/and_predicate_spec.rb +0 -36
  28. data/spec/compiler/anything_symbol_spec.rb +0 -47
  29. data/spec/compiler/character_class_spec.rb +0 -304
  30. data/spec/compiler/choice_spec.rb +0 -89
  31. data/spec/compiler/circular_compilation_spec.rb +0 -30
  32. data/spec/compiler/failure_propagation_functional_spec.rb +0 -21
  33. data/spec/compiler/grammar_compiler_spec.rb +0 -113
  34. data/spec/compiler/grammar_spec.rb +0 -44
  35. data/spec/compiler/multibyte_chars_spec.rb +0 -38
  36. data/spec/compiler/namespace_spec.rb +0 -42
  37. data/spec/compiler/nonterminal_symbol_spec.rb +0 -40
  38. data/spec/compiler/not_predicate_spec.rb +0 -52
  39. data/spec/compiler/occurrence_range_spec.rb +0 -186
  40. data/spec/compiler/one_or_more_spec.rb +0 -35
  41. data/spec/compiler/optional_spec.rb +0 -37
  42. data/spec/compiler/parenthesized_expression_spec.rb +0 -34
  43. data/spec/compiler/parsing_rule_spec.rb +0 -61
  44. data/spec/compiler/repeated_subrule_spec.rb +0 -29
  45. data/spec/compiler/semantic_predicate_spec.rb +0 -176
  46. data/spec/compiler/sequence_spec.rb +0 -129
  47. data/spec/compiler/terminal_spec.rb +0 -177
  48. data/spec/compiler/terminal_symbol_spec.rb +0 -40
  49. data/spec/compiler/test_grammar.treetop +0 -7
  50. data/spec/compiler/test_grammar.tt +0 -7
  51. data/spec/compiler/test_grammar_do.treetop +0 -7
  52. data/spec/compiler/test_grammar_magic_coding.treetop +0 -8
  53. data/spec/compiler/test_grammar_magic_encoding.treetop +0 -8
  54. data/spec/compiler/tt_compiler_spec.rb +0 -224
  55. data/spec/compiler/zero_or_more_spec.rb +0 -58
  56. data/spec/composition/a.treetop +0 -11
  57. data/spec/composition/b.treetop +0 -11
  58. data/spec/composition/c.treetop +0 -10
  59. data/spec/composition/d.treetop +0 -10
  60. data/spec/composition/f.treetop +0 -17
  61. data/spec/composition/grammar_composition_spec.rb +0 -40
  62. data/spec/composition/subfolder/e_includes_c.treetop +0 -15
  63. data/spec/ruby_extensions/string_spec.rb +0 -32
  64. data/spec/runtime/compiled_parser_spec.rb +0 -153
  65. data/spec/runtime/syntax_node_spec.rb +0 -77
  66. data/spec/spec_helper.rb +0 -123
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>name</key>
6
+ <string>Treetop</string>
7
+ <key>uuid</key>
8
+ <string>83A8B700-143D-4BD6-B4EA-D73796E8F883</string>
9
+ </dict>
10
+ </plist>
@@ -49,3 +49,9 @@ This says that `'end'` must be followed by a space, but this space is not consum
49
49
  end
50
50
 
51
51
  In general, when the syntax gets tough, it helps to focus on what you really mean. A keyword is a character not followed by another character that isn't a space.
52
+
53
+ ## Poor Performance with Large Unicode Strings
54
+
55
+ Treetop may perform poorly when parsing very large (more than 100KB) unicode strings. This is due to the fact that substring lookups on Ruby unicode strings are linear-time operations, and not constant-time operations like they are on ASCII encoded strings. This means that parse times for larger strings can be exponentially worse than for smaller strings.
56
+
57
+ If your input and grammar only expect ASCII strings, you can achieve significant performance improvements for large strings by re-encoding them to ASCII using `input.encode(Encoding::US_ASCII)`. See [this issue on GitHub](https://github.com/cjheath/treetop/issues/31) for more information and other possible workarounds for unicode strings.
@@ -32,9 +32,9 @@ The main keywords are:
32
32
 
33
33
  * `rule` : This defines a parsing rule within the grammar. It is followed by a name by which this rule can be referenced within other rules. It is then followed by a parsing expression defining the rule.
34
34
 
35
- A grammar may be surrounded by one or more nested `module` statements, which provides a namespace for the generated Ruby parser.
35
+ A grammar may be surrounded by one or more nested `module` or `class` statements, which provides a namespace for the generated Ruby parser. Note that you cannot specify a superclass for a class, so if your class has a superclass, it must be declared elsewhere and loaded first.
36
36
 
37
- Treetop will emit a module called `GrammarName` and a parser class called `GrammarNameParser` (in the module namespace, if specified).
37
+ Treetop will emit a module called `GrammarName` and a parser class called `GrammarNameParser` (in the namespace, if specified).
38
38
 
39
39
  #Parsing Expressions
40
40
  Each rule associates a name with a _parsing expression_. Parsing expressions are a generalization of vanilla regular expressions. Their key feature is the ability to reference other expressions in the grammar by name.
@@ -33,10 +33,13 @@ module Treetop
33
33
 
34
34
  # compile a treetop source file and load it
35
35
  def self.load(path)
36
- adjusted_path = path =~ /\.(treetop|tt)\Z/ ? path : path + '.treetop'
37
- File.open(adjusted_path) do |source_file|
36
+ unless path =~ Treetop::Polyglot::VALID_GRAMMAR_EXT_REGEXP
37
+ ext = Treetop::Polyglot::VALID_GRAMMAR_EXT.select {|ext| File.exist?(path+".#{ext}")}.shift
38
+ path += ".#{ext}" unless ext.nil?
39
+ end
40
+ File.open(path) do |source_file|
38
41
  source = source_file.read
39
- source.gsub!(/\b__FILE__\b/, %Q{"#{adjusted_path}"})
42
+ source.gsub!(/\b__FILE__\b/, %Q{"#{path}"})
40
43
  load_from_string(source)
41
44
  end
42
45
  end
@@ -320,102 +320,122 @@ module Treetop
320
320
 
321
321
  i0, s0 = index, []
322
322
  i1, s1 = index, []
323
+ i2 = index
323
324
  if (match_len = has_terminal?('module', false, index))
324
- r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
325
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
325
326
  @index += match_len
326
327
  else
327
328
  terminal_parse_failure('\'module\'')
328
- r2 = nil
329
+ r3 = nil
330
+ end
331
+ if r3
332
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
333
+ r2 = r3
334
+ else
335
+ if (match_len = has_terminal?('class', false, index))
336
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
337
+ @index += match_len
338
+ else
339
+ terminal_parse_failure('\'class\'')
340
+ r4 = nil
341
+ end
342
+ if r4
343
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
344
+ r2 = r4
345
+ else
346
+ @index = i2
347
+ r2 = nil
348
+ end
329
349
  end
330
350
  s1 << r2
331
351
  if r2
332
- r3 = _nt_space
333
- s1 << r3
334
- if r3
335
- i4, s4 = index, []
352
+ r5 = _nt_space
353
+ s1 << r5
354
+ if r5
355
+ i6, s6 = index, []
336
356
  if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
337
- r5 = true
357
+ r7 = true
338
358
  @index += 1
339
359
  else
340
360
  terminal_parse_failure('[A-Z]')
341
- r5 = nil
361
+ r7 = nil
342
362
  end
343
- s4 << r5
344
- if r5
345
- s6, i6 = [], index
363
+ s6 << r7
364
+ if r7
365
+ s8, i8 = [], index
346
366
  loop do
347
- r7 = _nt_alphanumeric_char
348
- if r7
349
- s6 << r7
367
+ r9 = _nt_alphanumeric_char
368
+ if r9
369
+ s8 << r9
350
370
  else
351
371
  break
352
372
  end
353
373
  end
354
- r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
355
- s4 << r6
356
- if r6
357
- s8, i8 = [], index
374
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
375
+ s6 << r8
376
+ if r8
377
+ s10, i10 = [], index
358
378
  loop do
359
- i9, s9 = index, []
379
+ i11, s11 = index, []
360
380
  if (match_len = has_terminal?('::', false, index))
361
- r10 = instantiate_node(SyntaxNode,input, index...(index + match_len))
381
+ r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
362
382
  @index += match_len
363
383
  else
364
384
  terminal_parse_failure('\'::\'')
365
- r10 = nil
385
+ r12 = nil
366
386
  end
367
- s9 << r10
368
- if r10
387
+ s11 << r12
388
+ if r12
369
389
  if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
370
- r11 = true
390
+ r13 = true
371
391
  @index += 1
372
392
  else
373
393
  terminal_parse_failure('[A-Z]')
374
- r11 = nil
394
+ r13 = nil
375
395
  end
376
- s9 << r11
377
- if r11
378
- s12, i12 = [], index
396
+ s11 << r13
397
+ if r13
398
+ s14, i14 = [], index
379
399
  loop do
380
- r13 = _nt_alphanumeric_char
381
- if r13
382
- s12 << r13
400
+ r15 = _nt_alphanumeric_char
401
+ if r15
402
+ s14 << r15
383
403
  else
384
404
  break
385
405
  end
386
406
  end
387
- r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
388
- s9 << r12
407
+ r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
408
+ s11 << r14
389
409
  end
390
410
  end
391
- if s9.last
392
- r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
393
- r9.extend(ModuleDeclaration0)
411
+ if s11.last
412
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
413
+ r11.extend(ModuleDeclaration0)
394
414
  else
395
- @index = i9
396
- r9 = nil
415
+ @index = i11
416
+ r11 = nil
397
417
  end
398
- if r9
399
- s8 << r9
418
+ if r11
419
+ s10 << r11
400
420
  else
401
421
  break
402
422
  end
403
423
  end
404
- r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
405
- s4 << r8
424
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
425
+ s6 << r10
406
426
  end
407
427
  end
408
- if s4.last
409
- r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
410
- r4.extend(ModuleDeclaration1)
428
+ if s6.last
429
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
430
+ r6.extend(ModuleDeclaration1)
411
431
  else
412
- @index = i4
413
- r4 = nil
432
+ @index = i6
433
+ r6 = nil
414
434
  end
415
- s1 << r4
416
- if r4
417
- r14 = _nt_space
418
- s1 << r14
435
+ s1 << r6
436
+ if r6
437
+ r16 = _nt_space
438
+ s1 << r16
419
439
  end
420
440
  end
421
441
  end
@@ -428,44 +448,44 @@ module Treetop
428
448
  end
429
449
  s0 << r1
430
450
  if r1
431
- i15 = index
432
- r16 = _nt_module_declaration
433
- if r16
434
- r16 = SyntaxNode.new(input, (index-1)...index) if r16 == true
435
- r15 = r16
451
+ i17 = index
452
+ r18 = _nt_module_declaration
453
+ if r18
454
+ r18 = SyntaxNode.new(input, (index-1)...index) if r18 == true
455
+ r17 = r18
436
456
  else
437
- r17 = _nt_grammar
438
- if r17
439
- r17 = SyntaxNode.new(input, (index-1)...index) if r17 == true
440
- r15 = r17
457
+ r19 = _nt_grammar
458
+ if r19
459
+ r19 = SyntaxNode.new(input, (index-1)...index) if r19 == true
460
+ r17 = r19
441
461
  else
442
- @index = i15
443
- r15 = nil
462
+ @index = i17
463
+ r17 = nil
444
464
  end
445
465
  end
446
- s0 << r15
447
- if r15
448
- i18, s18 = index, []
449
- r19 = _nt_space
450
- s18 << r19
451
- if r19
466
+ s0 << r17
467
+ if r17
468
+ i20, s20 = index, []
469
+ r21 = _nt_space
470
+ s20 << r21
471
+ if r21
452
472
  if (match_len = has_terminal?('end', false, index))
453
- r20 = instantiate_node(SyntaxNode,input, index...(index + match_len))
473
+ r22 = instantiate_node(SyntaxNode,input, index...(index + match_len))
454
474
  @index += match_len
455
475
  else
456
476
  terminal_parse_failure('\'end\'')
457
- r20 = nil
477
+ r22 = nil
458
478
  end
459
- s18 << r20
479
+ s20 << r22
460
480
  end
461
- if s18.last
462
- r18 = instantiate_node(SyntaxNode,input, i18...index, s18)
463
- r18.extend(ModuleDeclaration3)
481
+ if s20.last
482
+ r20 = instantiate_node(SyntaxNode,input, i20...index, s20)
483
+ r20.extend(ModuleDeclaration3)
464
484
  else
465
- @index = i18
466
- r18 = nil
485
+ @index = i20
486
+ r20 = nil
467
487
  end
468
- s0 << r18
488
+ s0 << r20
469
489
  end
470
490
  end
471
491
  if s0.last
@@ -18,7 +18,7 @@ module Treetop
18
18
  end
19
19
 
20
20
  rule module_declaration
21
- module_prefix:('module' space name:([A-Z] alphanumeric_char* ('::' [A-Z] alphanumeric_char*)*) space) module_contents:(module_declaration / grammar) suffix:(space 'end') {
21
+ module_prefix:(('module'/'class') space name:([A-Z] alphanumeric_char* ('::' [A-Z] alphanumeric_char*)*) space) module_contents:(module_declaration / grammar) suffix:(space 'end') {
22
22
  def compile
23
23
  module_prefix.text_value + module_contents.compile + suffix.text_value
24
24
  end
@@ -9,11 +9,11 @@ module Treetop
9
9
  def initialize
10
10
  @level = 0
11
11
  @address_space = LexicalAddressSpace.new
12
- @ruby = ""
12
+ @ruby = String.new("")
13
13
  end
14
14
 
15
15
  def <<(ruby_line)
16
- return if ruby_line.blank?
16
+ return if ruby_line == ''
17
17
  ruby << ruby_line.tabto(level) << "\n"
18
18
  end
19
19
 
@@ -13,12 +13,6 @@ class String
13
13
  self[0...index].count("\n") + 1
14
14
  end
15
15
 
16
- unless method_defined?(:blank?)
17
- def blank?
18
- self == ""
19
- end
20
- end
21
-
22
16
  # The following methods are lifted from Facets 2.0.2
23
17
  def tabto(n)
24
18
  if self =~ /^( *)\S/
@@ -52,10 +52,10 @@ module Treetop
52
52
  end
53
53
 
54
54
  def terminal_failures
55
- if @terminal_failures.empty? || @terminal_failures[0].is_a?(TerminalParseFailure)
55
+ if @terminal_failures.empty? || @terminal_failures[-1].is_a?(TerminalParseFailure)
56
56
  @terminal_failures
57
57
  else
58
- @terminal_failures.map! {|tf_ary| TerminalParseFailure.new(*tf_ary) }
58
+ @terminal_failures.map! {|tf_ary| tf_ary.is_a?(TerminalParseFailure) ? tf_ary : TerminalParseFailure.new(*tf_ary) }
59
59
  end
60
60
  end
61
61
 
@@ -75,6 +75,11 @@ module Treetop
75
75
  @max_terminal_failure_index = 0
76
76
  end
77
77
 
78
+ def forget_failures_to_here
79
+ @terminal_failures = []
80
+ @max_terminal_failure_index = -1
81
+ end
82
+
78
83
  def reset_index
79
84
  @index = 0
80
85
  end
@@ -113,12 +118,20 @@ module Treetop
113
118
  end
114
119
 
115
120
  def terminal_parse_failure(expected_string, unexpected = false)
121
+ if @max_terminal_failure_index == -1
122
+ @max_terminal_failure_index = 0
123
+ return nil
124
+ end
116
125
  return nil if index < max_terminal_failure_index
117
126
  if index > max_terminal_failure_index
118
127
  @max_terminal_failure_index = index
119
128
  @terminal_failures = []
120
129
  end
121
130
  @terminal_failures << [index, expected_string, unexpected]
131
+ # It's very slow, but this shows the last 5 nested rules:
132
+ # caller.reject{|l| l =~ /`loop'|`block in /}[0..5].reverse.map{|l| l.sub(/[^`]*`_nt_/,'').sub(/'/,'')}
133
+
134
+ terminal_failures
122
135
  return nil
123
136
  end
124
137
  end
@@ -2,7 +2,7 @@ module Treetop #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
4
  MINOR = 6
5
- TINY = 6
5
+ TINY = 11
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -1,166 +1,34 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
1
  # -*- encoding: utf-8 -*-
5
- # stub: treetop 1.6.6 ruby lib
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'date'
5
+ require 'treetop/version'
6
6
 
7
- Gem::Specification.new do |s|
8
- s.name = "treetop"
9
- s.version = "1.6.6"
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "treetop"
9
+ spec.version = Treetop::VERSION::STRING
10
+ spec.authors = ["Nathan Sobo", "Clifford Heath"]
10
11
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
- s.authors = ["Nathan Sobo", "Clifford Heath"]
14
- s.date = "2016-07-20"
15
- s.description = "A Parsing Expression Grammar (PEG) Parser generator DSL for Ruby"
16
- s.email = "cliffordheath@gmail.com"
17
- s.executables = ["tt"]
18
- s.extra_rdoc_files = [
12
+ spec.email = "cliffordheath@gmail.com"
13
+ spec.date = Date.today.strftime("%F")
14
+ spec.summary = "A Ruby-based text parsing and interpretation DSL"
15
+ spec.description = "A Parsing Expression Grammar (PEG) Parser generator DSL for Ruby"
16
+ spec.homepage = "https://github.com/cjheath/treetop"
17
+ spec.licenses = ["MIT"]
18
+
19
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec|website|script|\.|benchmark)}) }
20
+ spec.executables = ["tt"]
21
+ spec.require_paths = ["lib"]
22
+ spec.extra_rdoc_files = [
19
23
  "LICENSE",
20
24
  "README.md"
21
25
  ]
22
- s.files = [
23
- "LICENSE",
24
- "README.md",
25
- "Rakefile",
26
- "bin/tt",
27
- "doc/contributing_and_planned_features.markdown",
28
- "doc/grammar_composition.markdown",
29
- "doc/index.markdown",
30
- "doc/pitfalls_and_advanced_techniques.markdown",
31
- "doc/semantic_interpretation.markdown",
32
- "doc/site.rb",
33
- "doc/sitegen.rb",
34
- "doc/syntactic_recognition.markdown",
35
- "doc/tt.1",
36
- "doc/using_in_ruby.markdown",
37
- "examples/indented_blocks/indented_blocks.tt",
38
- "examples/indented_blocks/indented_blocks_test.rb",
39
- "examples/lambda_calculus/arithmetic.rb",
40
- "examples/lambda_calculus/arithmetic.treetop",
41
- "examples/lambda_calculus/arithmetic_node_classes.rb",
42
- "examples/lambda_calculus/arithmetic_test.rb",
43
- "examples/lambda_calculus/lambda_calculus.rb",
44
- "examples/lambda_calculus/lambda_calculus.treetop",
45
- "examples/lambda_calculus/lambda_calculus_node_classes.rb",
46
- "examples/lambda_calculus/lambda_calculus_test.rb",
47
- "examples/lambda_calculus/test_helper.rb",
48
- "lib/treetop.rb",
49
- "lib/treetop/bootstrap_gen_1_metagrammar.rb",
50
- "lib/treetop/compiler.rb",
51
- "lib/treetop/compiler/grammar_compiler.rb",
52
- "lib/treetop/compiler/lexical_address_space.rb",
53
- "lib/treetop/compiler/metagrammar.rb",
54
- "lib/treetop/compiler/metagrammar.treetop",
55
- "lib/treetop/compiler/node_classes.rb",
56
- "lib/treetop/compiler/node_classes/anything_symbol.rb",
57
- "lib/treetop/compiler/node_classes/atomic_expression.rb",
58
- "lib/treetop/compiler/node_classes/character_class.rb",
59
- "lib/treetop/compiler/node_classes/choice.rb",
60
- "lib/treetop/compiler/node_classes/declaration_sequence.rb",
61
- "lib/treetop/compiler/node_classes/grammar.rb",
62
- "lib/treetop/compiler/node_classes/inline_module.rb",
63
- "lib/treetop/compiler/node_classes/nonterminal.rb",
64
- "lib/treetop/compiler/node_classes/optional.rb",
65
- "lib/treetop/compiler/node_classes/parenthesized_expression.rb",
66
- "lib/treetop/compiler/node_classes/parsing_expression.rb",
67
- "lib/treetop/compiler/node_classes/parsing_rule.rb",
68
- "lib/treetop/compiler/node_classes/predicate.rb",
69
- "lib/treetop/compiler/node_classes/predicate_block.rb",
70
- "lib/treetop/compiler/node_classes/repetition.rb",
71
- "lib/treetop/compiler/node_classes/sequence.rb",
72
- "lib/treetop/compiler/node_classes/terminal.rb",
73
- "lib/treetop/compiler/node_classes/transient_prefix.rb",
74
- "lib/treetop/compiler/node_classes/treetop_file.rb",
75
- "lib/treetop/compiler/ruby_builder.rb",
76
- "lib/treetop/polyglot.rb",
77
- "lib/treetop/ruby_extensions.rb",
78
- "lib/treetop/ruby_extensions/string.rb",
79
- "lib/treetop/runtime.rb",
80
- "lib/treetop/runtime/compiled_parser.rb",
81
- "lib/treetop/runtime/interval_skip_list.rb",
82
- "lib/treetop/runtime/interval_skip_list/head_node.rb",
83
- "lib/treetop/runtime/interval_skip_list/interval_skip_list.rb",
84
- "lib/treetop/runtime/interval_skip_list/node.rb",
85
- "lib/treetop/runtime/syntax_node.rb",
86
- "lib/treetop/runtime/terminal_parse_failure.rb",
87
- "lib/treetop/runtime/terminal_syntax_node.rb",
88
- "lib/treetop/version.rb",
89
- "spec/compiler/and_predicate_spec.rb",
90
- "spec/compiler/anything_symbol_spec.rb",
91
- "spec/compiler/character_class_spec.rb",
92
- "spec/compiler/choice_spec.rb",
93
- "spec/compiler/circular_compilation_spec.rb",
94
- "spec/compiler/failure_propagation_functional_spec.rb",
95
- "spec/compiler/grammar_compiler_spec.rb",
96
- "spec/compiler/grammar_spec.rb",
97
- "spec/compiler/multibyte_chars_spec.rb",
98
- "spec/compiler/namespace_spec.rb",
99
- "spec/compiler/nonterminal_symbol_spec.rb",
100
- "spec/compiler/not_predicate_spec.rb",
101
- "spec/compiler/occurrence_range_spec.rb",
102
- "spec/compiler/one_or_more_spec.rb",
103
- "spec/compiler/optional_spec.rb",
104
- "spec/compiler/parenthesized_expression_spec.rb",
105
- "spec/compiler/parsing_rule_spec.rb",
106
- "spec/compiler/repeated_subrule_spec.rb",
107
- "spec/compiler/semantic_predicate_spec.rb",
108
- "spec/compiler/sequence_spec.rb",
109
- "spec/compiler/terminal_spec.rb",
110
- "spec/compiler/terminal_symbol_spec.rb",
111
- "spec/compiler/test_grammar.treetop",
112
- "spec/compiler/test_grammar.tt",
113
- "spec/compiler/test_grammar_do.treetop",
114
- "spec/compiler/test_grammar_magic_coding.treetop",
115
- "spec/compiler/test_grammar_magic_encoding.treetop",
116
- "spec/compiler/tt_compiler_spec.rb",
117
- "spec/compiler/zero_or_more_spec.rb",
118
- "spec/composition/a.treetop",
119
- "spec/composition/b.treetop",
120
- "spec/composition/c.treetop",
121
- "spec/composition/d.treetop",
122
- "spec/composition/f.treetop",
123
- "spec/composition/grammar_composition_spec.rb",
124
- "spec/composition/subfolder/e_includes_c.treetop",
125
- "spec/ruby_extensions/string_spec.rb",
126
- "spec/runtime/compiled_parser_spec.rb",
127
- "spec/runtime/syntax_node_spec.rb",
128
- "spec/spec_helper.rb",
129
- "treetop.gemspec"
130
- ]
131
- s.homepage = "https://github.com/cjheath/treetop"
132
- s.licenses = ["MIT"]
133
- s.rubygems_version = "2.4.5"
134
- s.summary = "A Ruby-based text parsing and interpretation DSL"
135
-
136
- if s.respond_to? :specification_version then
137
- s.specification_version = 4
138
26
 
139
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
140
- s.add_runtime_dependency(%q<polyglot>, ["~> 0.3"])
141
- s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
142
- s.add_development_dependency(%q<activesupport>, ["~> 5"])
143
- s.add_development_dependency(%q<i18n>, ["~> 0.6"])
144
- s.add_development_dependency(%q<rr>, ["~> 1.0"])
145
- s.add_development_dependency(%q<rspec>, ["~> 3"])
146
- s.add_development_dependency(%q<rake>, ["~> 11"])
147
- else
148
- s.add_dependency(%q<polyglot>, ["~> 0.3"])
149
- s.add_dependency(%q<jeweler>, ["~> 2.0"])
150
- s.add_dependency(%q<activesupport>, ["~> 5"])
151
- s.add_dependency(%q<i18n>, ["~> 0.6"])
152
- s.add_dependency(%q<rr>, ["~> 1.0"])
153
- s.add_dependency(%q<rspec>, ["~> 3"])
154
- s.add_dependency(%q<rake>, ["~> 11"])
155
- end
156
- else
157
- s.add_dependency(%q<polyglot>, ["~> 0.3"])
158
- s.add_dependency(%q<jeweler>, ["~> 2.0"])
159
- s.add_dependency(%q<activesupport>, ["~> 5"])
160
- s.add_dependency(%q<i18n>, ["~> 0.6"])
161
- s.add_dependency(%q<rr>, ["~> 1.0"])
162
- s.add_dependency(%q<rspec>, ["~> 3"])
163
- s.add_dependency(%q<rake>, ["~> 11"])
164
- end
27
+ spec.add_runtime_dependency(%q<polyglot>, ["~> 0.3"])
28
+ spec.add_development_dependency(%q<activesupport>, ["~> 4"])
29
+ spec.add_development_dependency(%q<i18n>, ["~> 0.6"])
30
+ spec.add_development_dependency(%q<rr>, ["~> 1.0"])
31
+ spec.add_development_dependency(%q<rspec>, ["~> 3"])
32
+ spec.add_development_dependency(%q<rake>, ["~> 11"])
165
33
  end
166
34