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
@@ -19,18 +19,18 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
19
19
|
it 'should know its name' do
|
20
20
|
expect(subject.name).to eq(sample_name)
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
it 'should know that is a terminal symbol' do
|
24
24
|
expect(subject).to be_terminal
|
25
|
-
end
|
26
|
-
|
25
|
+
end
|
26
|
+
|
27
27
|
it "should know that isn't nullable" do
|
28
28
|
expect(subject).not_to be_nullable
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
it 'should know that it is generative' do
|
32
32
|
expect(subject).to be_generative
|
33
|
-
end
|
33
|
+
end
|
34
34
|
end # context
|
35
35
|
end # describe
|
36
36
|
end # module
|
data/spec/spec_helper.rb
CHANGED
@@ -3,18 +3,6 @@
|
|
3
3
|
# File: spec_helper.rb
|
4
4
|
# Purpose: utility file that is loaded by all our RSpec files
|
5
5
|
|
6
|
-
require 'simplecov'
|
7
|
-
require 'coveralls'
|
8
|
-
|
9
|
-
Coveralls.wear!
|
10
|
-
|
11
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
|
12
|
-
[
|
13
|
-
SimpleCov::Formatter::HTMLFormatter,
|
14
|
-
Coveralls::SimpleCov::Formatter
|
15
|
-
]
|
16
|
-
)
|
17
|
-
|
18
6
|
require 'pp' # Use pretty-print for debugging purposes
|
19
7
|
require 'rspec' # Use the RSpec framework
|
20
8
|
|
@@ -25,6 +25,8 @@ describe BaseTokenizer do
|
|
25
25
|
|
26
26
|
|
27
27
|
context 'Provided services:' do
|
28
|
+
# Simplistic tokenizer.
|
29
|
+
# rubocop: disable Lint/ConstantDefinitionInBlock
|
28
30
|
class PB_Tokenizer < BaseTokenizer
|
29
31
|
@@lexeme2name = {
|
30
32
|
'(' => 'LPAREN',
|
@@ -34,8 +36,9 @@ describe BaseTokenizer do
|
|
34
36
|
|
35
37
|
protected
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
+
# rubocop: disable Lint/DuplicateBranch
|
40
|
+
def recognize_token
|
41
|
+
if (lexeme = scanner.scan(/[()]/)) # Single characters
|
39
42
|
# Delimiters, separators => single character token
|
40
43
|
build_token(@@lexeme2name[lexeme], lexeme)
|
41
44
|
elsif (lexeme = scanner.scan(/(?:\+)(?=\s)/)) # Isolated char
|
@@ -44,7 +47,9 @@ describe BaseTokenizer do
|
|
44
47
|
build_token('int', lexeme)
|
45
48
|
end
|
46
49
|
end
|
50
|
+
# rubocop: enable Lint/DuplicateBranch
|
47
51
|
end # class
|
52
|
+
# rubocop: enable Lint/ConstantDefinitionInBlock
|
48
53
|
|
49
54
|
# Basic tokenizer
|
50
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.
|
4
|
+
version: 0.8.01
|
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-08-22 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,7 +80,6 @@ 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
|
@@ -177,8 +136,20 @@ files:
|
|
177
136
|
- lib/rley/gfg/shortcut_edge.rb
|
178
137
|
- lib/rley/gfg/start_vertex.rb
|
179
138
|
- lib/rley/gfg/vertex.rb
|
139
|
+
- lib/rley/interface.rb
|
180
140
|
- lib/rley/lexical/token.rb
|
181
141
|
- lib/rley/lexical/token_range.rb
|
142
|
+
- lib/rley/notation/all_notation_nodes.rb
|
143
|
+
- lib/rley/notation/ast_builder.rb
|
144
|
+
- lib/rley/notation/ast_node.rb
|
145
|
+
- lib/rley/notation/ast_visitor.rb
|
146
|
+
- lib/rley/notation/grammar.rb
|
147
|
+
- lib/rley/notation/grammar_builder.rb
|
148
|
+
- lib/rley/notation/grouping_node.rb
|
149
|
+
- lib/rley/notation/parser.rb
|
150
|
+
- lib/rley/notation/sequence_node.rb
|
151
|
+
- lib/rley/notation/symbol_node.rb
|
152
|
+
- lib/rley/notation/tokenizer.rb
|
182
153
|
- lib/rley/parse_forest_visitor.rb
|
183
154
|
- lib/rley/parse_rep/ast_base_builder.rb
|
184
155
|
- lib/rley/parse_rep/cst_builder.rb
|
@@ -195,11 +166,8 @@ files:
|
|
195
166
|
- lib/rley/parser/parse_entry.rb
|
196
167
|
- lib/rley/parser/parse_entry_set.rb
|
197
168
|
- lib/rley/parser/parse_entry_tracker.rb
|
198
|
-
- lib/rley/parser/parse_state.rb
|
199
|
-
- lib/rley/parser/parse_state_tracker.rb
|
200
169
|
- lib/rley/parser/parse_tracer.rb
|
201
170
|
- lib/rley/parser/parse_walker_factory.rb
|
202
|
-
- lib/rley/parser/state_set.rb
|
203
171
|
- lib/rley/ptree/non_terminal_node.rb
|
204
172
|
- lib/rley/ptree/parse_tree.rb
|
205
173
|
- lib/rley/ptree/parse_tree_node.rb
|
@@ -213,10 +181,11 @@ files:
|
|
213
181
|
- lib/rley/sppf/parse_forest.rb
|
214
182
|
- lib/rley/sppf/sppf_node.rb
|
215
183
|
- lib/rley/sppf/token_node.rb
|
184
|
+
- lib/rley/syntax/base_grammar_builder.rb
|
216
185
|
- lib/rley/syntax/grammar.rb
|
217
|
-
- lib/rley/syntax/grammar_builder.rb
|
218
186
|
- lib/rley/syntax/grm_symbol.rb
|
219
187
|
- lib/rley/syntax/literal.rb
|
188
|
+
- lib/rley/syntax/match_closest.rb
|
220
189
|
- lib/rley/syntax/non_terminal.rb
|
221
190
|
- lib/rley/syntax/production.rb
|
222
191
|
- lib/rley/syntax/symbol_seq.rb
|
@@ -244,6 +213,9 @@ files:
|
|
244
213
|
- spec/rley/gfg/vertex_spec.rb
|
245
214
|
- spec/rley/lexical/token_range_spec.rb
|
246
215
|
- spec/rley/lexical/token_spec.rb
|
216
|
+
- spec/rley/notation/grammar_builder_spec.rb
|
217
|
+
- spec/rley/notation/parser_spec.rb
|
218
|
+
- spec/rley/notation/tokenizer_spec.rb
|
247
219
|
- spec/rley/parse_forest_visitor_spec.rb
|
248
220
|
- spec/rley/parse_rep/ambiguous_parse_spec.rb
|
249
221
|
- spec/rley/parse_rep/ast_builder_spec.rb
|
@@ -253,16 +225,14 @@ files:
|
|
253
225
|
- spec/rley/parse_rep/parse_forest_factory_spec.rb
|
254
226
|
- spec/rley/parse_rep/parse_tree_factory_spec.rb
|
255
227
|
- spec/rley/parse_tree_visitor_spec.rb
|
228
|
+
- spec/rley/parser/dangling_else_spec.rb
|
256
229
|
- spec/rley/parser/error_reason_spec.rb
|
257
230
|
- spec/rley/parser/gfg_chart_spec.rb
|
258
231
|
- spec/rley/parser/gfg_earley_parser_spec.rb
|
259
232
|
- spec/rley/parser/gfg_parsing_spec.rb
|
260
233
|
- spec/rley/parser/parse_entry_set_spec.rb
|
261
234
|
- spec/rley/parser/parse_entry_spec.rb
|
262
|
-
- spec/rley/parser/parse_state_spec.rb
|
263
|
-
- spec/rley/parser/parse_tracer_spec.rb
|
264
235
|
- spec/rley/parser/parse_walker_factory_spec.rb
|
265
|
-
- spec/rley/parser/state_set_spec.rb
|
266
236
|
- spec/rley/ptree/non_terminal_node_spec.rb
|
267
237
|
- spec/rley/ptree/parse_tree_node_spec.rb
|
268
238
|
- spec/rley/ptree/parse_tree_spec.rb
|
@@ -277,13 +247,15 @@ files:
|
|
277
247
|
- spec/rley/support/grammar_arr_int_helper.rb
|
278
248
|
- spec/rley/support/grammar_b_expr_helper.rb
|
279
249
|
- spec/rley/support/grammar_helper.rb
|
250
|
+
- spec/rley/support/grammar_int_seq_helper.rb
|
280
251
|
- spec/rley/support/grammar_l0_helper.rb
|
281
252
|
- spec/rley/support/grammar_pb_helper.rb
|
282
253
|
- spec/rley/support/grammar_sppf_helper.rb
|
283
|
-
- spec/rley/syntax/
|
254
|
+
- spec/rley/syntax/base_grammar_builder_spec.rb
|
284
255
|
- spec/rley/syntax/grammar_spec.rb
|
285
256
|
- spec/rley/syntax/grm_symbol_spec.rb
|
286
257
|
- spec/rley/syntax/literal_spec.rb
|
258
|
+
- spec/rley/syntax/match_closest_spec.rb
|
287
259
|
- spec/rley/syntax/non_terminal_spec.rb
|
288
260
|
- spec/rley/syntax/production_spec.rb
|
289
261
|
- spec/rley/syntax/symbol_seq_spec.rb
|
@@ -307,15 +279,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
307
279
|
requirements:
|
308
280
|
- - ">="
|
309
281
|
- !ruby/object:Gem::Version
|
310
|
-
version: 2.
|
282
|
+
version: 2.5.0
|
311
283
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
312
284
|
requirements:
|
313
285
|
- - ">="
|
314
286
|
- !ruby/object:Gem::Version
|
315
287
|
version: '0'
|
316
288
|
requirements: []
|
317
|
-
rubygems_version: 3.
|
318
|
-
signing_key:
|
289
|
+
rubygems_version: 3.1.4
|
290
|
+
signing_key:
|
319
291
|
specification_version: 4
|
320
292
|
summary: Ruby implementation of the Earley's parsing algorithm
|
321
293
|
test_files:
|
@@ -340,16 +312,17 @@ test_files:
|
|
340
312
|
- spec/rley/gfg/vertex_spec.rb
|
341
313
|
- spec/rley/lexical/token_range_spec.rb
|
342
314
|
- spec/rley/lexical/token_spec.rb
|
315
|
+
- spec/rley/notation/grammar_builder_spec.rb
|
316
|
+
- spec/rley/notation/parser_spec.rb
|
317
|
+
- spec/rley/notation/tokenizer_spec.rb
|
318
|
+
- spec/rley/parser/dangling_else_spec.rb
|
343
319
|
- spec/rley/parser/error_reason_spec.rb
|
344
320
|
- spec/rley/parser/gfg_chart_spec.rb
|
345
321
|
- spec/rley/parser/gfg_earley_parser_spec.rb
|
346
322
|
- spec/rley/parser/gfg_parsing_spec.rb
|
347
323
|
- spec/rley/parser/parse_entry_set_spec.rb
|
348
324
|
- spec/rley/parser/parse_entry_spec.rb
|
349
|
-
- spec/rley/parser/parse_state_spec.rb
|
350
|
-
- spec/rley/parser/parse_tracer_spec.rb
|
351
325
|
- spec/rley/parser/parse_walker_factory_spec.rb
|
352
|
-
- spec/rley/parser/state_set_spec.rb
|
353
326
|
- spec/rley/parse_forest_visitor_spec.rb
|
354
327
|
- spec/rley/parse_rep/ambiguous_parse_spec.rb
|
355
328
|
- spec/rley/parse_rep/ast_builder_spec.rb
|
@@ -366,10 +339,11 @@ test_files:
|
|
366
339
|
- spec/rley/sppf/alternative_node_spec.rb
|
367
340
|
- spec/rley/sppf/non_terminal_node_spec.rb
|
368
341
|
- spec/rley/sppf/token_node_spec.rb
|
369
|
-
- spec/rley/syntax/
|
342
|
+
- spec/rley/syntax/base_grammar_builder_spec.rb
|
370
343
|
- spec/rley/syntax/grammar_spec.rb
|
371
344
|
- spec/rley/syntax/grm_symbol_spec.rb
|
372
345
|
- spec/rley/syntax/literal_spec.rb
|
346
|
+
- spec/rley/syntax/match_closest_spec.rb
|
373
347
|
- spec/rley/syntax/non_terminal_spec.rb
|
374
348
|
- spec/rley/syntax/production_spec.rb
|
375
349
|
- spec/rley/syntax/symbol_seq_spec.rb
|
data/.simplecov
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Rley # This module is used as a namespace
|
4
|
-
module Parser # This module is used as a namespace
|
5
|
-
class ParseState
|
6
|
-
attr_reader(:dotted_rule)
|
7
|
-
|
8
|
-
# the position in the input that matches the beginning of the rhs
|
9
|
-
# of the production.
|
10
|
-
attr_reader(:origin)
|
11
|
-
|
12
|
-
def initialize(aDottedRule, theOrigin)
|
13
|
-
@dotted_rule = valid_dotted_rule(aDottedRule)
|
14
|
-
@origin = theOrigin
|
15
|
-
end
|
16
|
-
|
17
|
-
# Equality comparison. A parse state behaves as a value object.
|
18
|
-
def ==(other)
|
19
|
-
return true if equal?(other)
|
20
|
-
|
21
|
-
result = (dotted_rule == other.dotted_rule) &&
|
22
|
-
(origin == other.origin)
|
23
|
-
|
24
|
-
return result
|
25
|
-
end
|
26
|
-
|
27
|
-
# Returns true if the dot is at the end of the rhs of the production.
|
28
|
-
# In other words, the complete rhs matches the input.
|
29
|
-
def complete?()
|
30
|
-
return dotted_rule.reduce_item?
|
31
|
-
end
|
32
|
-
|
33
|
-
# Returns true if the dot is at the start of the rhs of the production.
|
34
|
-
def predicted?()
|
35
|
-
return dotted_rule.predicted_item?
|
36
|
-
end
|
37
|
-
|
38
|
-
# Next expected symbol in the production
|
39
|
-
def next_symbol()
|
40
|
-
return dotted_rule.next_symbol
|
41
|
-
end
|
42
|
-
|
43
|
-
# Does this parse state have the 'other' as successor?
|
44
|
-
def precedes?(other)
|
45
|
-
return false if other == self
|
46
|
-
|
47
|
-
return false unless origin == other.origin
|
48
|
-
|
49
|
-
other_production = other.dotted_rule.production
|
50
|
-
return false unless dotted_rule.production == other_production
|
51
|
-
|
52
|
-
prev_position = other.dotted_rule.prev_position
|
53
|
-
result = if prev_position.nil?
|
54
|
-
false
|
55
|
-
else
|
56
|
-
dotted_rule.position == prev_position
|
57
|
-
end
|
58
|
-
|
59
|
-
return result
|
60
|
-
end
|
61
|
-
|
62
|
-
# Give a String representation of itself.
|
63
|
-
# The format of the text representation is
|
64
|
-
# "format of dotted rule" + " | " + origin
|
65
|
-
# @return [String]
|
66
|
-
def to_s()
|
67
|
-
return dotted_rule.to_s + " | #{origin}"
|
68
|
-
end
|
69
|
-
|
70
|
-
|
71
|
-
private
|
72
|
-
|
73
|
-
# Return the validated dotted item(rule)
|
74
|
-
def valid_dotted_rule(aDottedRule)
|
75
|
-
raise StandardError, 'Dotted item cannot be nil' if aDottedRule.nil?
|
76
|
-
|
77
|
-
return aDottedRule
|
78
|
-
end
|
79
|
-
end # class
|
80
|
-
end # module
|
81
|
-
end # module
|
82
|
-
|
83
|
-
# End of file
|