sexpr 0.3.0 → 0.4.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.
- data/CHANGELOG.md +29 -0
- data/README.md +28 -2
- data/examples/bool_expr/bool_expr.citrus +6 -6
- data/examples/bool_expr/bool_expr.rb +68 -1
- data/lib/sexpr.rb +29 -22
- data/lib/sexpr/errors.rb +3 -0
- data/lib/sexpr/grammar.rb +7 -6
- data/lib/sexpr/grammar/options.rb +3 -0
- data/lib/sexpr/grammar/parsing.rb +6 -1
- data/lib/sexpr/grammar/tagging.rb +30 -11
- data/lib/sexpr/node.rb +30 -0
- data/lib/sexpr/parser.rb +2 -2
- data/lib/sexpr/parser/citrus.rb +6 -17
- data/lib/sexpr/parser/ext.rb +9 -0
- data/lib/sexpr/processor.rb +61 -0
- data/lib/sexpr/processor/helper.rb +31 -0
- data/lib/sexpr/processor/null_helper.rb +11 -0
- data/lib/sexpr/processor/sexpr_coercions.rb +44 -0
- data/lib/sexpr/rewriter.rb +20 -0
- data/lib/sexpr/version.rb +1 -1
- data/sexpr.noespec +1 -1
- data/spec/grammar/test_parse.rb +10 -6
- data/spec/grammar/test_sexpr.rb +47 -13
- data/spec/node/test_sexpr_copy.rb +35 -0
- data/spec/node/test_tracking_markers.rb +21 -0
- data/spec/parser/citrus/test_new.rb +0 -4
- data/spec/parser/citrus/test_parse.rb +4 -0
- data/spec/parser/citrus/test_registration.rb +0 -6
- data/spec/parser/citrus/test_to_sexpr.rb +22 -7
- data/spec/processor/helper/test_call.rb +51 -0
- data/spec/processor/test_build_helper_chain.rb +24 -0
- data/spec/processor/test_call.rb +46 -0
- data/spec/processor/test_helper.rb +19 -0
- data/spec/processor/test_main_processor.rb +18 -0
- data/spec/processor/test_sexpr_coercions.rb +46 -0
- data/spec/rewriter/test_copy_and_apply.rb +29 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/test_readme_examples.rb +11 -0
- data/spec/test_rewriter.rb +16 -0
- metadata +106 -80
@@ -8,6 +8,10 @@ module Sexpr::Parser
|
|
8
8
|
parser.parse("true").should be_a(::Citrus::Match)
|
9
9
|
end
|
10
10
|
|
11
|
+
it 'is idempotent' do
|
12
|
+
parser.parse(parser.parse("true")).should be_a(::Citrus::Match)
|
13
|
+
end
|
14
|
+
|
11
15
|
it 'raises a Citrus::ParserError when parsing fails' do
|
12
16
|
lambda{
|
13
17
|
parser.parse("bl and or")
|
@@ -10,11 +10,5 @@ module Sexpr::Parser
|
|
10
10
|
Sexpr::Parser.factor(bool_expr_parser).should be_a(Citrus)
|
11
11
|
end
|
12
12
|
|
13
|
-
it 'should accept factor options, defaulting to defaults' do
|
14
|
-
cit = Sexpr::Parser.factor(bool_expr_parser, {:hello => "World"})
|
15
|
-
cit.options[:hello].should eq("World")
|
16
|
-
cit.options.should have_key(:from_match_to_sexpr)
|
17
|
-
end
|
18
|
-
|
19
13
|
end
|
20
14
|
end
|
@@ -1,15 +1,30 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
module Sexpr::Parser
|
3
|
-
describe Citrus, "
|
3
|
+
describe Citrus, "to_sexpr" do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
let(:parser){
|
6
|
+
Citrus.new(bool_expr_parser)
|
7
|
+
}
|
8
|
+
|
9
|
+
subject{ parser.to_sexpr(parser.parse("not x")) }
|
10
|
+
|
11
|
+
it 'calls sexpr' do
|
12
|
+
subject.should eq([:bool_not, [:var_ref, "x"]])
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'returns a Sexpr object' do
|
16
|
+
subject.should be_a(Sexpr)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'tags the modules recursively' do
|
20
|
+
subject.last.should be_a(Sexpr)
|
8
21
|
end
|
9
22
|
|
10
|
-
it '
|
11
|
-
|
12
|
-
|
23
|
+
it 'sets the markers' do
|
24
|
+
[subject, subject.last].each do |s|
|
25
|
+
s.tracking_markers.should be_a(Hash)
|
26
|
+
s.tracking_markers[:citrus_match].should_not be_nil
|
27
|
+
end
|
13
28
|
end
|
14
29
|
|
15
30
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Sexpr
|
3
|
+
class Processor
|
4
|
+
describe Helper, "call" do
|
5
|
+
|
6
|
+
let(:helper) { FooHelper.new }
|
7
|
+
let(:processor) { FooProcessor.new }
|
8
|
+
let(:toplevel) {
|
9
|
+
Proc.new do |rw,node|
|
10
|
+
rw.should eq(processor)
|
11
|
+
[:toplevel, node]
|
12
|
+
end
|
13
|
+
}
|
14
|
+
|
15
|
+
it 'dispatches to the method when it exists' do
|
16
|
+
expected = \
|
17
|
+
[:foo_hello,
|
18
|
+
[:toplevel,
|
19
|
+
[:hello, "world"] ]]
|
20
|
+
got = helper.call(processor, [:hello, "world"], &toplevel)
|
21
|
+
got.should eq(expected)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'falls back to yielding when no method' do
|
25
|
+
expected = \
|
26
|
+
[:toplevel,
|
27
|
+
[:nosuchone] ]
|
28
|
+
got = helper.call(processor, [:nosuchone], &toplevel)
|
29
|
+
got.should eq(expected)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'calls next_in_chain when set' do
|
33
|
+
helper.next_in_chain = Class.new do
|
34
|
+
def call(rw, node)
|
35
|
+
raise unless rw.is_a?(FooProcessor)
|
36
|
+
yield rw, [:next, node]
|
37
|
+
end
|
38
|
+
end.new
|
39
|
+
|
40
|
+
expected = \
|
41
|
+
[:foo_hello,
|
42
|
+
[:toplevel,
|
43
|
+
[:next,
|
44
|
+
[:hello, "world"] ]]]
|
45
|
+
got = helper.call(processor, [:hello, "world"], &toplevel)
|
46
|
+
got.should eq(expected)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Sexpr
|
3
|
+
describe Processor, "build_helper_chain" do
|
4
|
+
|
5
|
+
def chain(helpers)
|
6
|
+
Processor.build_helper_chain(helpers)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'returns a NullHelper instance when the chain is empty' do
|
10
|
+
chain([]).should be_a(Processor::NullHelper)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'returns an instance of the first helper when a singleton chain' do
|
14
|
+
chain([ FooHelper ]).should be_a(FooHelper)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'returns chained helpers when a list' do
|
18
|
+
chain = chain([ FooHelper, BarHelper ])
|
19
|
+
chain.should be_a(FooHelper)
|
20
|
+
chain.next_in_chain.should be_a(BarHelper)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Sexpr
|
3
|
+
describe Processor, 'call' do
|
4
|
+
|
5
|
+
let(:procclass){
|
6
|
+
Class.new(Processor) do
|
7
|
+
|
8
|
+
def on_hello(sexpr)
|
9
|
+
[:seen_hello, sexpr]
|
10
|
+
end
|
11
|
+
|
12
|
+
def on_missing(sexpr)
|
13
|
+
if sexpr.first == :nosuchone
|
14
|
+
[:seen_missing, sexpr]
|
15
|
+
else
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
}
|
22
|
+
let(:proc){ procclass.new }
|
23
|
+
|
24
|
+
it 'dispatches to existing methods' do
|
25
|
+
ast = [:hello, "world"]
|
26
|
+
proc.call(ast).should eq([:seen_hello, [:hello, "world"]])
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'calls on_missing when not found' do
|
30
|
+
ast = [:nosuchone, "world"]
|
31
|
+
proc.call(ast).should eq([:seen_missing, [:nosuchone, "world"]])
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'raises unexpected by default in on_missing' do
|
35
|
+
ast = [:nonono, "world"]
|
36
|
+
lambda{ proc.call(ast) }.should raise_error(UnexpectedSexprError, /nonono/)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'raises an ArgumentError unless called on a sexpr' do
|
40
|
+
lambda{
|
41
|
+
proc.call("world").should raise_error(ArgumentError, /world/)
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Sexpr
|
3
|
+
describe Processor, "helper" do
|
4
|
+
|
5
|
+
it 'installs the helping class in the registered helpers' do
|
6
|
+
Processor.helpers.should eq([])
|
7
|
+
FooProcessor.helpers.should eq([FooHelper])
|
8
|
+
BarProcessor.helpers.should eq([FooHelper, BarHelper])
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'extends the processor classes with Methods modules' do
|
12
|
+
FooProcessor.included_modules.should be_include(FooHelper::Methods)
|
13
|
+
FooProcessor.included_modules.should_not be_include(BarHelper::Methods)
|
14
|
+
BarProcessor.included_modules.should be_include(FooHelper::Methods)
|
15
|
+
BarProcessor.included_modules.should be_include(BarHelper::Methods)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Sexpr
|
3
|
+
describe Processor, "main_processor" do
|
4
|
+
|
5
|
+
let(:procclass){ Class.new(Processor) }
|
6
|
+
|
7
|
+
it 'defaults to self' do
|
8
|
+
proc = procclass.new
|
9
|
+
proc.main_processor.should eq(proc)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'may be specified through options' do
|
13
|
+
proc = procclass.new(:main_processor => :hello)
|
14
|
+
proc.main_processor.should eq(:hello)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Sexpr
|
3
|
+
class Processor
|
4
|
+
describe SexprCoercions do
|
5
|
+
|
6
|
+
let(:helper){ SexprCoercions.new }
|
7
|
+
let(:processor){ Processor.new }
|
8
|
+
|
9
|
+
it 'extends input sexprs' do
|
10
|
+
sexpr = [:hello, "world"]
|
11
|
+
seen = helper.call(processor, sexpr) do |_,n|
|
12
|
+
n.should be_a(Sexpr)
|
13
|
+
n
|
14
|
+
end
|
15
|
+
seen.should eq(sexpr)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'extends output sexprs' do
|
19
|
+
sexpr = [:hello, "world"]
|
20
|
+
seen = helper.call(processor, sexpr) do |_,n|
|
21
|
+
n.should be_a(Sexpr)
|
22
|
+
[:result]
|
23
|
+
end
|
24
|
+
seen.should eq([:result])
|
25
|
+
seen.should be_a(Sexpr)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'does not require the output to be a sexpr' do
|
29
|
+
sexpr = [:hello, "world"]
|
30
|
+
seen = helper.call(processor, sexpr) do |_,n|
|
31
|
+
n.should be_a(Sexpr)
|
32
|
+
"blah"
|
33
|
+
end
|
34
|
+
seen.should eq("blah")
|
35
|
+
seen.should_not be_a(Sexpr)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'fails with a string, unless the underlying grammar may parse' do
|
39
|
+
lambda{
|
40
|
+
helper.call(processor, "blah") do |_,n| end
|
41
|
+
}.should raise_error(NoParserError)
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Sexpr
|
3
|
+
describe Rewriter, "copy_and_apply" do
|
4
|
+
|
5
|
+
let(:rwclass){
|
6
|
+
Class.new(Rewriter){
|
7
|
+
def on_hello(sexpr)
|
8
|
+
copy_and_apply(sexpr)
|
9
|
+
end
|
10
|
+
def on_lit(sexpr)
|
11
|
+
[:lit, sexpr.last.upcase]
|
12
|
+
end
|
13
|
+
}
|
14
|
+
}
|
15
|
+
let(:rw){ rwclass.new }
|
16
|
+
|
17
|
+
it 'provides a friendly way of rewriting' do
|
18
|
+
sexpr = [:hello, [:lit, "world"]]
|
19
|
+
rw.call(sexpr).should eq([:hello, [:lit, "WORLD"]])
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'extends input and output sexpr with the Sexpr module' do
|
23
|
+
sexpr = [:hello, [:lit, "world"]]
|
24
|
+
rw.call(sexpr).should be_a(Sexpr)
|
25
|
+
sexpr.should be_a(Sexpr)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -7,6 +7,28 @@ $LOAD_PATH.unshift (root/"lib").to_s
|
|
7
7
|
require 'sexpr'
|
8
8
|
require (root/"examples/bool_expr/bool_expr").to_s
|
9
9
|
|
10
|
+
class FooHelper < Sexpr::Processor::Helper
|
11
|
+
module Methods
|
12
|
+
end
|
13
|
+
|
14
|
+
def on_hello(rw, node)
|
15
|
+
raise unless rw.is_a?(FooProcessor)
|
16
|
+
[:foo_hello, yield(rw, node)]
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
class FooProcessor < Sexpr::Processor
|
21
|
+
helper FooHelper
|
22
|
+
end
|
23
|
+
|
24
|
+
class BarHelper < Sexpr::Processor::Helper
|
25
|
+
module Methods
|
26
|
+
end
|
27
|
+
end
|
28
|
+
class BarProcessor < FooProcessor
|
29
|
+
helper BarHelper
|
30
|
+
end
|
31
|
+
|
10
32
|
def fixtures_path
|
11
33
|
Path.dir/"../examples/bool_expr"
|
12
34
|
end
|
@@ -43,12 +43,23 @@ describe "the README examples" do
|
|
43
43
|
# the grammar can also be used to automatically have support on top of
|
44
44
|
# such s-expressions
|
45
45
|
expr = grammar.sexpr([:bool_lit, true])
|
46
|
+
(Sexpr===expr).should be_true
|
46
47
|
|
47
48
|
(expr.sexpr_type).should eq(:bool_lit)
|
48
49
|
# => :bool_lit
|
49
50
|
|
50
51
|
(expr.sexpr_body).should eq([true])
|
51
52
|
# => [true]
|
53
|
+
|
54
|
+
copy = expr.sexpr_copy do |base,child|
|
55
|
+
# copy a s-expression ala Enumerable#inject (base is [:bool_lit] initially)
|
56
|
+
base << [:bool_lit, !child]
|
57
|
+
end
|
58
|
+
copy.should eq([:bool_lit, [:bool_lit, false]])
|
59
|
+
# => [:bool_lit, [:bool_lit, false]]
|
60
|
+
|
61
|
+
(Sexpr===copy).should be_true
|
62
|
+
|
52
63
|
end
|
53
64
|
|
54
65
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Sexpr
|
3
|
+
describe Rewriter do
|
4
|
+
|
5
|
+
it 'has a SexprCoercions helper by default' do
|
6
|
+
Rewriter.helpers.should eq([Processor::SexprCoercions])
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'allows subclassing while conserving helpers' do
|
10
|
+
subclass = Class.new(Rewriter)
|
11
|
+
subclass.helpers.should eq([Processor::SexprCoercions])
|
12
|
+
subclass.helpers.object_id.should_not eq(Rewriter.helpers.object_id)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sexpr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-23 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: epath
|
16
|
-
requirement: &
|
16
|
+
requirement: &84257100 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.0.1
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *84257100
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: citrus
|
27
|
-
requirement: &
|
27
|
+
requirement: &84256730 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '2.4'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *84256730
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &84256430 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.9.2
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *84256430
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &84256090 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.8.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *84256090
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: wlang
|
60
|
-
requirement: &
|
60
|
+
requirement: &84255790 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: 0.10.2
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *84255790
|
69
69
|
description: Sexpr helps manipulating s-expressions in ruby.
|
70
70
|
email:
|
71
71
|
- blambeau@gmail.com
|
@@ -81,78 +81,94 @@ files:
|
|
81
81
|
- CHANGELOG.md
|
82
82
|
- Gemfile
|
83
83
|
- Gemfile.lock
|
84
|
-
- examples/bool_expr/bool_expr.citrus
|
85
84
|
- examples/bool_expr/bool_expr.rb
|
85
|
+
- examples/bool_expr/bool_expr.citrus
|
86
86
|
- examples/bool_expr/bool_expr.sexp.yml
|
87
|
-
- lib/sexpr
|
88
|
-
- lib/sexpr/
|
89
|
-
- lib/sexpr/grammar/options.rb
|
90
|
-
- lib/sexpr/grammar/parsing.rb
|
91
|
-
- lib/sexpr/grammar/tagging.rb
|
92
|
-
- lib/sexpr/grammar.rb
|
93
|
-
- lib/sexpr/loader.rb
|
94
|
-
- lib/sexpr/matcher/alternative.rb
|
95
|
-
- lib/sexpr/matcher/many.rb
|
96
|
-
- lib/sexpr/matcher/reference.rb
|
87
|
+
- lib/sexpr.rb
|
88
|
+
- lib/sexpr/matcher/terminal.rb
|
97
89
|
- lib/sexpr/matcher/rule.rb
|
90
|
+
- lib/sexpr/matcher/alternative.rb
|
98
91
|
- lib/sexpr/matcher/sequence.rb
|
99
|
-
- lib/sexpr/matcher/
|
100
|
-
- lib/sexpr/matcher.rb
|
92
|
+
- lib/sexpr/matcher/reference.rb
|
93
|
+
- lib/sexpr/matcher/many.rb
|
94
|
+
- lib/sexpr/rewriter.rb
|
95
|
+
- lib/sexpr/grammar.rb
|
101
96
|
- lib/sexpr/node.rb
|
97
|
+
- lib/sexpr/processor/sexpr_coercions.rb
|
98
|
+
- lib/sexpr/processor/helper.rb
|
99
|
+
- lib/sexpr/processor/null_helper.rb
|
100
|
+
- lib/sexpr/processor.rb
|
102
101
|
- lib/sexpr/parser/citrus.rb
|
102
|
+
- lib/sexpr/parser/ext.rb
|
103
|
+
- lib/sexpr/errors.rb
|
104
|
+
- lib/sexpr/loader.rb
|
105
|
+
- lib/sexpr/grammar/parsing.rb
|
106
|
+
- lib/sexpr/grammar/tagging.rb
|
107
|
+
- lib/sexpr/grammar/options.rb
|
108
|
+
- lib/sexpr/grammar/matching.rb
|
103
109
|
- lib/sexpr/parser.rb
|
110
|
+
- lib/sexpr/matcher.rb
|
104
111
|
- lib/sexpr/version.rb
|
105
|
-
- lib/sexpr.rb
|
106
112
|
- LICENCE.md
|
107
113
|
- Manifest.txt
|
108
114
|
- Rakefile
|
109
115
|
- README.md
|
110
|
-
- spec/
|
111
|
-
- spec/grammar/matching/test_compile_rule_defn.rb
|
112
|
-
- spec/grammar/options/test_install_parser.rb
|
113
|
-
- spec/grammar/options/test_install_path.rb
|
114
|
-
- spec/grammar/options/test_install_root.rb
|
115
|
-
- spec/grammar/tagging/test_looks_a_sexpr.rb
|
116
|
-
- spec/grammar/tagging/test_mod2rulename.rb
|
117
|
-
- spec/grammar/tagging/test_rule2modname.rb
|
118
|
-
- spec/grammar/tagging/test_tag_sexpr.rb
|
119
|
-
- spec/grammar/test_new.rb
|
120
|
-
- spec/grammar/test_parse.rb
|
121
|
-
- spec/grammar/test_sexpr.rb
|
122
|
-
- spec/grammar.yml
|
123
|
-
- spec/matcher/alternative/test_eat.rb
|
124
|
-
- spec/matcher/alternative/test_match_q.rb
|
125
|
-
- spec/matcher/many/test_eat.rb
|
126
|
-
- spec/matcher/many/test_initialize.rb
|
127
|
-
- spec/matcher/many/test_match_q.rb
|
116
|
+
- spec/spec_helper.rb
|
128
117
|
- spec/matcher/reference/test_eat.rb
|
129
118
|
- spec/matcher/reference/test_match_q.rb
|
130
119
|
- spec/matcher/rule/test_eat.rb
|
131
120
|
- spec/matcher/rule/test_match_q.rb
|
121
|
+
- spec/matcher/many/test_eat.rb
|
122
|
+
- spec/matcher/many/test_initialize.rb
|
123
|
+
- spec/matcher/many/test_match_q.rb
|
132
124
|
- spec/matcher/sequence/test_eat.rb
|
133
125
|
- spec/matcher/sequence/test_match_q.rb
|
134
126
|
- spec/matcher/terminal/test_eat.rb
|
135
|
-
- spec/matcher/terminal/test_match_q.rb
|
136
127
|
- spec/matcher/terminal/test_terminal_match.rb
|
137
|
-
- spec/
|
138
|
-
- spec/
|
128
|
+
- spec/matcher/terminal/test_match_q.rb
|
129
|
+
- spec/matcher/alternative/test_eat.rb
|
130
|
+
- spec/matcher/alternative/test_match_q.rb
|
131
|
+
- spec/rewriter/test_copy_and_apply.rb
|
132
|
+
- spec/processor/test_helper.rb
|
133
|
+
- spec/processor/test_sexpr_coercions.rb
|
134
|
+
- spec/processor/test_main_processor.rb
|
135
|
+
- spec/processor/test_build_helper_chain.rb
|
136
|
+
- spec/processor/test_call.rb
|
137
|
+
- spec/processor/helper/test_call.rb
|
138
|
+
- spec/test_rewriter.rb
|
139
|
+
- spec/grammar.yml
|
139
140
|
- spec/parser/citrus/test_new.rb
|
140
|
-
- spec/parser/citrus/test_parse.rb
|
141
|
-
- spec/parser/citrus/test_recognize.rb
|
142
141
|
- spec/parser/citrus/test_registration.rb
|
142
|
+
- spec/parser/citrus/test_parse.rb
|
143
143
|
- spec/parser/citrus/test_to_sexpr.rb
|
144
|
+
- spec/parser/citrus/test_recognize.rb
|
144
145
|
- spec/parser/test_factor.rb
|
145
146
|
- spec/parser/test_input_text.rb
|
146
|
-
- spec/
|
147
|
+
- spec/test_sexpr.rb
|
147
148
|
- spec/test_load.rb
|
149
|
+
- spec/grammar/test_new.rb
|
150
|
+
- spec/grammar/tagging/test_mod2rulename.rb
|
151
|
+
- spec/grammar/tagging/test_rule2modname.rb
|
152
|
+
- spec/grammar/tagging/test_looks_a_sexpr.rb
|
153
|
+
- spec/grammar/tagging/test_tag_sexpr.rb
|
154
|
+
- spec/grammar/test_sexpr.rb
|
155
|
+
- spec/grammar/options/test_install_root.rb
|
156
|
+
- spec/grammar/options/test_install_parser.rb
|
157
|
+
- spec/grammar/options/test_install_path.rb
|
158
|
+
- spec/grammar/test_parse.rb
|
159
|
+
- spec/grammar/matching/test_compile_rule.rb
|
160
|
+
- spec/grammar/matching/test_compile_rule_defn.rb
|
161
|
+
- spec/node/test_tracking_markers.rb
|
162
|
+
- spec/node/test_sexpr_copy.rb
|
163
|
+
- spec/node/test_sexpr_body.rb
|
164
|
+
- spec/node/test_sexpr_type.rb
|
148
165
|
- spec/test_readme_examples.rb
|
149
|
-
- spec/test_sexpr.rb
|
150
166
|
- tasks/debug_mail.rake
|
151
|
-
- tasks/
|
167
|
+
- tasks/yard.rake
|
152
168
|
- tasks/gem.rake
|
153
169
|
- tasks/spec_test.rake
|
154
170
|
- tasks/unit_test.rake
|
155
|
-
- tasks/
|
171
|
+
- tasks/debug_mail.txt
|
156
172
|
homepage: https://github.com/blambeau/sexp
|
157
173
|
licenses: []
|
158
174
|
post_install_message:
|
@@ -167,7 +183,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
167
183
|
version: '0'
|
168
184
|
segments:
|
169
185
|
- 0
|
170
|
-
hash: -
|
186
|
+
hash: -185808739
|
171
187
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
188
|
none: false
|
173
189
|
requirements:
|
@@ -176,48 +192,58 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
192
|
version: '0'
|
177
193
|
requirements: []
|
178
194
|
rubyforge_project:
|
179
|
-
rubygems_version: 1.8.
|
195
|
+
rubygems_version: 1.8.15
|
180
196
|
signing_key:
|
181
197
|
specification_version: 3
|
182
198
|
summary: A compilation framework around s-expressions
|
183
199
|
test_files:
|
184
|
-
- spec/
|
185
|
-
- spec/grammar/matching/test_compile_rule_defn.rb
|
186
|
-
- spec/grammar/options/test_install_parser.rb
|
187
|
-
- spec/grammar/options/test_install_path.rb
|
188
|
-
- spec/grammar/options/test_install_root.rb
|
189
|
-
- spec/grammar/tagging/test_looks_a_sexpr.rb
|
190
|
-
- spec/grammar/tagging/test_mod2rulename.rb
|
191
|
-
- spec/grammar/tagging/test_rule2modname.rb
|
192
|
-
- spec/grammar/tagging/test_tag_sexpr.rb
|
193
|
-
- spec/grammar/test_new.rb
|
194
|
-
- spec/grammar/test_parse.rb
|
195
|
-
- spec/grammar/test_sexpr.rb
|
196
|
-
- spec/grammar.yml
|
197
|
-
- spec/matcher/alternative/test_eat.rb
|
198
|
-
- spec/matcher/alternative/test_match_q.rb
|
199
|
-
- spec/matcher/many/test_eat.rb
|
200
|
-
- spec/matcher/many/test_initialize.rb
|
201
|
-
- spec/matcher/many/test_match_q.rb
|
200
|
+
- spec/spec_helper.rb
|
202
201
|
- spec/matcher/reference/test_eat.rb
|
203
202
|
- spec/matcher/reference/test_match_q.rb
|
204
203
|
- spec/matcher/rule/test_eat.rb
|
205
204
|
- spec/matcher/rule/test_match_q.rb
|
205
|
+
- spec/matcher/many/test_eat.rb
|
206
|
+
- spec/matcher/many/test_initialize.rb
|
207
|
+
- spec/matcher/many/test_match_q.rb
|
206
208
|
- spec/matcher/sequence/test_eat.rb
|
207
209
|
- spec/matcher/sequence/test_match_q.rb
|
208
210
|
- spec/matcher/terminal/test_eat.rb
|
209
|
-
- spec/matcher/terminal/test_match_q.rb
|
210
211
|
- spec/matcher/terminal/test_terminal_match.rb
|
211
|
-
- spec/
|
212
|
-
- spec/
|
212
|
+
- spec/matcher/terminal/test_match_q.rb
|
213
|
+
- spec/matcher/alternative/test_eat.rb
|
214
|
+
- spec/matcher/alternative/test_match_q.rb
|
215
|
+
- spec/rewriter/test_copy_and_apply.rb
|
216
|
+
- spec/processor/test_helper.rb
|
217
|
+
- spec/processor/test_sexpr_coercions.rb
|
218
|
+
- spec/processor/test_main_processor.rb
|
219
|
+
- spec/processor/test_build_helper_chain.rb
|
220
|
+
- spec/processor/test_call.rb
|
221
|
+
- spec/processor/helper/test_call.rb
|
222
|
+
- spec/test_rewriter.rb
|
223
|
+
- spec/grammar.yml
|
213
224
|
- spec/parser/citrus/test_new.rb
|
214
|
-
- spec/parser/citrus/test_parse.rb
|
215
|
-
- spec/parser/citrus/test_recognize.rb
|
216
225
|
- spec/parser/citrus/test_registration.rb
|
226
|
+
- spec/parser/citrus/test_parse.rb
|
217
227
|
- spec/parser/citrus/test_to_sexpr.rb
|
228
|
+
- spec/parser/citrus/test_recognize.rb
|
218
229
|
- spec/parser/test_factor.rb
|
219
230
|
- spec/parser/test_input_text.rb
|
220
|
-
- spec/
|
231
|
+
- spec/test_sexpr.rb
|
221
232
|
- spec/test_load.rb
|
233
|
+
- spec/grammar/test_new.rb
|
234
|
+
- spec/grammar/tagging/test_mod2rulename.rb
|
235
|
+
- spec/grammar/tagging/test_rule2modname.rb
|
236
|
+
- spec/grammar/tagging/test_looks_a_sexpr.rb
|
237
|
+
- spec/grammar/tagging/test_tag_sexpr.rb
|
238
|
+
- spec/grammar/test_sexpr.rb
|
239
|
+
- spec/grammar/options/test_install_root.rb
|
240
|
+
- spec/grammar/options/test_install_parser.rb
|
241
|
+
- spec/grammar/options/test_install_path.rb
|
242
|
+
- spec/grammar/test_parse.rb
|
243
|
+
- spec/grammar/matching/test_compile_rule.rb
|
244
|
+
- spec/grammar/matching/test_compile_rule_defn.rb
|
245
|
+
- spec/node/test_tracking_markers.rb
|
246
|
+
- spec/node/test_sexpr_copy.rb
|
247
|
+
- spec/node/test_sexpr_body.rb
|
248
|
+
- spec/node/test_sexpr_type.rb
|
222
249
|
- spec/test_readme_examples.rb
|
223
|
-
- spec/test_sexpr.rb
|