rley 0.2.15 → 0.3.00
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/CHANGELOG.md +4 -0
- data/lib/rley/constants.rb +1 -1
- data/lib/rley/gfg/call_edge.rb +30 -0
- data/lib/rley/gfg/edge.rb +4 -0
- data/lib/rley/gfg/end_vertex.rb +1 -1
- data/lib/rley/gfg/epsilon_edge.rb +0 -4
- data/lib/rley/gfg/grm_flow_graph.rb +32 -7
- data/lib/rley/gfg/item_vertex.rb +71 -25
- data/lib/rley/gfg/non_terminal_vertex.rb +10 -1
- data/lib/rley/gfg/return_edge.rb +31 -0
- data/lib/rley/gfg/scan_edge.rb +2 -1
- data/lib/rley/gfg/shortcut_edge.rb +26 -0
- data/lib/rley/gfg/start_vertex.rb +2 -2
- data/lib/rley/gfg/vertex.rb +27 -1
- data/lib/rley/parse_forest_visitor.rb +115 -0
- data/lib/rley/parser/base_parser.rb +27 -0
- data/lib/rley/parser/dotted_item.rb +11 -0
- data/lib/rley/parser/earley_parser.rb +3 -15
- data/lib/rley/parser/gfg_chart.rb +106 -0
- data/lib/rley/parser/gfg_earley_parser.rb +139 -0
- data/lib/rley/parser/gfg_parsing.rb +384 -0
- data/lib/rley/parser/parse_entry.rb +148 -0
- data/lib/rley/parser/parse_entry_set.rb +104 -0
- data/lib/rley/parser/parse_entry_tracker.rb +56 -0
- data/lib/rley/parser/parse_forest_builder.rb +229 -0
- data/lib/rley/parser/parse_forest_factory.rb +54 -0
- data/lib/rley/parser/parse_walker_factory.rb +237 -0
- data/lib/rley/ptree/token_range.rb +14 -1
- data/lib/rley/sppf/alternative_node.rb +34 -0
- data/lib/rley/sppf/composite_node.rb +27 -0
- data/lib/rley/sppf/epsilon_node.rb +27 -0
- data/lib/rley/sppf/leaf_node.rb +12 -0
- data/lib/rley/sppf/non_terminal_node.rb +38 -0
- data/lib/rley/sppf/parse_forest.rb +48 -0
- data/lib/rley/sppf/sppf_node.rb +24 -0
- data/lib/rley/sppf/token_node.rb +29 -0
- data/lib/rley/syntax/grammar_builder.rb +16 -12
- data/lib/rley/syntax/grm_symbol.rb +6 -0
- data/lib/rley/syntax/terminal.rb +5 -0
- data/spec/rley/gfg/call_edge_spec.rb +51 -0
- data/spec/rley/gfg/end_vertex_spec.rb +1 -0
- data/spec/rley/gfg/grm_flow_graph_spec.rb +24 -2
- data/spec/rley/gfg/item_vertex_spec.rb +75 -6
- data/spec/rley/gfg/non_terminal_vertex_spec.rb +14 -0
- data/spec/rley/gfg/return_edge_spec.rb +51 -0
- data/spec/rley/gfg/shortcut_edge_spec.rb +43 -0
- data/spec/rley/gfg/vertex_spec.rb +52 -37
- data/spec/rley/parse_forest_visitor_spec.rb +238 -0
- data/spec/rley/parser/dotted_item_spec.rb +29 -8
- data/spec/rley/parser/gfg_chart_spec.rb +138 -0
- data/spec/rley/parser/gfg_earley_parser_spec.rb +918 -0
- data/spec/rley/parser/gfg_parsing_spec.rb +565 -0
- data/spec/rley/parser/parse_entry_set_spec.rb +179 -0
- data/spec/rley/parser/parse_entry_spec.rb +208 -0
- data/spec/rley/parser/parse_forest_builder_spec.rb +382 -0
- data/spec/rley/parser/parse_forest_factory_spec.rb +81 -0
- data/spec/rley/parser/parse_walker_factory_spec.rb +235 -0
- data/spec/rley/parser/state_set_spec.rb +4 -0
- data/spec/rley/sppf/alternative_node_spec.rb +72 -0
- data/spec/rley/sppf/antecedence_graph.rb +87 -0
- data/spec/rley/sppf/forest_representation.rb +136 -0
- data/spec/rley/sppf/gfg_representation.rb +111 -0
- data/spec/rley/sppf/non_terminal_node_spec.rb +64 -0
- data/spec/rley/support/ambiguous_grammar_helper.rb +36 -36
- data/spec/rley/support/expectation_helper.rb +36 -0
- data/spec/rley/support/grammar_helper.rb +28 -0
- data/spec/rley/support/grammar_sppf_helper.rb +25 -0
- data/spec/rley/syntax/grammar_builder_spec.rb +5 -0
- data/spec/rley/syntax/non_terminal_spec.rb +4 -0
- data/spec/rley/syntax/terminal_spec.rb +4 -0
- metadata +58 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Load the builder class
|
|
2
|
+
require_relative '../../../lib/rley/syntax/grammar_builder'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
module GrammarSPPFHelper
|
|
6
|
+
# Factory method. Creates a grammar builder for a
|
|
7
|
+
# grammar described in paper from Elisabeth Scott
|
|
8
|
+
# "SPPF-Style Parsing From Earley Recognizers" in
|
|
9
|
+
# Notes in Theoretical Computer Science 203, (2008), pp. 53-67
|
|
10
|
+
# contains a hidden left recursion and a cycle
|
|
11
|
+
def grammar_sppf_builder()
|
|
12
|
+
builder = Rley::Syntax::GrammarBuilder.new
|
|
13
|
+
builder.add_terminals('a', 'b')
|
|
14
|
+
builder.add_production('Phi' => %'S')
|
|
15
|
+
builder.add_production('S' => %w[A T])
|
|
16
|
+
builder.add_production('S' => %w[a T])
|
|
17
|
+
builder.add_production('A' => 'a')
|
|
18
|
+
builder.add_production('A' => %w[B A])
|
|
19
|
+
builder.add_production('B' => [])
|
|
20
|
+
builder.add_production('T' => %w( b b b))
|
|
21
|
+
|
|
22
|
+
return builder
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end # module
|
|
@@ -101,6 +101,11 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
|
101
101
|
expect(subject.grammar).to be_kind_of(Grammar)
|
|
102
102
|
grm = subject.grammar
|
|
103
103
|
expect(grm.rules).to eq(subject.productions)
|
|
104
|
+
|
|
105
|
+
# Invoking the factory method again should return
|
|
106
|
+
# the same grammar object
|
|
107
|
+
second_time = subject.grammar
|
|
108
|
+
expect(second_time).to eq(grm)
|
|
104
109
|
end
|
|
105
110
|
|
|
106
111
|
it 'should complain in absence of symbols' do
|
|
@@ -17,6 +17,10 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
|
17
17
|
it 'should know its name' do
|
|
18
18
|
expect(subject.name).to eq(sample_name)
|
|
19
19
|
end
|
|
20
|
+
|
|
21
|
+
it 'should know that is a not a terminal' do
|
|
22
|
+
expect(subject).not_to be_terminal
|
|
23
|
+
end
|
|
20
24
|
end # context
|
|
21
25
|
|
|
22
26
|
|
|
@@ -18,6 +18,10 @@ module Rley # Open this namespace to avoid module qualifier prefixes
|
|
|
18
18
|
expect(subject.name).to eq(sample_name)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
it 'should know that is a terminal symbol' do
|
|
22
|
+
expect(subject).to be_terminal
|
|
23
|
+
end
|
|
24
|
+
|
|
21
25
|
it "should know that isn't nullable" do
|
|
22
26
|
expect(subject).not_to be_nullable
|
|
23
27
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rley
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.00
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dimitri Geshef
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-10-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -152,24 +152,38 @@ files:
|
|
|
152
152
|
- lib/rley/formatter/base_formatter.rb
|
|
153
153
|
- lib/rley/formatter/debug.rb
|
|
154
154
|
- lib/rley/formatter/json.rb
|
|
155
|
+
- lib/rley/gfg/call_edge.rb
|
|
155
156
|
- lib/rley/gfg/edge.rb
|
|
156
157
|
- lib/rley/gfg/end_vertex.rb
|
|
157
158
|
- lib/rley/gfg/epsilon_edge.rb
|
|
158
159
|
- lib/rley/gfg/grm_flow_graph.rb
|
|
159
160
|
- lib/rley/gfg/item_vertex.rb
|
|
160
161
|
- lib/rley/gfg/non_terminal_vertex.rb
|
|
162
|
+
- lib/rley/gfg/return_edge.rb
|
|
161
163
|
- lib/rley/gfg/scan_edge.rb
|
|
164
|
+
- lib/rley/gfg/shortcut_edge.rb
|
|
162
165
|
- lib/rley/gfg/start_vertex.rb
|
|
163
166
|
- lib/rley/gfg/vertex.rb
|
|
167
|
+
- lib/rley/parse_forest_visitor.rb
|
|
164
168
|
- lib/rley/parse_tree_visitor.rb
|
|
169
|
+
- lib/rley/parser/base_parser.rb
|
|
165
170
|
- lib/rley/parser/chart.rb
|
|
166
171
|
- lib/rley/parser/dotted_item.rb
|
|
167
172
|
- lib/rley/parser/earley_parser.rb
|
|
173
|
+
- lib/rley/parser/gfg_chart.rb
|
|
174
|
+
- lib/rley/parser/gfg_earley_parser.rb
|
|
175
|
+
- lib/rley/parser/gfg_parsing.rb
|
|
168
176
|
- lib/rley/parser/grm_items_builder.rb
|
|
177
|
+
- lib/rley/parser/parse_entry.rb
|
|
178
|
+
- lib/rley/parser/parse_entry_set.rb
|
|
179
|
+
- lib/rley/parser/parse_entry_tracker.rb
|
|
180
|
+
- lib/rley/parser/parse_forest_builder.rb
|
|
181
|
+
- lib/rley/parser/parse_forest_factory.rb
|
|
169
182
|
- lib/rley/parser/parse_state.rb
|
|
170
183
|
- lib/rley/parser/parse_state_tracker.rb
|
|
171
184
|
- lib/rley/parser/parse_tracer.rb
|
|
172
185
|
- lib/rley/parser/parse_tree_builder.rb
|
|
186
|
+
- lib/rley/parser/parse_walker_factory.rb
|
|
173
187
|
- lib/rley/parser/parsing.rb
|
|
174
188
|
- lib/rley/parser/state_set.rb
|
|
175
189
|
- lib/rley/parser/token.rb
|
|
@@ -178,6 +192,14 @@ files:
|
|
|
178
192
|
- lib/rley/ptree/parse_tree_node.rb
|
|
179
193
|
- lib/rley/ptree/terminal_node.rb
|
|
180
194
|
- lib/rley/ptree/token_range.rb
|
|
195
|
+
- lib/rley/sppf/alternative_node.rb
|
|
196
|
+
- lib/rley/sppf/composite_node.rb
|
|
197
|
+
- lib/rley/sppf/epsilon_node.rb
|
|
198
|
+
- lib/rley/sppf/leaf_node.rb
|
|
199
|
+
- lib/rley/sppf/non_terminal_node.rb
|
|
200
|
+
- lib/rley/sppf/parse_forest.rb
|
|
201
|
+
- lib/rley/sppf/sppf_node.rb
|
|
202
|
+
- lib/rley/sppf/token_node.rb
|
|
181
203
|
- lib/rley/syntax/grammar.rb
|
|
182
204
|
- lib/rley/syntax/grammar_builder.rb
|
|
183
205
|
- lib/rley/syntax/grm_symbol.rb
|
|
@@ -189,23 +211,35 @@ files:
|
|
|
189
211
|
- lib/rley/syntax/verbatim_symbol.rb
|
|
190
212
|
- spec/rley/formatter/debug_spec.rb
|
|
191
213
|
- spec/rley/formatter/json_spec.rb
|
|
214
|
+
- spec/rley/gfg/call_edge_spec.rb
|
|
192
215
|
- spec/rley/gfg/edge_spec.rb
|
|
193
216
|
- spec/rley/gfg/end_vertex_spec.rb
|
|
194
217
|
- spec/rley/gfg/epsilon_edge_spec.rb
|
|
195
218
|
- spec/rley/gfg/grm_flow_graph_spec.rb
|
|
196
219
|
- spec/rley/gfg/item_vertex_spec.rb
|
|
197
220
|
- spec/rley/gfg/non_terminal_vertex_spec.rb
|
|
221
|
+
- spec/rley/gfg/return_edge_spec.rb
|
|
198
222
|
- spec/rley/gfg/scan_edge_spec.rb
|
|
223
|
+
- spec/rley/gfg/shortcut_edge_spec.rb
|
|
199
224
|
- spec/rley/gfg/start_vertex_spec.rb
|
|
200
225
|
- spec/rley/gfg/vertex_spec.rb
|
|
226
|
+
- spec/rley/parse_forest_visitor_spec.rb
|
|
201
227
|
- spec/rley/parse_tree_visitor_spec.rb
|
|
202
228
|
- spec/rley/parser/chart_spec.rb
|
|
203
229
|
- spec/rley/parser/dotted_item_spec.rb
|
|
204
230
|
- spec/rley/parser/earley_parser_spec.rb
|
|
231
|
+
- spec/rley/parser/gfg_chart_spec.rb
|
|
232
|
+
- spec/rley/parser/gfg_earley_parser_spec.rb
|
|
233
|
+
- spec/rley/parser/gfg_parsing_spec.rb
|
|
205
234
|
- spec/rley/parser/grm_items_builder_spec.rb
|
|
235
|
+
- spec/rley/parser/parse_entry_set_spec.rb
|
|
236
|
+
- spec/rley/parser/parse_entry_spec.rb
|
|
237
|
+
- spec/rley/parser/parse_forest_builder_spec.rb
|
|
238
|
+
- spec/rley/parser/parse_forest_factory_spec.rb
|
|
206
239
|
- spec/rley/parser/parse_state_spec.rb
|
|
207
240
|
- spec/rley/parser/parse_tracer_spec.rb
|
|
208
241
|
- spec/rley/parser/parse_tree_builder_spec.rb
|
|
242
|
+
- spec/rley/parser/parse_walker_factory_spec.rb
|
|
209
243
|
- spec/rley/parser/parsing_spec.rb
|
|
210
244
|
- spec/rley/parser/state_set_spec.rb
|
|
211
245
|
- spec/rley/parser/token_spec.rb
|
|
@@ -214,9 +248,17 @@ files:
|
|
|
214
248
|
- spec/rley/ptree/parse_tree_spec.rb
|
|
215
249
|
- spec/rley/ptree/terminal_node_spec.rb
|
|
216
250
|
- spec/rley/ptree/token_range_spec.rb
|
|
251
|
+
- spec/rley/sppf/alternative_node_spec.rb
|
|
252
|
+
- spec/rley/sppf/antecedence_graph.rb
|
|
253
|
+
- spec/rley/sppf/forest_representation.rb
|
|
254
|
+
- spec/rley/sppf/gfg_representation.rb
|
|
255
|
+
- spec/rley/sppf/non_terminal_node_spec.rb
|
|
217
256
|
- spec/rley/support/ambiguous_grammar_helper.rb
|
|
257
|
+
- spec/rley/support/expectation_helper.rb
|
|
218
258
|
- spec/rley/support/grammar_abc_helper.rb
|
|
219
259
|
- spec/rley/support/grammar_b_expr_helper.rb
|
|
260
|
+
- spec/rley/support/grammar_helper.rb
|
|
261
|
+
- spec/rley/support/grammar_sppf_helper.rb
|
|
220
262
|
- spec/rley/syntax/grammar_builder_spec.rb
|
|
221
263
|
- spec/rley/syntax/grammar_spec.rb
|
|
222
264
|
- spec/rley/syntax/grm_symbol_spec.rb
|
|
@@ -258,31 +300,45 @@ summary: Ruby implementation of the Earley's parsing algorithm
|
|
|
258
300
|
test_files:
|
|
259
301
|
- spec/rley/formatter/debug_spec.rb
|
|
260
302
|
- spec/rley/formatter/json_spec.rb
|
|
303
|
+
- spec/rley/gfg/call_edge_spec.rb
|
|
261
304
|
- spec/rley/gfg/edge_spec.rb
|
|
262
305
|
- spec/rley/gfg/end_vertex_spec.rb
|
|
263
306
|
- spec/rley/gfg/epsilon_edge_spec.rb
|
|
264
307
|
- spec/rley/gfg/grm_flow_graph_spec.rb
|
|
265
308
|
- spec/rley/gfg/item_vertex_spec.rb
|
|
266
309
|
- spec/rley/gfg/non_terminal_vertex_spec.rb
|
|
310
|
+
- spec/rley/gfg/return_edge_spec.rb
|
|
267
311
|
- spec/rley/gfg/scan_edge_spec.rb
|
|
312
|
+
- spec/rley/gfg/shortcut_edge_spec.rb
|
|
268
313
|
- spec/rley/gfg/start_vertex_spec.rb
|
|
269
314
|
- spec/rley/gfg/vertex_spec.rb
|
|
270
315
|
- spec/rley/parser/chart_spec.rb
|
|
271
316
|
- spec/rley/parser/dotted_item_spec.rb
|
|
272
317
|
- spec/rley/parser/earley_parser_spec.rb
|
|
318
|
+
- spec/rley/parser/gfg_chart_spec.rb
|
|
319
|
+
- spec/rley/parser/gfg_earley_parser_spec.rb
|
|
320
|
+
- spec/rley/parser/gfg_parsing_spec.rb
|
|
273
321
|
- spec/rley/parser/grm_items_builder_spec.rb
|
|
322
|
+
- spec/rley/parser/parse_entry_set_spec.rb
|
|
323
|
+
- spec/rley/parser/parse_entry_spec.rb
|
|
324
|
+
- spec/rley/parser/parse_forest_builder_spec.rb
|
|
325
|
+
- spec/rley/parser/parse_forest_factory_spec.rb
|
|
274
326
|
- spec/rley/parser/parse_state_spec.rb
|
|
275
327
|
- spec/rley/parser/parse_tracer_spec.rb
|
|
276
328
|
- spec/rley/parser/parse_tree_builder_spec.rb
|
|
329
|
+
- spec/rley/parser/parse_walker_factory_spec.rb
|
|
277
330
|
- spec/rley/parser/parsing_spec.rb
|
|
278
331
|
- spec/rley/parser/state_set_spec.rb
|
|
279
332
|
- spec/rley/parser/token_spec.rb
|
|
333
|
+
- spec/rley/parse_forest_visitor_spec.rb
|
|
280
334
|
- spec/rley/parse_tree_visitor_spec.rb
|
|
281
335
|
- spec/rley/ptree/non_terminal_node_spec.rb
|
|
282
336
|
- spec/rley/ptree/parse_tree_node_spec.rb
|
|
283
337
|
- spec/rley/ptree/parse_tree_spec.rb
|
|
284
338
|
- spec/rley/ptree/terminal_node_spec.rb
|
|
285
339
|
- spec/rley/ptree/token_range_spec.rb
|
|
340
|
+
- spec/rley/sppf/alternative_node_spec.rb
|
|
341
|
+
- spec/rley/sppf/non_terminal_node_spec.rb
|
|
286
342
|
- spec/rley/syntax/grammar_builder_spec.rb
|
|
287
343
|
- spec/rley/syntax/grammar_spec.rb
|
|
288
344
|
- spec/rley/syntax/grm_symbol_spec.rb
|