rley 0.7.03 → 0.7.08
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 +362 -62
- data/.travis.yml +6 -7
- data/CHANGELOG.md +20 -1
- data/LICENSE.txt +1 -1
- data/README.md +6 -7
- data/Rakefile +2 -0
- data/appveyor.yml +2 -4
- data/examples/NLP/benchmark_pico_en.rb +2 -0
- data/examples/NLP/engtagger.rb +193 -188
- data/examples/NLP/nano_eng/nano_en_demo.rb +2 -0
- data/examples/NLP/nano_eng/nano_grammar.rb +7 -5
- data/examples/NLP/pico_en_demo.rb +2 -0
- data/examples/data_formats/JSON/cli_options.rb +3 -1
- data/examples/data_formats/JSON/json_ast_builder.rb +14 -9
- data/examples/data_formats/JSON/json_ast_nodes.rb +14 -21
- data/examples/data_formats/JSON/json_demo.rb +2 -0
- data/examples/data_formats/JSON/json_grammar.rb +4 -2
- data/examples/data_formats/JSON/json_lexer.rb +10 -8
- data/examples/data_formats/JSON/json_minifier.rb +3 -1
- data/examples/general/calc_iter1/calc_ast_builder.rb +15 -10
- data/examples/general/calc_iter1/calc_ast_nodes.rb +25 -37
- data/examples/general/calc_iter1/calc_demo.rb +2 -0
- data/examples/general/calc_iter1/calc_grammar.rb +4 -2
- data/examples/general/calc_iter1/calc_lexer.rb +8 -4
- data/examples/general/calc_iter1/spec/calculator_spec.rb +7 -5
- data/examples/general/calc_iter2/calc_ast_builder.rb +7 -3
- data/examples/general/calc_iter2/calc_ast_nodes.rb +29 -43
- data/examples/general/calc_iter2/calc_demo.rb +2 -0
- data/examples/general/calc_iter2/calc_grammar.rb +5 -3
- data/examples/general/calc_iter2/calc_lexer.rb +13 -10
- data/examples/general/calc_iter2/spec/calculator_spec.rb +28 -26
- data/examples/general/left.rb +4 -2
- data/examples/general/right.rb +4 -2
- data/lib/rley.rb +2 -0
- data/lib/rley/base/base_parser.rb +2 -0
- data/lib/rley/base/dotted_item.rb +38 -41
- data/lib/rley/base/grm_items_builder.rb +2 -0
- data/lib/rley/constants.rb +5 -3
- data/lib/rley/engine.rb +22 -24
- data/lib/rley/formatter/asciitree.rb +6 -4
- data/lib/rley/formatter/base_formatter.rb +2 -0
- data/lib/rley/formatter/bracket_notation.rb +3 -8
- data/lib/rley/formatter/debug.rb +8 -6
- data/lib/rley/formatter/json.rb +4 -2
- data/lib/rley/gfg/call_edge.rb +3 -1
- data/lib/rley/gfg/edge.rb +7 -5
- data/lib/rley/gfg/end_vertex.rb +4 -6
- data/lib/rley/gfg/epsilon_edge.rb +3 -5
- data/lib/rley/gfg/grm_flow_graph.rb +31 -25
- data/lib/rley/gfg/item_vertex.rb +12 -22
- data/lib/rley/gfg/non_terminal_vertex.rb +6 -4
- data/lib/rley/gfg/return_edge.rb +2 -0
- data/lib/rley/gfg/scan_edge.rb +3 -1
- data/lib/rley/gfg/shortcut_edge.rb +4 -2
- data/lib/rley/gfg/start_vertex.rb +6 -8
- data/lib/rley/gfg/vertex.rb +47 -41
- data/lib/rley/lexical/token.rb +3 -1
- data/lib/rley/lexical/token_range.rb +8 -6
- data/lib/rley/parse_forest_visitor.rb +7 -5
- data/lib/rley/parse_rep/ast_base_builder.rb +11 -11
- data/lib/rley/parse_rep/cst_builder.rb +7 -4
- data/lib/rley/parse_rep/parse_forest_builder.rb +36 -25
- data/lib/rley/parse_rep/parse_forest_factory.rb +5 -3
- data/lib/rley/parse_rep/parse_rep_creator.rb +18 -13
- data/lib/rley/parse_rep/parse_tree_builder.rb +15 -15
- data/lib/rley/parse_rep/parse_tree_factory.rb +27 -25
- data/lib/rley/parse_tree_visitor.rb +3 -1
- data/lib/rley/parser/error_reason.rb +9 -8
- data/lib/rley/parser/gfg_chart.rb +54 -22
- data/lib/rley/parser/gfg_earley_parser.rb +3 -1
- data/lib/rley/parser/gfg_parsing.rb +51 -31
- data/lib/rley/parser/parse_entry.rb +29 -33
- data/lib/rley/parser/parse_entry_set.rb +32 -27
- data/lib/rley/parser/parse_entry_tracker.rb +6 -4
- data/lib/rley/parser/parse_state.rb +18 -21
- data/lib/rley/parser/parse_state_tracker.rb +6 -4
- data/lib/rley/parser/parse_tracer.rb +15 -13
- data/lib/rley/parser/parse_walker_factory.rb +28 -29
- data/lib/rley/parser/state_set.rb +11 -10
- data/lib/rley/ptree/non_terminal_node.rb +10 -6
- data/lib/rley/ptree/parse_tree.rb +6 -4
- data/lib/rley/ptree/parse_tree_node.rb +7 -5
- data/lib/rley/ptree/terminal_node.rb +9 -7
- data/lib/rley/rley_error.rb +12 -10
- data/lib/rley/sppf/alternative_node.rb +8 -6
- data/lib/rley/sppf/composite_node.rb +9 -7
- data/lib/rley/sppf/epsilon_node.rb +5 -3
- data/lib/rley/sppf/leaf_node.rb +5 -3
- data/lib/rley/sppf/non_terminal_node.rb +2 -0
- data/lib/rley/sppf/parse_forest.rb +19 -17
- data/lib/rley/sppf/sppf_node.rb +9 -8
- data/lib/rley/sppf/token_node.rb +5 -3
- data/lib/rley/syntax/grammar.rb +7 -5
- data/lib/rley/syntax/grammar_builder.rb +11 -9
- data/lib/rley/syntax/grm_symbol.rb +8 -6
- data/lib/rley/syntax/literal.rb +2 -0
- data/lib/rley/syntax/non_terminal.rb +11 -15
- data/lib/rley/syntax/production.rb +13 -11
- data/lib/rley/syntax/symbol_seq.rb +10 -10
- data/lib/rley/syntax/terminal.rb +6 -5
- data/lib/rley/syntax/verbatim_symbol.rb +5 -3
- data/lib/support/base_tokenizer.rb +23 -20
- data/spec/rley/base/dotted_item_spec.rb +4 -2
- data/spec/rley/base/grm_items_builder_spec.rb +2 -0
- data/spec/rley/engine_spec.rb +47 -9
- data/spec/rley/formatter/asciitree_spec.rb +11 -9
- data/spec/rley/formatter/bracket_notation_spec.rb +16 -14
- data/spec/rley/formatter/debug_spec.rb +4 -2
- data/spec/rley/formatter/json_spec.rb +5 -3
- data/spec/rley/gfg/call_edge_spec.rb +2 -0
- data/spec/rley/gfg/edge_spec.rb +2 -0
- data/spec/rley/gfg/end_vertex_spec.rb +7 -5
- data/spec/rley/gfg/epsilon_edge_spec.rb +2 -0
- data/spec/rley/gfg/grm_flow_graph_spec.rb +2 -0
- data/spec/rley/gfg/item_vertex_spec.rb +12 -10
- data/spec/rley/gfg/non_terminal_vertex_spec.rb +5 -3
- data/spec/rley/gfg/return_edge_spec.rb +2 -0
- data/spec/rley/gfg/scan_edge_spec.rb +2 -0
- data/spec/rley/gfg/shortcut_edge_spec.rb +3 -1
- data/spec/rley/gfg/start_vertex_spec.rb +7 -5
- data/spec/rley/gfg/vertex_spec.rb +5 -3
- data/spec/rley/lexical/token_range_spec.rb +18 -16
- data/spec/rley/lexical/token_spec.rb +4 -2
- data/spec/rley/parse_forest_visitor_spec.rb +167 -163
- data/spec/rley/parse_rep/ambiguous_parse_spec.rb +46 -44
- data/spec/rley/parse_rep/ast_builder_spec.rb +8 -6
- data/spec/rley/parse_rep/cst_builder_spec.rb +7 -5
- data/spec/rley/parse_rep/groucho_spec.rb +25 -25
- data/spec/rley/parse_rep/parse_forest_builder_spec.rb +28 -26
- data/spec/rley/parse_rep/parse_forest_factory_spec.rb +8 -6
- data/spec/rley/parse_rep/parse_tree_factory_spec.rb +4 -2
- data/spec/rley/parse_tree_visitor_spec.rb +12 -8
- data/spec/rley/parser/error_reason_spec.rb +8 -6
- data/spec/rley/parser/gfg_chart_spec.rb +17 -4
- data/spec/rley/parser/gfg_earley_parser_spec.rb +16 -11
- data/spec/rley/parser/gfg_parsing_spec.rb +41 -252
- data/spec/rley/parser/parse_entry_set_spec.rb +2 -0
- data/spec/rley/parser/parse_entry_spec.rb +21 -19
- data/spec/rley/parser/parse_state_spec.rb +7 -5
- data/spec/rley/parser/parse_tracer_spec.rb +16 -14
- data/spec/rley/parser/parse_walker_factory_spec.rb +10 -8
- data/spec/rley/parser/state_set_spec.rb +24 -22
- data/spec/rley/ptree/non_terminal_node_spec.rb +7 -3
- data/spec/rley/ptree/parse_tree_node_spec.rb +6 -4
- data/spec/rley/ptree/parse_tree_spec.rb +2 -0
- data/spec/rley/ptree/terminal_node_spec.rb +8 -6
- data/spec/rley/sppf/alternative_node_spec.rb +8 -6
- data/spec/rley/sppf/non_terminal_node_spec.rb +5 -3
- data/spec/rley/sppf/token_node_spec.rb +6 -4
- data/spec/rley/support/ambiguous_grammar_helper.rb +5 -4
- data/spec/rley/support/expectation_helper.rb +2 -0
- data/spec/rley/support/grammar_abc_helper.rb +4 -4
- data/spec/rley/support/grammar_ambig01_helper.rb +6 -5
- data/spec/rley/support/grammar_arr_int_helper.rb +6 -5
- data/spec/rley/support/grammar_b_expr_helper.rb +6 -5
- data/spec/rley/support/grammar_helper.rb +2 -0
- data/spec/rley/support/grammar_l0_helper.rb +15 -16
- data/spec/rley/support/grammar_pb_helper.rb +8 -5
- data/spec/rley/support/grammar_sppf_helper.rb +3 -1
- data/spec/rley/syntax/grammar_builder_spec.rb +7 -5
- data/spec/rley/syntax/grammar_spec.rb +8 -6
- data/spec/rley/syntax/grm_symbol_spec.rb +3 -1
- data/spec/rley/syntax/literal_spec.rb +2 -0
- data/spec/rley/syntax/non_terminal_spec.rb +10 -8
- data/spec/rley/syntax/production_spec.rb +15 -13
- data/spec/rley/syntax/symbol_seq_spec.rb +4 -2
- data/spec/rley/syntax/terminal_spec.rb +7 -5
- data/spec/rley/syntax/verbatim_symbol_spec.rb +3 -1
- data/spec/spec_helper.rb +2 -12
- data/spec/support/base_tokenizer_spec.rb +9 -2
- metadata +21 -63
- data/.simplecov +0 -7
- data/Gemfile +0 -8
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Load the builder class
|
2
4
|
require_relative '../../../lib/rley/syntax/grammar_builder'
|
3
5
|
|
@@ -8,7 +10,7 @@ module GrammarSPPFHelper
|
|
8
10
|
# "SPPF-Style Parsing From Earley Recognizers" in
|
9
11
|
# Notes in Theoretical Computer Science 203, (2008), pp. 53-67
|
10
12
|
# contains a hidden left recursion and a cycle
|
11
|
-
def grammar_sppf_builder
|
13
|
+
def grammar_sppf_builder
|
12
14
|
builder = Rley::Syntax::GrammarBuilder.new do
|
13
15
|
add_terminals('a', 'b')
|
14
16
|
rule 'Phi' => 'S'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../../spec_helper'
|
2
4
|
|
3
5
|
# Load the class under test
|
@@ -22,7 +24,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
22
24
|
|
23
25
|
context 'Initialization with argument:' do
|
24
26
|
it 'could be created with a block argument' do
|
25
|
-
expect do
|
27
|
+
expect do
|
26
28
|
GrammarBuilder.new { nil }
|
27
29
|
end.not_to raise_error
|
28
30
|
end
|
@@ -97,14 +99,14 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
97
99
|
expect(new_prod.lhs).to eq(subject['A'])
|
98
100
|
expect_rhs = [subject['a'], subject['A'], subject['c']]
|
99
101
|
expect(new_prod.rhs.members).to eq(expect_rhs)
|
100
|
-
|
102
|
+
|
101
103
|
# Try another syntax
|
102
104
|
subject.add_production('A' => 'a A c')
|
103
105
|
expect(subject.productions.size).to eq(3)
|
104
106
|
new_prod = subject.productions.last
|
105
107
|
expect(new_prod.lhs).to eq(subject['A'])
|
106
108
|
expect_rhs = [subject['a'], subject['A'], subject['c']]
|
107
|
-
expect(new_prod.rhs.members).to eq(expect_rhs)
|
109
|
+
expect(new_prod.rhs.members).to eq(expect_rhs)
|
108
110
|
|
109
111
|
# GrammarBuilder#rule is an alias of add_production
|
110
112
|
subject.rule('A' => ['b'])
|
@@ -160,11 +162,11 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
160
162
|
err = StandardError
|
161
163
|
msg = 'Useless terminal symbol(s): d.'
|
162
164
|
expect { subject.grammar }.to raise_error(err, msg)
|
163
|
-
|
165
|
+
|
164
166
|
# Add another useless terminal
|
165
167
|
subject.add_terminals('e')
|
166
168
|
msg = 'Useless terminal symbol(s): d, e.'
|
167
|
-
expect { subject.grammar }.to raise_error(err, msg)
|
169
|
+
expect { subject.grammar }.to raise_error(err, msg)
|
168
170
|
end
|
169
171
|
|
170
172
|
it 'should build a grammar with nullable nonterminals' do
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../../spec_helper'
|
2
4
|
|
3
5
|
require_relative '../../../lib/rley/syntax/verbatim_symbol'
|
@@ -72,7 +74,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
72
74
|
let(:nt_A) { NonTerminal.new('A') }
|
73
75
|
let(:nt_B) { NonTerminal.new('B') }
|
74
76
|
let(:nt_C) { NonTerminal.new('C') }
|
75
|
-
let(:nt_D) { NonTerminal.new('D') }
|
77
|
+
let(:nt_D) { NonTerminal.new('D') }
|
76
78
|
let(:a_) { VerbatimSymbol.new('a') }
|
77
79
|
let(:b_) { VerbatimSymbol.new('b') }
|
78
80
|
let(:c_) { VerbatimSymbol.new('c') }
|
@@ -159,7 +161,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
159
161
|
expect(subject.name2symbol['b']).to eq(b_)
|
160
162
|
expect(subject.name2symbol['c']).to eq(c_)
|
161
163
|
end
|
162
|
-
|
164
|
+
|
163
165
|
it 'should ensure that each production has a name' do
|
164
166
|
subject.rules.each do |prod|
|
165
167
|
expect(prod.name).to match(Regexp.new("#{prod.lhs.name}_\\d$"))
|
@@ -216,8 +218,8 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
216
218
|
partitioning = instance.non_terminals.partition(&:generative?)
|
217
219
|
expect(partitioning[0].size).to eq(2)
|
218
220
|
expect(partitioning[0]).to eq([nt_S, nt_A])
|
219
|
-
expect(partitioning[1]).to eq([nt_B, nt_C, nt_D])
|
220
|
-
|
221
|
+
expect(partitioning[1]).to eq([nt_B, nt_C, nt_D])
|
222
|
+
|
221
223
|
undefined = instance.non_terminals.select(&:undefined?)
|
222
224
|
expect(undefined).to be_empty
|
223
225
|
end
|
@@ -246,13 +248,13 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
246
248
|
expect(nterm).to be_nullable
|
247
249
|
end
|
248
250
|
end
|
249
|
-
|
251
|
+
|
250
252
|
it 'should mark its nullable productions' do
|
251
253
|
# Given the above productions, here are our expectations:
|
252
254
|
expectations = [true, false, false, true]
|
253
255
|
actuals = subject.rules.map(&:nullable?)
|
254
256
|
expect(actuals).to eq(expectations)
|
255
|
-
end
|
257
|
+
end
|
256
258
|
end # context
|
257
259
|
end # describe
|
258
260
|
end # module
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../../spec_helper'
|
2
4
|
|
3
5
|
# Load the class under test
|
@@ -18,7 +20,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
18
20
|
expect(subject.name).to eq(sample_name)
|
19
21
|
end
|
20
22
|
end # context
|
21
|
-
|
23
|
+
|
22
24
|
context 'Provided services:' do
|
23
25
|
it 'should give its text representation' do
|
24
26
|
expect(subject.to_s).to eq(sample_name)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../../spec_helper'
|
2
4
|
|
3
5
|
# Load the class under test
|
@@ -17,28 +19,28 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
17
19
|
it 'should know its name' do
|
18
20
|
expect(subject.name).to eq(sample_name)
|
19
21
|
end
|
20
|
-
|
22
|
+
|
21
23
|
it 'should know that is a not a terminal' do
|
22
24
|
expect(subject).not_to be_terminal
|
23
25
|
end
|
24
26
|
end # context
|
25
27
|
|
26
|
-
|
27
|
-
context 'Provided services:' do
|
28
|
+
|
29
|
+
context 'Provided services:' do
|
28
30
|
it 'should know whether it is nullable' do
|
29
31
|
expect(subject.nullable?).to be_nil
|
30
32
|
subject.nullable = true
|
31
33
|
expect(subject).to be_nullable
|
32
34
|
subject.nullable = false
|
33
|
-
expect(subject).not_to be_nullable
|
35
|
+
expect(subject).not_to be_nullable
|
34
36
|
end
|
35
|
-
|
37
|
+
|
36
38
|
it 'should know whether it is defined' do
|
37
39
|
expect(subject.undefined?).to be_nil
|
38
40
|
subject.undefined = true
|
39
41
|
expect(subject).to be_undefined
|
40
42
|
subject.undefined = false
|
41
|
-
expect(subject).not_to be_undefined
|
43
|
+
expect(subject).not_to be_undefined
|
42
44
|
end
|
43
45
|
|
44
46
|
it 'should know whether it is generative' do
|
@@ -46,8 +48,8 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
46
48
|
subject.generative = true
|
47
49
|
expect(subject).to be_generative
|
48
50
|
subject.generative = false
|
49
|
-
expect(subject).not_to be_generative
|
50
|
-
end
|
51
|
+
expect(subject).not_to be_generative
|
52
|
+
end
|
51
53
|
end # context
|
52
54
|
end # describe
|
53
55
|
end # module
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../../spec_helper'
|
2
4
|
|
3
5
|
require_relative '../../../lib/rley/syntax/terminal'
|
@@ -22,11 +24,11 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
22
24
|
it 'should be created with a non-terminal and a symbol sequence' do
|
23
25
|
expect { Production.new(sentence, sequence) }.not_to raise_error
|
24
26
|
end
|
25
|
-
|
27
|
+
|
26
28
|
it 'should complain when its rhs is nil' do
|
27
29
|
err = StandardError
|
28
30
|
msg_prefix = 'Right side of a production of the kind '
|
29
|
-
msg_suffix = "'Sentence' => ... is nil."
|
31
|
+
msg_suffix = "'Sentence' => ... is nil."
|
30
32
|
msg = msg_prefix + msg_suffix
|
31
33
|
expect { Production.new(sentence, nil) }.to raise_error(err, msg)
|
32
34
|
end
|
@@ -47,42 +49,42 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
47
49
|
instance = Production.new(sentence, [])
|
48
50
|
expect(instance).to be_empty
|
49
51
|
end
|
50
|
-
|
52
|
+
|
51
53
|
it 'should be anonymous at creation' do
|
52
54
|
expect(subject.name).to be_nil
|
53
55
|
end
|
54
|
-
|
56
|
+
|
55
57
|
it 'should complain if its lhs is not a non-terminal' do
|
56
58
|
err = StandardError
|
57
59
|
msg_prefix = 'Left side of production must be a non-terminal symbol'
|
58
|
-
msg_suffix = ", found a #{String} instead."
|
60
|
+
msg_suffix = ", found a #{String} instead."
|
59
61
|
msg = msg_prefix + msg_suffix
|
60
62
|
expect { Production.new('wrong', sequence) }.to raise_error(err, msg)
|
61
63
|
end
|
62
64
|
end # context
|
63
|
-
|
65
|
+
|
64
66
|
context 'Provided services:' do
|
65
67
|
it 'should accept a name (i)' do
|
66
68
|
a_name = 'nominem'
|
67
69
|
subject.name = a_name
|
68
70
|
expect(subject.name).to eq(a_name)
|
69
71
|
end
|
70
|
-
|
72
|
+
|
71
73
|
it 'should accept a name (ii)' do
|
72
74
|
a_name = 'nominem'
|
73
75
|
subject.as(a_name)
|
74
|
-
expect(subject.name).to eq(a_name)
|
76
|
+
expect(subject.name).to eq(a_name)
|
75
77
|
end
|
76
|
-
|
78
|
+
|
77
79
|
it 'should provide human-readable representation of itself' do
|
78
80
|
subject.name = 'some name'
|
79
81
|
prefix = /^#<Rley::Syntax::Production:\d+ @name="some name"/
|
80
82
|
expect(subject.inspect).to match(prefix)
|
81
|
-
pattern = /@lhs=Sentence @rhs=#<Rley::Syntax::SymbolSeq/
|
83
|
+
pattern = /@lhs=Sentence @rhs=#<Rley::Syntax::SymbolSeq/
|
82
84
|
expect(subject.inspect).to match(pattern)
|
83
|
-
suffix = /> @generative=>$/
|
84
|
-
expect(subject.inspect).to match(suffix)
|
85
|
-
end
|
85
|
+
suffix = /> @generative=>$/
|
86
|
+
expect(subject.inspect).to match(suffix)
|
87
|
+
end
|
86
88
|
end # context
|
87
89
|
end # describe
|
88
90
|
end # module
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../../spec_helper'
|
2
4
|
|
3
5
|
require_relative '../../../lib/rley/syntax/non_terminal'
|
@@ -55,13 +57,13 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
55
57
|
unequal_one = SymbolSeq.new([verb, pp, np])
|
56
58
|
expect(subject == unequal_one).not_to eq(true)
|
57
59
|
end
|
58
|
-
|
60
|
+
|
59
61
|
it 'should complain when unable to compare' do
|
60
62
|
err = StandardError
|
61
63
|
msg = 'Cannot compare a SymbolSeq with a String'
|
62
64
|
expect { subject == 'dummy-text' }.to raise_error(err, msg)
|
63
65
|
end
|
64
|
-
|
66
|
+
|
65
67
|
it 'should provide human-readable representation of itself' do
|
66
68
|
suffix = /::SymbolSeq:\d+ @members=\["Verb", "NP", "PP"\]>$/
|
67
69
|
expect(subject.inspect).to match(suffix)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../../spec_helper'
|
2
4
|
|
3
5
|
# Load the class under test
|
@@ -17,18 +19,18 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
17
19
|
it 'should know its name' do
|
18
20
|
expect(subject.name).to eq(sample_name)
|
19
21
|
end
|
20
|
-
|
22
|
+
|
21
23
|
it 'should know that is a terminal symbol' do
|
22
24
|
expect(subject).to be_terminal
|
23
|
-
end
|
24
|
-
|
25
|
+
end
|
26
|
+
|
25
27
|
it "should know that isn't nullable" do
|
26
28
|
expect(subject).not_to be_nullable
|
27
29
|
end
|
28
|
-
|
30
|
+
|
29
31
|
it 'should know that it is generative' do
|
30
32
|
expect(subject).to be_generative
|
31
|
-
end
|
33
|
+
end
|
32
34
|
end # context
|
33
35
|
end # describe
|
34
36
|
end # module
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../../spec_helper'
|
2
4
|
|
3
5
|
# Load the class under test
|
@@ -22,7 +24,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
22
24
|
expect(subject.text).to eq(sample_name)
|
23
25
|
end
|
24
26
|
end # context
|
25
|
-
|
27
|
+
|
26
28
|
context 'Provided services:' do
|
27
29
|
it 'should give its text representation' do
|
28
30
|
expected = "'#{sample_name}'"
|
data/spec/spec_helper.rb
CHANGED
@@ -1,18 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# File: spec_helper.rb
|
2
4
|
# Purpose: utility file that is loaded by all our RSpec files
|
3
5
|
|
4
|
-
require 'simplecov'
|
5
|
-
require 'coveralls'
|
6
|
-
|
7
|
-
Coveralls.wear!
|
8
|
-
|
9
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
|
10
|
-
[
|
11
|
-
SimpleCov::Formatter::HTMLFormatter,
|
12
|
-
Coveralls::SimpleCov::Formatter
|
13
|
-
]
|
14
|
-
)
|
15
|
-
|
16
6
|
require 'pp' # Use pretty-print for debugging purposes
|
17
7
|
require 'rspec' # Use the RSpec framework
|
18
8
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../spec_helper'
|
2
4
|
|
3
5
|
# Load the class under test
|
@@ -23,6 +25,8 @@ describe BaseTokenizer do
|
|
23
25
|
|
24
26
|
|
25
27
|
context 'Provided services:' do
|
28
|
+
# Simplistic tokenizer.
|
29
|
+
# rubocop: disable Lint/ConstantDefinitionInBlock
|
26
30
|
class PB_Tokenizer < BaseTokenizer
|
27
31
|
@@lexeme2name = {
|
28
32
|
'(' => 'LPAREN',
|
@@ -32,8 +36,9 @@ describe BaseTokenizer do
|
|
32
36
|
|
33
37
|
protected
|
34
38
|
|
35
|
-
|
36
|
-
|
39
|
+
# rubocop: disable Lint/DuplicateBranch
|
40
|
+
def recognize_token
|
41
|
+
if (lexeme = scanner.scan(/[()]/)) # Single characters
|
37
42
|
# Delimiters, separators => single character token
|
38
43
|
build_token(@@lexeme2name[lexeme], lexeme)
|
39
44
|
elsif (lexeme = scanner.scan(/(?:\+)(?=\s)/)) # Isolated char
|
@@ -42,7 +47,9 @@ describe BaseTokenizer do
|
|
42
47
|
build_token('int', lexeme)
|
43
48
|
end
|
44
49
|
end
|
50
|
+
# rubocop: enable Lint/DuplicateBranch
|
45
51
|
end # class
|
52
|
+
# rubocop: enable Lint/ConstantDefinitionInBlock
|
46
53
|
|
47
54
|
# Basic tokenizer
|
48
55
|
# @return [Array<Rley::Lexical::Token>]
|
metadata
CHANGED
@@ -1,115 +1,75 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rley
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.08
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitri Geshef
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.7.0
|
20
17
|
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version: '0
|
23
|
-
type: :development
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
requirements:
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 0.7.0
|
30
|
-
- - "~>"
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '0.7'
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: rake
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
19
|
+
version: '10.0'
|
37
20
|
- - ">="
|
38
21
|
- !ruby/object:Gem::Version
|
39
22
|
version: 10.0.0
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '10.0'
|
43
23
|
type: :development
|
44
24
|
prerelease: false
|
45
25
|
version_requirements: !ruby/object:Gem::Requirement
|
46
26
|
requirements:
|
47
|
-
- - ">="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 10.0.0
|
50
27
|
- - "~>"
|
51
28
|
- !ruby/object:Gem::Version
|
52
29
|
version: '10.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 10.0.0
|
53
33
|
- !ruby/object:Gem::Dependency
|
54
34
|
name: rspec
|
55
35
|
requirement: !ruby/object:Gem::Requirement
|
56
36
|
requirements:
|
57
|
-
- - ">="
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: 3.5.0
|
60
37
|
- - "~>"
|
61
38
|
- !ruby/object:Gem::Version
|
62
39
|
version: '3.5'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 3.5.0
|
63
43
|
type: :development
|
64
44
|
prerelease: false
|
65
45
|
version_requirements: !ruby/object:Gem::Requirement
|
66
46
|
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 3.5.0
|
70
47
|
- - "~>"
|
71
48
|
- !ruby/object:Gem::Version
|
72
49
|
version: '3.5'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 3.5.0
|
73
53
|
- !ruby/object:Gem::Dependency
|
74
54
|
name: rubygems
|
75
55
|
requirement: !ruby/object:Gem::Requirement
|
76
56
|
requirements:
|
77
|
-
- - ">="
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version: 2.0.0
|
80
57
|
- - "~>"
|
81
58
|
- !ruby/object:Gem::Version
|
82
59
|
version: '2.0'
|
83
|
-
type: :development
|
84
|
-
prerelease: false
|
85
|
-
version_requirements: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
60
|
- - ">="
|
88
61
|
- !ruby/object:Gem::Version
|
89
62
|
version: 2.0.0
|
90
|
-
- - "~>"
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version: '2.0'
|
93
|
-
- !ruby/object:Gem::Dependency
|
94
|
-
name: simplecov
|
95
|
-
requirement: !ruby/object:Gem::Requirement
|
96
|
-
requirements:
|
97
|
-
- - ">="
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
version: 0.1.0
|
100
|
-
- - "~>"
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: '0.1'
|
103
63
|
type: :development
|
104
64
|
prerelease: false
|
105
65
|
version_requirements: !ruby/object:Gem::Requirement
|
106
66
|
requirements:
|
107
|
-
- - ">="
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 0.1.0
|
110
67
|
- - "~>"
|
111
68
|
- !ruby/object:Gem::Version
|
112
|
-
version: '0
|
69
|
+
version: '2.0'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 2.0.0
|
113
73
|
description: A general parser using the Earley algorithm.
|
114
74
|
email: famished.tiger@yahoo.com
|
115
75
|
executables: []
|
@@ -120,11 +80,9 @@ files:
|
|
120
80
|
- ".rspec"
|
121
81
|
- ".rubocop.yml"
|
122
82
|
- ".ruby-gemset"
|
123
|
-
- ".simplecov"
|
124
83
|
- ".travis.yml"
|
125
84
|
- ".yardopts"
|
126
85
|
- CHANGELOG.md
|
127
|
-
- Gemfile
|
128
86
|
- LICENSE.txt
|
129
87
|
- README.md
|
130
88
|
- Rakefile
|
@@ -308,15 +266,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
308
266
|
requirements:
|
309
267
|
- - ">="
|
310
268
|
- !ruby/object:Gem::Version
|
311
|
-
version: 2.
|
269
|
+
version: 2.5.0
|
312
270
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
313
271
|
requirements:
|
314
272
|
- - ">="
|
315
273
|
- !ruby/object:Gem::Version
|
316
274
|
version: '0'
|
317
275
|
requirements: []
|
318
|
-
rubygems_version: 3.
|
319
|
-
signing_key:
|
276
|
+
rubygems_version: 3.1.4
|
277
|
+
signing_key:
|
320
278
|
specification_version: 4
|
321
279
|
summary: Ruby implementation of the Earley's parsing algorithm
|
322
280
|
test_files:
|