rley 0.3.04 → 0.3.05
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.
- 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
|