rley 0.7.06 → 0.8.01
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +362 -62
- data/.travis.yml +6 -6
- data/CHANGELOG.md +20 -4
- data/LICENSE.txt +1 -1
- data/README.md +7 -7
- data/examples/NLP/engtagger.rb +193 -190
- data/examples/NLP/nano_eng/nano_en_demo.rb +7 -11
- data/examples/NLP/nano_eng/nano_grammar.rb +21 -21
- data/examples/NLP/pico_en_demo.rb +2 -2
- data/examples/data_formats/JSON/cli_options.rb +1 -1
- data/examples/data_formats/JSON/json_ast_builder.rb +21 -27
- data/examples/data_formats/JSON/json_ast_nodes.rb +12 -21
- data/examples/data_formats/JSON/json_demo.rb +1 -2
- data/examples/data_formats/JSON/json_grammar.rb +13 -13
- data/examples/data_formats/JSON/json_lexer.rb +8 -8
- data/examples/data_formats/JSON/json_minifier.rb +1 -1
- data/examples/general/calc_iter1/calc_ast_builder.rb +13 -10
- data/examples/general/calc_iter1/calc_ast_nodes.rb +23 -37
- data/examples/general/calc_iter1/calc_grammar.rb +7 -6
- data/examples/general/calc_iter1/calc_lexer.rb +6 -4
- data/examples/general/calc_iter1/spec/calculator_spec.rb +5 -5
- data/examples/general/calc_iter2/calc_ast_builder.rb +5 -3
- data/examples/general/calc_iter2/calc_ast_nodes.rb +27 -43
- data/examples/general/calc_iter2/calc_grammar.rb +12 -12
- data/examples/general/calc_iter2/calc_lexer.rb +11 -10
- data/examples/general/calc_iter2/spec/calculator_spec.rb +26 -26
- data/examples/general/left.rb +2 -2
- data/examples/general/right.rb +2 -2
- data/lib/rley.rb +1 -1
- data/lib/rley/base/dotted_item.rb +28 -31
- data/lib/rley/base/grm_items_builder.rb +6 -0
- data/lib/rley/constants.rb +2 -2
- data/lib/rley/engine.rb +22 -25
- data/lib/rley/formatter/asciitree.rb +3 -3
- data/lib/rley/formatter/bracket_notation.rb +1 -8
- data/lib/rley/formatter/debug.rb +6 -6
- data/lib/rley/formatter/json.rb +2 -2
- data/lib/rley/gfg/call_edge.rb +1 -1
- data/lib/rley/gfg/edge.rb +5 -5
- data/lib/rley/gfg/end_vertex.rb +2 -6
- data/lib/rley/gfg/epsilon_edge.rb +1 -5
- data/lib/rley/gfg/grm_flow_graph.rb +27 -23
- data/lib/rley/gfg/item_vertex.rb +10 -10
- data/lib/rley/gfg/non_terminal_vertex.rb +4 -4
- data/lib/rley/gfg/scan_edge.rb +1 -1
- data/lib/rley/gfg/shortcut_edge.rb +2 -2
- data/lib/rley/gfg/start_vertex.rb +4 -8
- data/lib/rley/gfg/vertex.rb +43 -39
- data/lib/rley/interface.rb +16 -0
- data/lib/rley/lexical/token_range.rb +6 -6
- data/lib/rley/notation/all_notation_nodes.rb +2 -0
- data/lib/rley/notation/ast_builder.rb +191 -0
- data/lib/rley/notation/ast_node.rb +44 -0
- data/lib/rley/notation/ast_visitor.rb +113 -0
- data/lib/rley/notation/grammar.rb +49 -0
- data/lib/rley/notation/grammar_builder.rb +504 -0
- data/lib/rley/notation/grouping_node.rb +23 -0
- data/lib/rley/notation/parser.rb +56 -0
- data/lib/rley/notation/sequence_node.rb +35 -0
- data/lib/rley/notation/symbol_node.rb +29 -0
- data/lib/rley/notation/tokenizer.rb +192 -0
- data/lib/rley/parse_forest_visitor.rb +5 -5
- data/lib/rley/parse_rep/ast_base_builder.rb +48 -11
- data/lib/rley/parse_rep/cst_builder.rb +5 -6
- data/lib/rley/parse_rep/parse_forest_builder.rb +22 -18
- data/lib/rley/parse_rep/parse_forest_factory.rb +3 -3
- data/lib/rley/parse_rep/parse_rep_creator.rb +14 -16
- data/lib/rley/parse_rep/parse_tree_builder.rb +4 -4
- data/lib/rley/parse_rep/parse_tree_factory.rb +27 -27
- data/lib/rley/parse_tree_visitor.rb +1 -1
- data/lib/rley/parser/error_reason.rb +4 -5
- data/lib/rley/parser/gfg_chart.rb +118 -26
- data/lib/rley/parser/gfg_parsing.rb +22 -33
- data/lib/rley/parser/parse_entry.rb +25 -31
- data/lib/rley/parser/parse_entry_set.rb +19 -16
- data/lib/rley/parser/parse_entry_tracker.rb +4 -4
- data/lib/rley/parser/parse_tracer.rb +13 -13
- data/lib/rley/parser/parse_walker_factory.rb +23 -28
- data/lib/rley/ptree/non_terminal_node.rb +7 -5
- data/lib/rley/ptree/parse_tree.rb +3 -3
- data/lib/rley/ptree/parse_tree_node.rb +5 -5
- data/lib/rley/ptree/terminal_node.rb +7 -7
- data/lib/rley/rley_error.rb +12 -12
- data/lib/rley/sppf/alternative_node.rb +6 -6
- data/lib/rley/sppf/composite_node.rb +7 -7
- data/lib/rley/sppf/epsilon_node.rb +3 -3
- data/lib/rley/sppf/leaf_node.rb +3 -3
- data/lib/rley/sppf/parse_forest.rb +16 -16
- data/lib/rley/sppf/sppf_node.rb +7 -8
- data/lib/rley/sppf/token_node.rb +3 -3
- data/lib/rley/syntax/{grammar_builder.rb → base_grammar_builder.rb} +61 -23
- data/lib/rley/syntax/grammar.rb +5 -5
- data/lib/rley/syntax/grm_symbol.rb +7 -7
- data/lib/rley/syntax/match_closest.rb +43 -0
- data/lib/rley/syntax/non_terminal.rb +9 -15
- data/lib/rley/syntax/production.rb +16 -10
- data/lib/rley/syntax/symbol_seq.rb +7 -9
- data/lib/rley/syntax/terminal.rb +4 -5
- data/lib/rley/syntax/verbatim_symbol.rb +3 -3
- data/lib/support/base_tokenizer.rb +19 -18
- data/spec/rley/base/dotted_item_spec.rb +2 -2
- data/spec/rley/engine_spec.rb +23 -21
- data/spec/rley/formatter/asciitree_spec.rb +7 -7
- data/spec/rley/formatter/bracket_notation_spec.rb +13 -13
- data/spec/rley/formatter/json_spec.rb +1 -1
- data/spec/rley/gfg/end_vertex_spec.rb +5 -5
- data/spec/rley/gfg/grm_flow_graph_spec.rb +2 -2
- data/spec/rley/gfg/item_vertex_spec.rb +10 -10
- data/spec/rley/gfg/non_terminal_vertex_spec.rb +3 -3
- data/spec/rley/gfg/shortcut_edge_spec.rb +1 -1
- data/spec/rley/gfg/start_vertex_spec.rb +5 -5
- data/spec/rley/gfg/vertex_spec.rb +3 -3
- data/spec/rley/lexical/token_range_spec.rb +16 -16
- data/spec/rley/lexical/token_spec.rb +2 -2
- data/spec/rley/notation/grammar_builder_spec.rb +302 -0
- data/spec/rley/notation/parser_spec.rb +184 -0
- data/spec/rley/notation/tokenizer_spec.rb +370 -0
- data/spec/rley/parse_forest_visitor_spec.rb +165 -163
- data/spec/rley/parse_rep/ambiguous_parse_spec.rb +44 -44
- data/spec/rley/parse_rep/ast_builder_spec.rb +6 -7
- data/spec/rley/parse_rep/cst_builder_spec.rb +5 -5
- data/spec/rley/parse_rep/groucho_spec.rb +24 -26
- data/spec/rley/parse_rep/parse_forest_builder_spec.rb +27 -27
- data/spec/rley/parse_rep/parse_forest_factory_spec.rb +8 -8
- data/spec/rley/parse_rep/parse_tree_factory_spec.rb +3 -3
- data/spec/rley/parse_tree_visitor_spec.rb +10 -8
- data/spec/rley/parser/dangling_else_spec.rb +445 -0
- data/spec/rley/parser/error_reason_spec.rb +6 -6
- data/spec/rley/parser/gfg_earley_parser_spec.rb +120 -12
- data/spec/rley/parser/gfg_parsing_spec.rb +6 -13
- data/spec/rley/parser/parse_entry_spec.rb +19 -19
- data/spec/rley/parser/parse_walker_factory_spec.rb +10 -10
- data/spec/rley/ptree/non_terminal_node_spec.rb +5 -3
- data/spec/rley/ptree/parse_tree_node_spec.rb +4 -4
- data/spec/rley/ptree/terminal_node_spec.rb +6 -6
- data/spec/rley/sppf/alternative_node_spec.rb +6 -6
- data/spec/rley/sppf/non_terminal_node_spec.rb +3 -3
- data/spec/rley/sppf/token_node_spec.rb +4 -4
- data/spec/rley/support/ambiguous_grammar_helper.rb +4 -5
- data/spec/rley/support/grammar_abc_helper.rb +3 -5
- data/spec/rley/support/grammar_ambig01_helper.rb +5 -6
- data/spec/rley/support/grammar_arr_int_helper.rb +5 -6
- data/spec/rley/support/grammar_b_expr_helper.rb +5 -6
- data/spec/rley/support/grammar_int_seq_helper.rb +51 -0
- data/spec/rley/support/grammar_l0_helper.rb +14 -17
- data/spec/rley/support/grammar_pb_helper.rb +8 -7
- data/spec/rley/support/grammar_sppf_helper.rb +3 -3
- data/spec/rley/syntax/{grammar_builder_spec.rb → base_grammar_builder_spec.rb} +35 -16
- data/spec/rley/syntax/grammar_spec.rb +6 -6
- data/spec/rley/syntax/grm_symbol_spec.rb +1 -1
- data/spec/rley/syntax/match_closest_spec.rb +46 -0
- data/spec/rley/syntax/non_terminal_spec.rb +8 -8
- data/spec/rley/syntax/production_spec.rb +17 -13
- data/spec/rley/syntax/symbol_seq_spec.rb +2 -2
- data/spec/rley/syntax/terminal_spec.rb +5 -5
- data/spec/rley/syntax/verbatim_symbol_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -12
- data/spec/support/base_tokenizer_spec.rb +7 -2
- metadata +48 -74
- data/.simplecov +0 -7
- data/lib/rley/parser/parse_state.rb +0 -83
- data/lib/rley/parser/parse_state_tracker.rb +0 -59
- data/lib/rley/parser/state_set.rb +0 -101
- data/spec/rley/parser/parse_state_spec.rb +0 -125
- data/spec/rley/parser/parse_tracer_spec.rb +0 -200
- data/spec/rley/parser/state_set_spec.rb +0 -130
@@ -1,130 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../../spec_helper'
|
4
|
-
|
5
|
-
require_relative '../../../lib/rley/parser/parse_state'
|
6
|
-
|
7
|
-
# Load the class under test
|
8
|
-
require_relative '../../../lib/rley/parser/state_set'
|
9
|
-
|
10
|
-
module Rley # Open this namespace to avoid module qualifier prefixes
|
11
|
-
module Parser # Open this namespace to avoid module qualifier prefixes
|
12
|
-
describe StateSet do
|
13
|
-
let(:dotted_rule1) { double('fake_dotted_rule1') }
|
14
|
-
let(:state1) { ParseState.new(dotted_rule1, 2) }
|
15
|
-
let(:dotted_rule2) { double('fake_dotted_rule2') }
|
16
|
-
let(:state2) { ParseState.new(dotted_rule2, 5) }
|
17
|
-
|
18
|
-
context 'Initialization:' do
|
19
|
-
it 'should be created without argument' do
|
20
|
-
expect { StateSet.new }.not_to raise_error
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'should be empty at creation' do
|
24
|
-
expect(subject.states).to be_empty
|
25
|
-
end
|
26
|
-
end # context
|
27
|
-
|
28
|
-
context 'Provided services:' do
|
29
|
-
it 'should push a state' do
|
30
|
-
expect(subject.states).to be_empty
|
31
|
-
expect { subject.push_state(state1) }.not_to raise_error
|
32
|
-
expect(subject).not_to be_empty
|
33
|
-
subject.push_state(state2)
|
34
|
-
expect(subject.states).to eq([state1, state2])
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should ignore a second push of a state' do
|
38
|
-
expect(subject.states).to be_empty
|
39
|
-
subject.push_state(state1)
|
40
|
-
subject.push_state(state2)
|
41
|
-
expect(subject.states).to eq([state1, state2])
|
42
|
-
|
43
|
-
# One tries to push an already pushed state
|
44
|
-
expect(subject.push_state(state1)).to be_falsy
|
45
|
-
|
46
|
-
# ...It is not added
|
47
|
-
expect(subject.states).to eq([state1, state2])
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'should list the states expecting a given terminal' do
|
51
|
-
# Case of no state
|
52
|
-
expect(subject.states_expecting(:a)).to be_empty
|
53
|
-
|
54
|
-
# Adding states
|
55
|
-
subject.push_state(state1)
|
56
|
-
subject.push_state(state2)
|
57
|
-
allow(dotted_rule1).to receive(:next_symbol).and_return(:b)
|
58
|
-
allow(dotted_rule2).to receive(:next_symbol).and_return(:a)
|
59
|
-
expect(subject.states_expecting(:a)).to eq([state2])
|
60
|
-
expect(subject.states_expecting(:b)).to eq([state1])
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'should list the states related to a production' do
|
64
|
-
a_prod = double('fake-production')
|
65
|
-
|
66
|
-
# Case of no state
|
67
|
-
expect(subject.states_for(a_prod)).to be_empty
|
68
|
-
|
69
|
-
# Adding states
|
70
|
-
subject.push_state(state1)
|
71
|
-
subject.push_state(state2)
|
72
|
-
expect(dotted_rule1).to receive(:production).and_return(:dummy)
|
73
|
-
expect(dotted_rule2).to receive(:production).and_return(a_prod)
|
74
|
-
expect(subject.states_for(a_prod)).to eq([state2])
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'should list the states that rewrite a given non-terminal' do
|
78
|
-
non_term = double('fake-non-terminal')
|
79
|
-
prod1 = double('fake-production1')
|
80
|
-
prod2 = double('fake-production2')
|
81
|
-
|
82
|
-
# Adding states
|
83
|
-
subject.push_state(state1)
|
84
|
-
subject.push_state(state2)
|
85
|
-
expect(dotted_rule1).to receive(:production).and_return(prod1)
|
86
|
-
expect(prod1).to receive(:lhs).and_return(:dummy)
|
87
|
-
expect(dotted_rule2).to receive(:production).and_return(prod2)
|
88
|
-
expect(dotted_rule2).to receive(:reduce_item?).and_return(true)
|
89
|
-
expect(prod2).to receive(:lhs).and_return(non_term)
|
90
|
-
expect(subject.states_rewriting(non_term)).to eq([state2])
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'should list of ambiguous states' do
|
94
|
-
prod1 = double('fake-production1')
|
95
|
-
prod2 = double('fake-production2')
|
96
|
-
expect(subject.ambiguities.size).to eq(0)
|
97
|
-
|
98
|
-
# Adding states
|
99
|
-
subject.push_state(state1)
|
100
|
-
allow(dotted_rule1).to receive(:production).and_return(prod1)
|
101
|
-
allow(dotted_rule1).to receive(:"reduce_item?").and_return(true)
|
102
|
-
allow(dotted_rule1).to receive(:lhs).and_return(:something)
|
103
|
-
expect(subject.ambiguities.size).to eq(0)
|
104
|
-
allow(dotted_rule2).to receive(:production).and_return(prod2)
|
105
|
-
allow(dotted_rule2).to receive(:"reduce_item?").and_return(true)
|
106
|
-
allow(dotted_rule2).to receive(:lhs).and_return(:something_else)
|
107
|
-
subject.push_state(state2)
|
108
|
-
expect(subject.ambiguities.size).to eq(0)
|
109
|
-
dotted_rule3 = double('fake_dotted_rule3')
|
110
|
-
allow(dotted_rule3).to receive(:production).and_return(prod2)
|
111
|
-
allow(dotted_rule3).to receive(:"reduce_item?").and_return(true)
|
112
|
-
allow(dotted_rule3).to receive(:lhs).and_return(:something_else)
|
113
|
-
state3 = ParseState.new(dotted_rule3, 5)
|
114
|
-
subject.push_state(state3)
|
115
|
-
expect(subject.ambiguities[0]).to eq([state2, state3])
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'should complain when impossible predecessor of parse state' do
|
119
|
-
subject.push_state(state1)
|
120
|
-
subject.push_state(state2)
|
121
|
-
expect(dotted_rule1).to receive(:prev_position).and_return(nil)
|
122
|
-
err = StandardError
|
123
|
-
expect { subject.predecessor_state(state1) }.to raise_error(err)
|
124
|
-
end
|
125
|
-
end # context
|
126
|
-
end # describe
|
127
|
-
end # module
|
128
|
-
end # module
|
129
|
-
|
130
|
-
# End of file
|