rley 0.2.15 → 0.3.00
Sign up to get free protection for your applications and to get access to all the features.
- 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
|