treetop 1.6.2 → 1.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +8 -1
- data/doc/syntactic_recognition.markdown +3 -0
- data/examples/indented_blocks/indented_blocks.tt +73 -0
- data/examples/indented_blocks/indented_blocks_test.rb +24 -0
- data/examples/inner_outer.rb +51 -0
- data/examples/inner_outer.tt +14 -0
- data/examples/numerals.rb +210 -0
- data/examples/numerals.tt +21 -0
- data/lib/treetop/compiler/metagrammar.rb +3 -57
- data/lib/treetop/compiler/metagrammar.treetop +3 -57
- data/lib/treetop/compiler/node_classes/anything_symbol.rb +1 -1
- data/lib/treetop/compiler/node_classes/character_class.rb +1 -1
- data/lib/treetop/compiler/node_classes/choice.rb +5 -5
- data/lib/treetop/compiler/node_classes/nonterminal.rb +2 -2
- data/lib/treetop/compiler/node_classes/parsing_expression.rb +2 -8
- data/lib/treetop/compiler/node_classes/repetition.rb +6 -6
- data/lib/treetop/compiler/node_classes/sequence.rb +1 -1
- data/lib/treetop/compiler/node_classes/terminal.rb +1 -7
- data/lib/treetop/runtime/syntax_node.rb +13 -20
- data/lib/treetop/version.rb +1 -1
- data/spec/compiler/choice_spec.rb +10 -19
- data/spec/compiler/grammar_compiler_spec.rb +4 -4
- data/spec/compiler/parenthesized_expression_spec.rb +0 -11
- data/spec/compiler/tt_compiler_spec.rb +40 -40
- data/spec/compiler/zero_or_more_spec.rb +0 -2
- data/spec/spec_helper.rb +1 -1
- data/treetop.gemspec +10 -5
- metadata +14 -8
@@ -9,7 +9,7 @@ module Treetop
|
|
9
9
|
builder.if__ "#{accumulator_var}.last" do
|
10
10
|
assign_result "instantiate_node(#{node_class_name},input, #{start_index_var}...index, #{accumulator_var})"
|
11
11
|
extend_result sequence_element_accessor_module_name if sequence_element_accessor_module_name
|
12
|
-
extend_result_with_inline_module
|
12
|
+
extend_result_with_inline_module
|
13
13
|
end
|
14
14
|
builder.else_ do
|
15
15
|
reset_index
|
@@ -25,13 +25,7 @@ module Treetop
|
|
25
25
|
builder.if__ "(match_len = has_terminal?(#{str}, #{mode}, index))" do
|
26
26
|
if address == 0 || decorated? || mode != 'false' || string_length > 1
|
27
27
|
assign_result "instantiate_node(#{node_class_name},input, index...(index + match_len))"
|
28
|
-
|
29
|
-
# extend_result_with_inline_module parent_expression
|
30
|
-
if parent_expression
|
31
|
-
parent_expression.inline_modules.each do |inline|
|
32
|
-
extend_result inline.module_name
|
33
|
-
end
|
34
|
-
end
|
28
|
+
extend_result_with_inline_module
|
35
29
|
else
|
36
30
|
assign_lazily_instantiated_node
|
37
31
|
end
|
@@ -60,7 +60,7 @@ module Treetop
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
def
|
63
|
+
def inspect(indent="")
|
64
64
|
em = extension_modules
|
65
65
|
interesting_methods = methods-[em.last ? em.last.methods : nil]-self.class.instance_methods
|
66
66
|
im = interesting_methods.size > 0 ? " (#{interesting_methods.join(",")})" : ""
|
@@ -72,25 +72,18 @@ module Treetop
|
|
72
72
|
em.map{|m| "+"+m.to_s.sub(/.*:/,'')}*"" +
|
73
73
|
" offset=#{interval.first}" +
|
74
74
|
", #{tv.inspect}" +
|
75
|
-
im
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
end.
|
88
|
-
join("")
|
89
|
-
end
|
90
|
-
|
91
|
-
def inspect(indent="")
|
92
|
-
inspect_self(indent) +
|
93
|
-
inspect_children(indent)
|
75
|
+
im +
|
76
|
+
(elements && elements.size > 0 ?
|
77
|
+
":" +
|
78
|
+
(elements||[]).map{|e|
|
79
|
+
begin
|
80
|
+
"\n"+e.inspect(indent+" ")
|
81
|
+
rescue # Defend against inspect not taking a parameter
|
82
|
+
"\n"+indent+" "+e.inspect
|
83
|
+
end
|
84
|
+
}.join("") :
|
85
|
+
""
|
86
|
+
)
|
94
87
|
end
|
95
88
|
|
96
89
|
@@dot_id_counter = 0
|
data/lib/treetop/version.rb
CHANGED
@@ -2,31 +2,22 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module ChoiceSpec
|
4
4
|
describe "A choice between terminal symbols" do
|
5
|
-
testing_expression '
|
5
|
+
testing_expression '"foo" { def foo_method; end } / "bar" { def bar_method; end } / "baz" { def baz_method; end }'
|
6
6
|
|
7
7
|
it "successfully parses input matching any of the alternatives, returning a node that responds to methods defined in its respective inline module" do
|
8
8
|
result = parse('foo')
|
9
9
|
result.should_not be_nil
|
10
10
|
result.should respond_to(:foo_method)
|
11
|
-
|
12
|
-
result.should_not respond_to(:baz_method)
|
13
|
-
result.should respond_to(:bat_method)
|
14
|
-
|
11
|
+
|
15
12
|
result = parse('bar')
|
16
13
|
result.should_not be_nil
|
17
|
-
result.should_not respond_to(:foo_method)
|
18
14
|
result.should respond_to(:bar_method)
|
19
|
-
|
20
|
-
result.should respond_to(:bat_method)
|
21
|
-
|
15
|
+
|
22
16
|
result = parse('baz')
|
23
17
|
result.should_not be_nil
|
24
|
-
result.should_not respond_to(:foo_method)
|
25
|
-
result.should_not respond_to(:bar_method)
|
26
18
|
result.should respond_to(:baz_method)
|
27
|
-
result.should respond_to(:bat_method)
|
28
19
|
end
|
29
|
-
|
20
|
+
|
30
21
|
it "upon parsing a string matching the second alternative, records the failure of the first terminal" do
|
31
22
|
result = parse('bar')
|
32
23
|
terminal_failures = parser.terminal_failures
|
@@ -35,18 +26,18 @@ module ChoiceSpec
|
|
35
26
|
failure.expected_string.should == '"foo"'
|
36
27
|
failure.index.should == 0
|
37
28
|
end
|
38
|
-
|
29
|
+
|
39
30
|
it "upon parsing a string matching the third alternative, records the failure of the first two terminals" do
|
40
31
|
result = parse('baz')
|
41
|
-
|
32
|
+
|
42
33
|
terminal_failures = parser.terminal_failures
|
43
|
-
|
34
|
+
|
44
35
|
terminal_failures.size.should == 2
|
45
36
|
|
46
37
|
failure_1 = terminal_failures[0]
|
47
38
|
failure_1.expected_string == 'foo'
|
48
39
|
failure_1.index.should == 0
|
49
|
-
|
40
|
+
|
50
41
|
failure_2 = terminal_failures[1]
|
51
42
|
failure_2.expected_string == 'bar'
|
52
43
|
failure_2.index.should == 0
|
@@ -62,7 +53,7 @@ module ChoiceSpec
|
|
62
53
|
end
|
63
54
|
end
|
64
55
|
|
65
|
-
describe "A choice between terminals followed by a block" do
|
56
|
+
describe "A choice between terminals followed by a block" do
|
66
57
|
testing_expression "('a'/ 'bb' / [c]) { def a_method; end }"
|
67
58
|
|
68
59
|
it "extends a match of any of its subexpressions with a module created from the block" do
|
@@ -77,7 +68,7 @@ module ChoiceSpec
|
|
77
68
|
end
|
78
69
|
end
|
79
70
|
|
80
|
-
describe "a choice followed by a declared module" do
|
71
|
+
describe "a choice followed by a declared module" do
|
81
72
|
testing_expression "('a'/ 'bb' / [c]) <ChoiceSpec::TestModule>"
|
82
73
|
|
83
74
|
it "extends a match of any of its subexpressions with a module created from the block" do
|
@@ -32,17 +32,17 @@ describe Compiler::GrammarCompiler do
|
|
32
32
|
specify "compilation of a single file to a default file name" do
|
33
33
|
src_copy = "#{@tmpdir}/test_grammar.treetop"
|
34
34
|
File.open(source_path_with_treetop_extension) { |f| File.open(src_copy,'w'){|o|o.write(f.read)} }
|
35
|
-
File.exists?(target_path).should
|
35
|
+
File.exists?(target_path).should be_falsey
|
36
36
|
compiler.compile(src_copy)
|
37
|
-
File.exists?(target_path).should
|
37
|
+
File.exists?(target_path).should be_truthy
|
38
38
|
require target_path
|
39
39
|
Test::GrammarParser.new.parse('foo').should_not be_nil
|
40
40
|
end
|
41
41
|
|
42
42
|
specify "compilation of a single file to an explicit file name" do
|
43
|
-
File.exists?(alternate_target_path).should
|
43
|
+
File.exists?(alternate_target_path).should be_falsy
|
44
44
|
compiler.compile(source_path_with_treetop_extension, alternate_target_path)
|
45
|
-
File.exists?(alternate_target_path).should
|
45
|
+
File.exists?(alternate_target_path).should be_truthy
|
46
46
|
require alternate_target_path
|
47
47
|
Test::GrammarParser.new.parse('foo').should_not be_nil
|
48
48
|
end
|
@@ -19,15 +19,4 @@ module ParenthesizedExpressionSpec
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
23
|
-
describe "An expression with code both inside and outside parentheses" do
|
24
|
-
testing_expression '("foo" { def inner; end } ) { def outer; end} '
|
25
|
-
it "should extend both code modules " do
|
26
|
-
parse('foo') do |result|
|
27
|
-
result.should respond_to(:inner)
|
28
|
-
result.should respond_to(:outer)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
22
|
end
|
@@ -34,36 +34,36 @@ describe "The 'tt' comand line compiler" do
|
|
34
34
|
|
35
35
|
it 'can compile a grammar file' do
|
36
36
|
# puts %q{emulate 'tt dumb.tt'}
|
37
|
-
system("ruby -S tt #{@test_grammar}").should
|
37
|
+
system("ruby -S tt #{@test_grammar}").should be_truthy
|
38
38
|
|
39
|
-
File.exists?(@test_ruby).should
|
40
|
-
File.zero?(@test_ruby).should_not
|
39
|
+
File.exists?(@test_ruby).should be_truthy
|
40
|
+
File.zero?(@test_ruby).should_not be_truthy
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'can compile a relative pathed grammar file' do
|
44
44
|
dir = File.basename(File.expand_path(File.dirname(@test_grammar)))
|
45
45
|
|
46
46
|
# puts %q{emulate 'tt "../<current_dir>/dumb.tt"'}
|
47
|
-
system("cd #{@tmpdir}/..; ruby -S tt \"./#{dir}/#{@test_base}.tt\"").should
|
47
|
+
system("cd #{@tmpdir}/..; ruby -S tt \"./#{dir}/#{@test_base}.tt\"").should be_truthy
|
48
48
|
|
49
|
-
File.exists?(@test_ruby).should
|
50
|
-
File.zero?(@test_ruby).should_not
|
49
|
+
File.exists?(@test_ruby).should be_truthy
|
50
|
+
File.zero?(@test_ruby).should_not be_truthy
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'can compile an absolute pathed grammar file' do
|
54
54
|
# puts %q{emulate 'tt "/path/to/dumb.tt"'}
|
55
|
-
system("ruby -S tt \"#{File.expand_path(@test_grammar)}\"").should
|
55
|
+
system("ruby -S tt \"#{File.expand_path(@test_grammar)}\"").should be_truthy
|
56
56
|
|
57
|
-
File.exists?(@test_ruby).should
|
58
|
-
File.zero?(@test_ruby).should_not
|
57
|
+
File.exists?(@test_ruby).should be_truthy
|
58
|
+
File.zero?(@test_ruby).should_not be_truthy
|
59
59
|
end
|
60
60
|
|
61
61
|
it 'can compile without explicit file extensions' do
|
62
62
|
# puts %q{emulate 'tt dumb'}
|
63
|
-
system("ruby -S tt #{@test_path}").should
|
63
|
+
system("ruby -S tt #{@test_path}").should be_truthy
|
64
64
|
|
65
|
-
File.exists?(@test_ruby).should
|
66
|
-
File.zero?(@test_ruby).should_not
|
65
|
+
File.exists?(@test_ruby).should be_truthy
|
66
|
+
File.zero?(@test_ruby).should_not be_truthy
|
67
67
|
end
|
68
68
|
|
69
69
|
it 'skips nonexistent grammar file without failing or creating bogus output' do
|
@@ -72,17 +72,17 @@ describe "The 'tt' comand line compiler" do
|
|
72
72
|
(io.read =~ /ERROR.*?not exist.*?continuing/).should_not be_nil
|
73
73
|
end
|
74
74
|
|
75
|
-
File.exists?("#{@test_base}.rb").should
|
75
|
+
File.exists?("#{@test_base}.rb").should be_falsy
|
76
76
|
end
|
77
77
|
|
78
78
|
it 'can compile to a specified parser source file' do
|
79
79
|
# puts %q{emulate 'tt -o my_dumb_test_parser.rb dumb'}
|
80
80
|
pf = "#{@tmpdir}/my_dumb_test_parser.rb"
|
81
81
|
begin
|
82
|
-
system("ruby -S tt -o #{pf} #{@test_path}").should
|
82
|
+
system("ruby -S tt -o #{pf} #{@test_path}").should be_truthy
|
83
83
|
|
84
|
-
File.exists?(pf).should
|
85
|
-
File.zero?(pf).should_not
|
84
|
+
File.exists?(pf).should be_truthy
|
85
|
+
File.zero?(pf).should_not be_truthy
|
86
86
|
ensure
|
87
87
|
File.delete(pf) if File.exists?(pf)
|
88
88
|
end
|
@@ -92,10 +92,10 @@ describe "The 'tt' comand line compiler" do
|
|
92
92
|
# puts %q{emulate 'tt -o must_save_parser.rb dumb'}
|
93
93
|
pf = "#{@tmpdir}/must_save_parser.rb"
|
94
94
|
begin
|
95
|
-
system("ruby -S tt -o #{pf} #{@test_path}").should
|
95
|
+
system("ruby -S tt -o #{pf} #{@test_path}").should be_truthy
|
96
96
|
|
97
|
-
File.exists?(pf).should
|
98
|
-
File.zero?(pf).should_not
|
97
|
+
File.exists?(pf).should be_truthy
|
98
|
+
File.zero?(pf).should_not be_truthy
|
99
99
|
|
100
100
|
# Check that the magic comment is preserved:
|
101
101
|
written = File.open(pf, "r") { |f| s = f.read }
|
@@ -121,16 +121,16 @@ describe "The 'tt' comand line compiler" do
|
|
121
121
|
# puts %q{emulate 'tt -o must_save_parser.rb dumb'}
|
122
122
|
pf = "#{@tmpdir}/must_save_parser.rb"
|
123
123
|
begin
|
124
|
-
system("ruby -S tt -o #{pf} #{@test_path}").should
|
124
|
+
system("ruby -S tt -o #{pf} #{@test_path}").should be_truthy
|
125
125
|
|
126
|
-
File.exists?(pf).should
|
127
|
-
File.zero?(pf).should_not
|
126
|
+
File.exists?(pf).should be_truthy
|
127
|
+
File.zero?(pf).should_not be_truthy
|
128
128
|
orig_file_hash = Digest::SHA1.hexdigest(File.read(pf))
|
129
129
|
|
130
130
|
# Modify the file and make sure it gets reverted:
|
131
131
|
File.open(pf, "r+") { |f| f.gets; f.write("#") }
|
132
132
|
|
133
|
-
system("ruby -S tt -o #{pf} #{@test_path}").should
|
133
|
+
system("ruby -S tt -o #{pf} #{@test_path}").should be_truthy
|
134
134
|
Digest::SHA1.hexdigest(File.read(pf)).should == orig_file_hash
|
135
135
|
ensure
|
136
136
|
File.delete(pf) if File.exists?(pf)
|
@@ -139,13 +139,13 @@ describe "The 'tt' comand line compiler" do
|
|
139
139
|
|
140
140
|
it 'can be forced to overwrite existing file #{@test_path}' do
|
141
141
|
pf = "#{@test_path}.rb"
|
142
|
-
system("echo some junk >#{pf}").should
|
142
|
+
system("echo some junk >#{pf}").should be_truthy
|
143
143
|
|
144
|
-
File.exists?(pf).should
|
145
|
-
File.zero?(pf).should_not
|
144
|
+
File.exists?(pf).should be_truthy
|
145
|
+
File.zero?(pf).should_not be_truthy
|
146
146
|
orig_file_hash = Digest::SHA1.hexdigest(File.read(pf))
|
147
147
|
|
148
|
-
system("ruby -S tt -f #{@test_path}").should
|
148
|
+
system("ruby -S tt -f #{@test_path}").should be_truthy
|
149
149
|
Digest::SHA1.hexdigest(File.read(pf)).should_not == orig_file_hash
|
150
150
|
end
|
151
151
|
|
@@ -179,45 +179,45 @@ describe "The 'tt' comand line compiler" do
|
|
179
179
|
|
180
180
|
it 'can compile them in one invocation' do
|
181
181
|
# puts %q{emulate 'tt dumb1.tt dumb2.tt'}
|
182
|
-
system("ruby -S tt #{@test_grammars.join(' ')}").should
|
182
|
+
system("ruby -S tt #{@test_grammars.join(' ')}").should be_truthy
|
183
183
|
|
184
184
|
@test_bases.each do |f|
|
185
185
|
pf = "#{f}.rb"
|
186
|
-
File.exists?(pf).should
|
187
|
-
File.zero?(pf).should_not
|
186
|
+
File.exists?(pf).should be_truthy
|
187
|
+
File.zero?(pf).should_not be_truthy
|
188
188
|
end
|
189
189
|
end
|
190
190
|
|
191
191
|
it 'can compile them without explicit file extenstions' do
|
192
192
|
# puts %q{emulate 'tt dumb1 dumb2'}
|
193
|
-
system("ruby -S tt #{@test_bases.join(' ')}").should
|
193
|
+
system("ruby -S tt #{@test_bases.join(' ')}").should be_truthy
|
194
194
|
|
195
195
|
@test_bases.each do |f|
|
196
196
|
pf = "#{f}.rb"
|
197
|
-
File.exists?(pf).should
|
198
|
-
File.zero?(pf).should_not
|
197
|
+
File.exists?(pf).should be_truthy
|
198
|
+
File.zero?(pf).should_not be_truthy
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
202
|
it 'can skip nonexistent and invalid extension named grammar files' do
|
203
203
|
# puts %q{emulate 'tt not_here bad_ext.ttg dumb1 dumb2'}
|
204
|
-
system("ruby -S tt not_here bad_ext.ttg #{@test_bases.join(' ')} >/dev/null 2>&1").should
|
204
|
+
system("ruby -S tt not_here bad_ext.ttg #{@test_bases.join(' ')} >/dev/null 2>&1").should be_truthy
|
205
205
|
|
206
|
-
File.exists?('not_here.rb').should_not
|
207
|
-
File.exists?('bad_ext.rb').should_not
|
206
|
+
File.exists?('not_here.rb').should_not be_truthy
|
207
|
+
File.exists?('bad_ext.rb').should_not be_truthy
|
208
208
|
|
209
209
|
@test_bases.each do |f|
|
210
210
|
pf = "#{f}.rb"
|
211
|
-
File.exists?(pf).should
|
212
|
-
File.zero?(pf).should_not
|
211
|
+
File.exists?(pf).should be_truthy
|
212
|
+
File.zero?(pf).should_not be_truthy
|
213
213
|
end
|
214
214
|
end
|
215
215
|
|
216
216
|
it 'can not specify an output file' do
|
217
217
|
# puts %q{emulate 'tt -o my_bogus_test_parser.rb dumb1 dumb2'}
|
218
218
|
pf = 'my_bogus_test_parser.rb'
|
219
|
-
system("ruby -S tt -o #{pf} #{@test_bases.join(' ')} >/dev/null 2>&1").should
|
220
|
-
File.exists?(pf).should
|
219
|
+
system("ruby -S tt -o #{pf} #{@test_bases.join(' ')} >/dev/null 2>&1").should be_falsy
|
220
|
+
File.exists?(pf).should be_falsy
|
221
221
|
end
|
222
222
|
end
|
223
223
|
|
@@ -5,8 +5,6 @@ module ZeroOrMoreSpec
|
|
5
5
|
end
|
6
6
|
|
7
7
|
describe "zero or more of a terminal symbol followed by a node class declaration and a block" do
|
8
|
-
# testing_expression '("foo" { def b_method; end } )* <ZeroOrMoreSpec::Foo> { def a_method; end }'
|
9
|
-
# testing_expression '("foo" { def a_method; end } )* <ZeroOrMoreSpec::Foo>'
|
10
8
|
testing_expression '"foo"* <ZeroOrMoreSpec::Foo> { def a_method; end }'
|
11
9
|
|
12
10
|
it "successfully parses epsilon, returning an instance declared node class and recording a terminal failure" do
|
data/spec/spec_helper.rb
CHANGED
@@ -63,7 +63,7 @@ module Treetop
|
|
63
63
|
def parse_multibyte(input, options = {})
|
64
64
|
require 'active_support/all'
|
65
65
|
|
66
|
-
if RUBY_VERSION !~ /^(1\.9|2\.
|
66
|
+
if RUBY_VERSION !~ /^(1\.9|2\.)/ && 'NONE' == $KCODE then $KCODE = 'UTF8' end
|
67
67
|
# rspec 1.3 used to do something similar (set it to 'u') that we need
|
68
68
|
# for activerecord multibyte wrapper to kick in (1.8 only? @todo)
|
69
69
|
|
data/treetop.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: treetop 1.
|
5
|
+
# stub: treetop 1.6.3 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "treetop"
|
9
|
-
s.version = "1.
|
9
|
+
s.version = "1.6.3"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Nathan Sobo", "Clifford Heath"]
|
14
|
-
s.
|
15
|
-
s.
|
14
|
+
s.date = "2015-06-30"
|
15
|
+
s.description = "A Parsing Expression Grammar (PEG) Parser generator DSL for Ruby"
|
16
16
|
s.email = "cliffordheath@gmail.com"
|
17
17
|
s.executables = ["tt"]
|
18
18
|
s.extra_rdoc_files = [
|
@@ -34,16 +34,21 @@ Gem::Specification.new do |s|
|
|
34
34
|
"doc/syntactic_recognition.markdown",
|
35
35
|
"doc/tt.1",
|
36
36
|
"doc/using_in_ruby.markdown",
|
37
|
+
"examples/indented_blocks/indented_blocks.tt",
|
38
|
+
"examples/indented_blocks/indented_blocks_test.rb",
|
39
|
+
"examples/inner_outer.rb",
|
40
|
+
"examples/inner_outer.tt",
|
37
41
|
"examples/lambda_calculus/arithmetic.rb",
|
38
42
|
"examples/lambda_calculus/arithmetic.treetop",
|
39
43
|
"examples/lambda_calculus/arithmetic_node_classes.rb",
|
40
44
|
"examples/lambda_calculus/arithmetic_test.rb",
|
41
|
-
"examples/lambda_calculus/lambda_calculus",
|
42
45
|
"examples/lambda_calculus/lambda_calculus.rb",
|
43
46
|
"examples/lambda_calculus/lambda_calculus.treetop",
|
44
47
|
"examples/lambda_calculus/lambda_calculus_node_classes.rb",
|
45
48
|
"examples/lambda_calculus/lambda_calculus_test.rb",
|
46
49
|
"examples/lambda_calculus/test_helper.rb",
|
50
|
+
"examples/numerals.rb",
|
51
|
+
"examples/numerals.tt",
|
47
52
|
"lib/treetop.rb",
|
48
53
|
"lib/treetop/bootstrap_gen_1_metagrammar.rb",
|
49
54
|
"lib/treetop/compiler.rb",
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: treetop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Sobo
|
8
8
|
- Clifford Heath
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-06-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: polyglot
|
@@ -99,17 +99,17 @@ dependencies:
|
|
99
99
|
name: rake
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- - "
|
102
|
+
- - "~>"
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version: '
|
104
|
+
version: '10'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- - "
|
109
|
+
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: '
|
112
|
-
description:
|
111
|
+
version: '10'
|
112
|
+
description: A Parsing Expression Grammar (PEG) Parser generator DSL for Ruby
|
113
113
|
email: cliffordheath@gmail.com
|
114
114
|
executables:
|
115
115
|
- tt
|
@@ -132,6 +132,10 @@ files:
|
|
132
132
|
- doc/syntactic_recognition.markdown
|
133
133
|
- doc/tt.1
|
134
134
|
- doc/using_in_ruby.markdown
|
135
|
+
- examples/indented_blocks/indented_blocks.tt
|
136
|
+
- examples/indented_blocks/indented_blocks_test.rb
|
137
|
+
- examples/inner_outer.rb
|
138
|
+
- examples/inner_outer.tt
|
135
139
|
- examples/lambda_calculus/arithmetic.rb
|
136
140
|
- examples/lambda_calculus/arithmetic.treetop
|
137
141
|
- examples/lambda_calculus/arithmetic_node_classes.rb
|
@@ -141,6 +145,8 @@ files:
|
|
141
145
|
- examples/lambda_calculus/lambda_calculus_node_classes.rb
|
142
146
|
- examples/lambda_calculus/lambda_calculus_test.rb
|
143
147
|
- examples/lambda_calculus/test_helper.rb
|
148
|
+
- examples/numerals.rb
|
149
|
+
- examples/numerals.tt
|
144
150
|
- lib/treetop.rb
|
145
151
|
- lib/treetop/bootstrap_gen_1_metagrammar.rb
|
146
152
|
- lib/treetop/compiler.rb
|