rley 0.3.04 → 0.3.05
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +7 -3
- data/CHANGELOG.md +3 -0
- data/Rakefile +30 -30
- data/examples/parsers/parsing_L0.rb +1 -1
- data/examples/parsers/parsing_L1.rb +1 -1
- data/examples/parsers/parsing_abc.rb +1 -1
- data/examples/parsers/parsing_ambig.rb +1 -1
- data/examples/parsers/parsing_another.rb +1 -1
- data/examples/parsers/parsing_b_expr.rb +1 -1
- data/examples/parsers/parsing_err_expr.rb +1 -1
- data/examples/parsers/parsing_groucho.rb +1 -1
- data/examples/parsers/parsing_right_recursive.rb +1 -1
- data/examples/parsers/parsing_tricky.rb +1 -1
- data/lib/rley/constants.rb +2 -2
- data/lib/rley/formatter/base_formatter.rb +0 -2
- data/lib/rley/formatter/debug.rb +0 -2
- data/lib/rley/formatter/json.rb +1 -3
- data/lib/rley/gfg/call_edge.rb +31 -30
- data/lib/rley/gfg/edge.rb +22 -23
- data/lib/rley/gfg/end_vertex.rb +22 -24
- data/lib/rley/gfg/epsilon_edge.rb +20 -21
- data/lib/rley/gfg/grm_flow_graph.rb +39 -39
- data/lib/rley/gfg/item_vertex.rb +16 -17
- data/lib/rley/gfg/non_terminal_vertex.rb +3 -4
- data/lib/rley/gfg/return_edge.rb +32 -31
- data/lib/rley/gfg/scan_edge.rb +25 -26
- data/lib/rley/gfg/shortcut_edge.rb +25 -26
- data/lib/rley/gfg/start_vertex.rb +0 -2
- data/lib/rley/gfg/vertex.rb +8 -8
- data/lib/rley/parse_forest_visitor.rb +113 -115
- data/lib/rley/parse_tree_visitor.rb +0 -2
- data/lib/rley/parser/base_parser.rb +27 -27
- data/lib/rley/parser/chart.rb +14 -14
- data/lib/rley/parser/dotted_item.rb +33 -33
- data/lib/rley/parser/earley_parser.rb +6 -6
- data/lib/rley/parser/gfg_chart.rb +8 -15
- data/lib/rley/parser/gfg_earley_parser.rb +15 -13
- data/lib/rley/parser/gfg_parsing.rb +26 -22
- data/lib/rley/parser/grm_items_builder.rb +3 -2
- data/lib/rley/parser/parse_entry.rb +3 -9
- data/lib/rley/parser/parse_entry_set.rb +14 -19
- data/lib/rley/parser/parse_entry_tracker.rb +56 -56
- data/lib/rley/parser/parse_forest_builder.rb +215 -214
- data/lib/rley/parser/parse_forest_factory.rb +57 -56
- data/lib/rley/parser/parse_state.rb +8 -11
- data/lib/rley/parser/parse_state_tracker.rb +56 -56
- data/lib/rley/parser/parse_tracer.rb +3 -3
- data/lib/rley/parser/parse_tree_builder.rb +10 -10
- data/lib/rley/parser/parse_walker_factory.rb +30 -33
- data/lib/rley/parser/parsing.rb +8 -8
- data/lib/rley/parser/state_set.rb +23 -26
- data/lib/rley/ptree/non_terminal_node.rb +1 -1
- data/lib/rley/ptree/token_range.rb +2 -2
- data/lib/rley/sppf/alternative_node.rb +32 -34
- data/lib/rley/sppf/composite_node.rb +27 -27
- data/lib/rley/sppf/epsilon_node.rb +26 -27
- data/lib/rley/sppf/leaf_node.rb +11 -12
- data/lib/rley/sppf/non_terminal_node.rb +37 -38
- data/lib/rley/sppf/sppf_node.rb +1 -1
- data/lib/rley/sppf/token_node.rb +29 -29
- data/lib/rley/syntax/grammar.rb +1 -3
- data/lib/rley/syntax/grammar_builder.rb +8 -8
- data/lib/rley/syntax/non_terminal.rb +2 -4
- data/lib/rley/syntax/production.rb +3 -3
- data/lib/rley/syntax/symbol_seq.rb +1 -1
- data/spec/rley/gfg/call_edge_spec.rb +50 -51
- data/spec/rley/gfg/edge_spec.rb +33 -33
- data/spec/rley/gfg/end_vertex_spec.rb +26 -27
- data/spec/rley/gfg/epsilon_edge_spec.rb +25 -25
- data/spec/rley/gfg/grm_flow_graph_spec.rb +1 -1
- data/spec/rley/gfg/item_vertex_spec.rb +3 -4
- data/spec/rley/gfg/return_edge_spec.rb +51 -51
- data/spec/rley/gfg/scan_edge_spec.rb +32 -30
- data/spec/rley/gfg/shortcut_edge_spec.rb +1 -1
- data/spec/rley/gfg/vertex_spec.rb +3 -3
- data/spec/rley/parse_forest_visitor_spec.rb +239 -238
- data/spec/rley/parser/dotted_item_spec.rb +1 -1
- data/spec/rley/parser/earley_parser_spec.rb +16 -16
- data/spec/rley/parser/gfg_earley_parser_spec.rb +30 -31
- data/spec/rley/parser/gfg_parsing_spec.rb +11 -10
- data/spec/rley/parser/grm_items_builder_spec.rb +2 -2
- data/spec/rley/parser/parse_entry_set_spec.rb +4 -4
- data/spec/rley/parser/parse_entry_spec.rb +0 -2
- data/spec/rley/parser/parse_forest_builder_spec.rb +82 -57
- data/spec/rley/parser/parse_forest_factory_spec.rb +84 -82
- data/spec/rley/parser/parse_walker_factory_spec.rb +10 -9
- data/spec/rley/parser/parsing_spec.rb +0 -1
- data/spec/rley/sppf/alternative_node_spec.rb +2 -2
- data/spec/rley/sppf/non_terminal_node_spec.rb +0 -1
- data/spec/rley/support/ambiguous_grammar_helper.rb +1 -1
- data/spec/rley/support/expectation_helper.rb +37 -36
- data/spec/rley/support/grammar_abc_helper.rb +17 -17
- data/spec/rley/support/grammar_b_expr_helper.rb +40 -39
- data/spec/rley/support/grammar_helper.rb +2 -1
- data/spec/rley/support/{grammar_L0_helper.rb → grammar_l0_helper.rb} +82 -81
- data/spec/rley/support/grammar_sppf_helper.rb +24 -25
- data/spec/rley/syntax/grammar_spec.rb +1 -1
- metadata +2 -2
@@ -1,51 +1,50 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
|
3
|
-
require_relative '../../../lib/rley/syntax/terminal'
|
4
|
-
require_relative '../../../lib/rley/syntax/non_terminal'
|
5
|
-
require_relative '../../../lib/rley/syntax/production'
|
6
|
-
require_relative '../../../lib/rley/parser/dotted_item'
|
7
|
-
require_relative '../../../lib/rley/gfg/start_vertex'
|
8
|
-
require_relative '../../../lib/rley/gfg/item_vertex'
|
9
|
-
|
10
|
-
# Load the class under test
|
11
|
-
require_relative '../../../lib/rley/gfg/call_edge'
|
12
|
-
|
13
|
-
module Rley # Open this namespace to avoid module qualifier prefixes
|
14
|
-
module GFG # Open this namespace to avoid module qualifier prefixes
|
15
|
-
describe CallEdge do
|
16
|
-
# Factory method. Builds a production with given left-hand side (LHS)
|
17
|
-
# and given RHS (right-hand side)
|
18
|
-
def build_prod(theLHS, *theRHSSymbols)
|
19
|
-
return Syntax::Production.new(theLHS, theRHSSymbols)
|
20
|
-
end
|
21
|
-
|
22
|
-
let(:t_a) { Rley::Syntax::Terminal.new('a') }
|
23
|
-
let(:t_b) { Rley::Syntax::Terminal.new('b') }
|
24
|
-
let(:t_c) { Rley::Syntax::Terminal.new('c') }
|
25
|
-
let(:nt_sentence) { Rley::Syntax::NonTerminal.new('sentence') }
|
26
|
-
let(:nt_b_sequence) { Rley::Syntax::NonTerminal.new('b_sequence') }
|
27
|
-
let(:sample_prod) { build_prod(nt_sentence, t_a, nt_b_sequence, t_c) }
|
28
|
-
let(:sample_item) { Parser::DottedItem.new(sample_prod, 1) }
|
29
|
-
|
30
|
-
let(:vertex1) { ItemVertex.new(sample_item) }
|
31
|
-
let(:vertex2) { StartVertex.new('to') }
|
32
|
-
subject { CallEdge.new(vertex1, vertex2) }
|
33
|
-
|
34
|
-
context 'Initialization:' do
|
35
|
-
it 'should be created with two vertice arguments' do
|
36
|
-
expect { CallEdge.new(vertex1, vertex2) }.not_to raise_error
|
37
|
-
end
|
38
|
-
end # context
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
# End of file
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
require_relative '../../../lib/rley/syntax/terminal'
|
4
|
+
require_relative '../../../lib/rley/syntax/non_terminal'
|
5
|
+
require_relative '../../../lib/rley/syntax/production'
|
6
|
+
require_relative '../../../lib/rley/parser/dotted_item'
|
7
|
+
require_relative '../../../lib/rley/gfg/start_vertex'
|
8
|
+
require_relative '../../../lib/rley/gfg/item_vertex'
|
9
|
+
|
10
|
+
# Load the class under test
|
11
|
+
require_relative '../../../lib/rley/gfg/call_edge'
|
12
|
+
|
13
|
+
module Rley # Open this namespace to avoid module qualifier prefixes
|
14
|
+
module GFG # Open this namespace to avoid module qualifier prefixes
|
15
|
+
describe CallEdge do
|
16
|
+
# Factory method. Builds a production with given left-hand side (LHS)
|
17
|
+
# and given RHS (right-hand side)
|
18
|
+
def build_prod(theLHS, *theRHSSymbols)
|
19
|
+
return Syntax::Production.new(theLHS, theRHSSymbols)
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:t_a) { Rley::Syntax::Terminal.new('a') }
|
23
|
+
let(:t_b) { Rley::Syntax::Terminal.new('b') }
|
24
|
+
let(:t_c) { Rley::Syntax::Terminal.new('c') }
|
25
|
+
let(:nt_sentence) { Rley::Syntax::NonTerminal.new('sentence') }
|
26
|
+
let(:nt_b_sequence) { Rley::Syntax::NonTerminal.new('b_sequence') }
|
27
|
+
let(:sample_prod) { build_prod(nt_sentence, t_a, nt_b_sequence, t_c) }
|
28
|
+
let(:sample_item) { Parser::DottedItem.new(sample_prod, 1) }
|
29
|
+
|
30
|
+
let(:vertex1) { ItemVertex.new(sample_item) }
|
31
|
+
let(:vertex2) { StartVertex.new('to') }
|
32
|
+
subject { CallEdge.new(vertex1, vertex2) }
|
33
|
+
|
34
|
+
context 'Initialization:' do
|
35
|
+
it 'should be created with two vertice arguments' do
|
36
|
+
expect { CallEdge.new(vertex1, vertex2) }.not_to raise_error
|
37
|
+
end
|
38
|
+
end # context
|
39
|
+
|
40
|
+
context 'Provided services:' do
|
41
|
+
it 'should know its key' do
|
42
|
+
expectation = "CALL_#{sample_prod.object_id}_#{sample_item.position}"
|
43
|
+
expect(subject.key).to eq(expectation)
|
44
|
+
end
|
45
|
+
end # context
|
46
|
+
end # describe
|
47
|
+
end # module
|
48
|
+
end # module
|
49
|
+
|
50
|
+
# End of file
|
data/spec/rley/gfg/edge_spec.rb
CHANGED
@@ -1,33 +1,33 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
|
3
|
-
require_relative '../../../lib/rley/gfg/start_vertex'
|
4
|
-
require_relative '../../../lib/rley/gfg/end_vertex'
|
5
|
-
|
6
|
-
# Load the class under test
|
7
|
-
require_relative '../../../lib/rley/gfg/edge'
|
8
|
-
|
9
|
-
module Rley # Open this namespace to avoid module qualifier prefixes
|
10
|
-
module GFG # Open this namespace to avoid module qualifier prefixes
|
11
|
-
describe Edge do
|
12
|
-
let(:vertex1) { StartVertex.new('from') }
|
13
|
-
let(:vertex2) { StartVertex.new('to') }
|
14
|
-
subject { Edge.new(vertex1, vertex2) }
|
15
|
-
|
16
|
-
context 'Initialization:' do
|
17
|
-
it 'should be created with two vertice arguments' do
|
18
|
-
expect { Edge.new(vertex1, vertex2) }.not_to raise_error
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should be registered by the predecessor vertex' do
|
22
|
-
expect(subject).to eq(vertex1.edges.last)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'should know the successor vertex' do
|
26
|
-
expect(subject.successor).to eq(vertex2)
|
27
|
-
end
|
28
|
-
end # context
|
29
|
-
end # describe
|
30
|
-
end # module
|
31
|
-
end # module
|
32
|
-
|
33
|
-
# End of file
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
require_relative '../../../lib/rley/gfg/start_vertex'
|
4
|
+
require_relative '../../../lib/rley/gfg/end_vertex'
|
5
|
+
|
6
|
+
# Load the class under test
|
7
|
+
require_relative '../../../lib/rley/gfg/edge'
|
8
|
+
|
9
|
+
module Rley # Open this namespace to avoid module qualifier prefixes
|
10
|
+
module GFG # Open this namespace to avoid module qualifier prefixes
|
11
|
+
describe Edge do
|
12
|
+
let(:vertex1) { StartVertex.new('from') }
|
13
|
+
let(:vertex2) { StartVertex.new('to') }
|
14
|
+
subject { Edge.new(vertex1, vertex2) }
|
15
|
+
|
16
|
+
context 'Initialization:' do
|
17
|
+
it 'should be created with two vertice arguments' do
|
18
|
+
expect { Edge.new(vertex1, vertex2) }.not_to raise_error
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should be registered by the predecessor vertex' do
|
22
|
+
expect(subject).to eq(vertex1.edges.last)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should know the successor vertex' do
|
26
|
+
expect(subject.successor).to eq(vertex2)
|
27
|
+
end
|
28
|
+
end # context
|
29
|
+
end # describe
|
30
|
+
end # module
|
31
|
+
end # module
|
32
|
+
|
33
|
+
# End of file
|
@@ -1,27 +1,26 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
|
3
|
-
# Load the class under test
|
4
|
-
require_relative '../../../lib/rley/gfg/end_vertex'
|
5
|
-
|
6
|
-
module Rley # Open this namespace to avoid module qualifier prefixes
|
7
|
-
module GFG # Open this namespace to avoid module qualifier prefixes
|
8
|
-
describe EndVertex do
|
9
|
-
let(:sample_nt) { double('NT') }
|
10
|
-
subject { EndVertex.new(sample_nt) }
|
11
|
-
|
12
|
-
context 'Initialization:' do
|
13
|
-
it 'should be created with a non-terminal symbol' do
|
14
|
-
expect { EndVertex.new(sample_nt) }.not_to raise_error
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should know its label' do
|
18
|
-
expect(sample_nt).to receive(:to_s).and_return('NT')
|
19
|
-
expect(subject.label).to eq('NT.')
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
# End of file
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
# Load the class under test
|
4
|
+
require_relative '../../../lib/rley/gfg/end_vertex'
|
5
|
+
|
6
|
+
module Rley # Open this namespace to avoid module qualifier prefixes
|
7
|
+
module GFG # Open this namespace to avoid module qualifier prefixes
|
8
|
+
describe EndVertex do
|
9
|
+
let(:sample_nt) { double('NT') }
|
10
|
+
subject { EndVertex.new(sample_nt) }
|
11
|
+
|
12
|
+
context 'Initialization:' do
|
13
|
+
it 'should be created with a non-terminal symbol' do
|
14
|
+
expect { EndVertex.new(sample_nt) }.not_to raise_error
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should know its label' do
|
18
|
+
expect(sample_nt).to receive(:to_s).and_return('NT')
|
19
|
+
expect(subject.label).to eq('NT.')
|
20
|
+
end
|
21
|
+
end # context
|
22
|
+
end # describe
|
23
|
+
end # module
|
24
|
+
end # module
|
25
|
+
|
26
|
+
# End of file
|
@@ -1,25 +1,25 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
|
3
|
-
require_relative '../../../lib/rley/gfg/start_vertex'
|
4
|
-
require_relative '../../../lib/rley/gfg/end_vertex'
|
5
|
-
|
6
|
-
# Load the class under test
|
7
|
-
require_relative '../../../lib/rley/gfg/epsilon_edge'
|
8
|
-
|
9
|
-
module Rley # Open this namespace to avoid module qualifier prefixes
|
10
|
-
module GFG # Open this namespace to avoid module qualifier prefixes
|
11
|
-
describe Edge do
|
12
|
-
let(:vertex1) { StartVertex.new('from') }
|
13
|
-
let(:vertex2) { StartVertex.new('to') }
|
14
|
-
subject { EpsilonEdge.new(vertex1, vertex2) }
|
15
|
-
|
16
|
-
context 'Initialization:' do
|
17
|
-
it 'should be created with two vertice arguments' do
|
18
|
-
expect { EpsilonEdge.new(vertex1, vertex2) }.not_to raise_error
|
19
|
-
end
|
20
|
-
end # context
|
21
|
-
end # describe
|
22
|
-
end # module
|
23
|
-
end # module
|
24
|
-
|
25
|
-
# End of file
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
require_relative '../../../lib/rley/gfg/start_vertex'
|
4
|
+
require_relative '../../../lib/rley/gfg/end_vertex'
|
5
|
+
|
6
|
+
# Load the class under test
|
7
|
+
require_relative '../../../lib/rley/gfg/epsilon_edge'
|
8
|
+
|
9
|
+
module Rley # Open this namespace to avoid module qualifier prefixes
|
10
|
+
module GFG # Open this namespace to avoid module qualifier prefixes
|
11
|
+
describe Edge do
|
12
|
+
let(:vertex1) { StartVertex.new('from') }
|
13
|
+
let(:vertex2) { StartVertex.new('to') }
|
14
|
+
subject { EpsilonEdge.new(vertex1, vertex2) }
|
15
|
+
|
16
|
+
context 'Initialization:' do
|
17
|
+
it 'should be created with two vertice arguments' do
|
18
|
+
expect { EpsilonEdge.new(vertex1, vertex2) }.not_to raise_error
|
19
|
+
end
|
20
|
+
end # context
|
21
|
+
end # describe
|
22
|
+
end # module
|
23
|
+
end # module
|
24
|
+
|
25
|
+
# End of file
|
@@ -11,7 +11,6 @@ require_relative '../../../lib/rley/gfg/item_vertex'
|
|
11
11
|
module Rley # Open this namespace to avoid module qualifier prefixes
|
12
12
|
module GFG # Open this namespace to avoid module qualifier prefixes
|
13
13
|
describe ItemVertex do
|
14
|
-
|
15
14
|
# Factory method. Builds a production with given left-hand side (LHS)
|
16
15
|
# and given RHS (right-hand side)
|
17
16
|
def build_prod(theLHS, *theRHSSymbols)
|
@@ -25,8 +24,8 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
25
24
|
let(:nt_b_sequence) { Rley::Syntax::NonTerminal.new('b_sequence') }
|
26
25
|
let(:sample_prod) { build_prod(nt_sentence, t_a, nt_b_sequence, t_c) }
|
27
26
|
let(:other_prod) { build_prod(nt_sentence, t_a) }
|
28
|
-
let(:recursive_prod) {build_prod(nt_b_sequence, nt_b_sequence, t_b
|
29
|
-
let(:b_prod) {build_prod(nt_b_sequence, t_b
|
27
|
+
let(:recursive_prod) { build_prod(nt_b_sequence, nt_b_sequence, t_b) }
|
28
|
+
let(:b_prod) { build_prod(nt_b_sequence, t_b) }
|
30
29
|
let(:empty_prod) { build_prod(nt_sentence) }
|
31
30
|
let(:sample_item) { Parser::DottedItem.new(sample_prod, 1) }
|
32
31
|
let(:next_item) { Parser::DottedItem.new(sample_prod, 2) }
|
@@ -88,7 +87,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
88
87
|
|
89
88
|
|
90
89
|
it 'should know the next symbol (if any) in the rhs' do
|
91
|
-
#Case: dot is not penultimate
|
90
|
+
# Case: dot is not penultimate
|
92
91
|
expect(subject.next_symbol).to eq(nt_b_sequence)
|
93
92
|
|
94
93
|
# Case: dot is penultimate
|
@@ -1,51 +1,51 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
|
3
|
-
require_relative '../../../lib/rley/syntax/terminal'
|
4
|
-
require_relative '../../../lib/rley/syntax/non_terminal'
|
5
|
-
require_relative '../../../lib/rley/syntax/production'
|
6
|
-
require_relative '../../../lib/rley/parser/dotted_item'
|
7
|
-
require_relative '../../../lib/rley/gfg/end_vertex'
|
8
|
-
require_relative '../../../lib/rley/gfg/item_vertex'
|
9
|
-
|
10
|
-
# Load the class under test
|
11
|
-
require_relative '../../../lib/rley/gfg/return_edge'
|
12
|
-
|
13
|
-
module Rley # Open this namespace to avoid module qualifier prefixes
|
14
|
-
module GFG # Open this namespace to avoid module qualifier prefixes
|
15
|
-
describe ReturnEdge do
|
16
|
-
# Factory method. Builds a production with given left-hand side (LHS)
|
17
|
-
# and given RHS (right-hand side)
|
18
|
-
def build_prod(theLHS, *theRHSSymbols)
|
19
|
-
return Syntax::Production.new(theLHS, theRHSSymbols)
|
20
|
-
end
|
21
|
-
|
22
|
-
let(:t_a) { Rley::Syntax::Terminal.new('a') }
|
23
|
-
let(:t_b) { Rley::Syntax::Terminal.new('b') }
|
24
|
-
let(:t_c) { Rley::Syntax::Terminal.new('c') }
|
25
|
-
let(:nt_sentence) { Rley::Syntax::NonTerminal.new('sentence') }
|
26
|
-
let(:nt_b_sequence) { Rley::Syntax::NonTerminal.new('b_sequence') }
|
27
|
-
let(:sample_prod) { build_prod(nt_sentence, t_a, nt_b_sequence, t_c) }
|
28
|
-
let(:sample_item) { Parser::DottedItem.new(sample_prod, 1) }
|
29
|
-
|
30
|
-
let(:vertex1) { EndVertex.new('from') }
|
31
|
-
let(:vertex2) { ItemVertex.new(sample_item) }
|
32
|
-
subject { ReturnEdge.new(vertex1, vertex2) }
|
33
|
-
|
34
|
-
context 'Initialization:' do
|
35
|
-
it 'should be created with two vertice arguments' do
|
36
|
-
expect { ReturnEdge.new(vertex1, vertex2) }.not_to raise_error
|
37
|
-
end
|
38
|
-
end # context
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
expectation = "RET_#{sample_prod.object_id}_#{
|
44
|
-
expect(subject.key).to eq(expectation)
|
45
|
-
end
|
46
|
-
end # context
|
47
|
-
end # describe
|
48
|
-
end # module
|
49
|
-
end # module
|
50
|
-
|
51
|
-
# End of file
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
require_relative '../../../lib/rley/syntax/terminal'
|
4
|
+
require_relative '../../../lib/rley/syntax/non_terminal'
|
5
|
+
require_relative '../../../lib/rley/syntax/production'
|
6
|
+
require_relative '../../../lib/rley/parser/dotted_item'
|
7
|
+
require_relative '../../../lib/rley/gfg/end_vertex'
|
8
|
+
require_relative '../../../lib/rley/gfg/item_vertex'
|
9
|
+
|
10
|
+
# Load the class under test
|
11
|
+
require_relative '../../../lib/rley/gfg/return_edge'
|
12
|
+
|
13
|
+
module Rley # Open this namespace to avoid module qualifier prefixes
|
14
|
+
module GFG # Open this namespace to avoid module qualifier prefixes
|
15
|
+
describe ReturnEdge do
|
16
|
+
# Factory method. Builds a production with given left-hand side (LHS)
|
17
|
+
# and given RHS (right-hand side)
|
18
|
+
def build_prod(theLHS, *theRHSSymbols)
|
19
|
+
return Syntax::Production.new(theLHS, theRHSSymbols)
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:t_a) { Rley::Syntax::Terminal.new('a') }
|
23
|
+
let(:t_b) { Rley::Syntax::Terminal.new('b') }
|
24
|
+
let(:t_c) { Rley::Syntax::Terminal.new('c') }
|
25
|
+
let(:nt_sentence) { Rley::Syntax::NonTerminal.new('sentence') }
|
26
|
+
let(:nt_b_sequence) { Rley::Syntax::NonTerminal.new('b_sequence') }
|
27
|
+
let(:sample_prod) { build_prod(nt_sentence, t_a, nt_b_sequence, t_c) }
|
28
|
+
let(:sample_item) { Parser::DottedItem.new(sample_prod, 1) }
|
29
|
+
|
30
|
+
let(:vertex1) { EndVertex.new('from') }
|
31
|
+
let(:vertex2) { ItemVertex.new(sample_item) }
|
32
|
+
subject { ReturnEdge.new(vertex1, vertex2) }
|
33
|
+
|
34
|
+
context 'Initialization:' do
|
35
|
+
it 'should be created with two vertice arguments' do
|
36
|
+
expect { ReturnEdge.new(vertex1, vertex2) }.not_to raise_error
|
37
|
+
end
|
38
|
+
end # context
|
39
|
+
|
40
|
+
context 'Provided services:' do
|
41
|
+
it 'should know its key' do
|
42
|
+
pos = sample_item.position
|
43
|
+
expectation = "RET_#{sample_prod.object_id}_#{pos - 1}"
|
44
|
+
expect(subject.key).to eq(expectation)
|
45
|
+
end
|
46
|
+
end # context
|
47
|
+
end # describe
|
48
|
+
end # module
|
49
|
+
end # module
|
50
|
+
|
51
|
+
# End of file
|
@@ -1,30 +1,32 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
|
3
|
-
require_relative '../../../lib/rley/gfg/start_vertex'
|
4
|
-
require_relative '../../../lib/rley/gfg/end_vertex'
|
5
|
-
|
6
|
-
# Load the class under test
|
7
|
-
require_relative '../../../lib/rley/gfg/scan_edge'
|
8
|
-
|
9
|
-
module Rley # Open this namespace to avoid module qualifier prefixes
|
10
|
-
module GFG # Open this namespace to avoid module qualifier prefixes
|
11
|
-
describe Edge do
|
12
|
-
let(:vertex1) { StartVertex.new('from') }
|
13
|
-
let(:vertex2) { StartVertex.new('to') }
|
14
|
-
let(:sample_terminal) { double('fake-terminal') }
|
15
|
-
subject { ScanEdge.new(vertex1, vertex2, sample_terminal) }
|
16
|
-
|
17
|
-
context 'Initialization:' do
|
18
|
-
it 'should be created with two vertice arguments & a terminal' do
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end #
|
29
|
-
|
30
|
-
#
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
require_relative '../../../lib/rley/gfg/start_vertex'
|
4
|
+
require_relative '../../../lib/rley/gfg/end_vertex'
|
5
|
+
|
6
|
+
# Load the class under test
|
7
|
+
require_relative '../../../lib/rley/gfg/scan_edge'
|
8
|
+
|
9
|
+
module Rley # Open this namespace to avoid module qualifier prefixes
|
10
|
+
module GFG # Open this namespace to avoid module qualifier prefixes
|
11
|
+
describe Edge do
|
12
|
+
let(:vertex1) { StartVertex.new('from') }
|
13
|
+
let(:vertex2) { StartVertex.new('to') }
|
14
|
+
let(:sample_terminal) { double('fake-terminal') }
|
15
|
+
subject { ScanEdge.new(vertex1, vertex2, sample_terminal) }
|
16
|
+
|
17
|
+
context 'Initialization:' do
|
18
|
+
it 'should be created with two vertice arguments & a terminal' do
|
19
|
+
v1 = vertex1
|
20
|
+
v2 = vertex2
|
21
|
+
expect { ScanEdge.new(v1, v2, sample_terminal) }.not_to raise_error
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should know the related terminal' do
|
25
|
+
expect(subject.terminal).to eq(sample_terminal)
|
26
|
+
end
|
27
|
+
end # context
|
28
|
+
end # describe
|
29
|
+
end # module
|
30
|
+
end # module
|
31
|
+
|
32
|
+
# End of file
|