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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/rley/constants.rb +1 -1
  4. data/lib/rley/gfg/call_edge.rb +30 -0
  5. data/lib/rley/gfg/edge.rb +4 -0
  6. data/lib/rley/gfg/end_vertex.rb +1 -1
  7. data/lib/rley/gfg/epsilon_edge.rb +0 -4
  8. data/lib/rley/gfg/grm_flow_graph.rb +32 -7
  9. data/lib/rley/gfg/item_vertex.rb +71 -25
  10. data/lib/rley/gfg/non_terminal_vertex.rb +10 -1
  11. data/lib/rley/gfg/return_edge.rb +31 -0
  12. data/lib/rley/gfg/scan_edge.rb +2 -1
  13. data/lib/rley/gfg/shortcut_edge.rb +26 -0
  14. data/lib/rley/gfg/start_vertex.rb +2 -2
  15. data/lib/rley/gfg/vertex.rb +27 -1
  16. data/lib/rley/parse_forest_visitor.rb +115 -0
  17. data/lib/rley/parser/base_parser.rb +27 -0
  18. data/lib/rley/parser/dotted_item.rb +11 -0
  19. data/lib/rley/parser/earley_parser.rb +3 -15
  20. data/lib/rley/parser/gfg_chart.rb +106 -0
  21. data/lib/rley/parser/gfg_earley_parser.rb +139 -0
  22. data/lib/rley/parser/gfg_parsing.rb +384 -0
  23. data/lib/rley/parser/parse_entry.rb +148 -0
  24. data/lib/rley/parser/parse_entry_set.rb +104 -0
  25. data/lib/rley/parser/parse_entry_tracker.rb +56 -0
  26. data/lib/rley/parser/parse_forest_builder.rb +229 -0
  27. data/lib/rley/parser/parse_forest_factory.rb +54 -0
  28. data/lib/rley/parser/parse_walker_factory.rb +237 -0
  29. data/lib/rley/ptree/token_range.rb +14 -1
  30. data/lib/rley/sppf/alternative_node.rb +34 -0
  31. data/lib/rley/sppf/composite_node.rb +27 -0
  32. data/lib/rley/sppf/epsilon_node.rb +27 -0
  33. data/lib/rley/sppf/leaf_node.rb +12 -0
  34. data/lib/rley/sppf/non_terminal_node.rb +38 -0
  35. data/lib/rley/sppf/parse_forest.rb +48 -0
  36. data/lib/rley/sppf/sppf_node.rb +24 -0
  37. data/lib/rley/sppf/token_node.rb +29 -0
  38. data/lib/rley/syntax/grammar_builder.rb +16 -12
  39. data/lib/rley/syntax/grm_symbol.rb +6 -0
  40. data/lib/rley/syntax/terminal.rb +5 -0
  41. data/spec/rley/gfg/call_edge_spec.rb +51 -0
  42. data/spec/rley/gfg/end_vertex_spec.rb +1 -0
  43. data/spec/rley/gfg/grm_flow_graph_spec.rb +24 -2
  44. data/spec/rley/gfg/item_vertex_spec.rb +75 -6
  45. data/spec/rley/gfg/non_terminal_vertex_spec.rb +14 -0
  46. data/spec/rley/gfg/return_edge_spec.rb +51 -0
  47. data/spec/rley/gfg/shortcut_edge_spec.rb +43 -0
  48. data/spec/rley/gfg/vertex_spec.rb +52 -37
  49. data/spec/rley/parse_forest_visitor_spec.rb +238 -0
  50. data/spec/rley/parser/dotted_item_spec.rb +29 -8
  51. data/spec/rley/parser/gfg_chart_spec.rb +138 -0
  52. data/spec/rley/parser/gfg_earley_parser_spec.rb +918 -0
  53. data/spec/rley/parser/gfg_parsing_spec.rb +565 -0
  54. data/spec/rley/parser/parse_entry_set_spec.rb +179 -0
  55. data/spec/rley/parser/parse_entry_spec.rb +208 -0
  56. data/spec/rley/parser/parse_forest_builder_spec.rb +382 -0
  57. data/spec/rley/parser/parse_forest_factory_spec.rb +81 -0
  58. data/spec/rley/parser/parse_walker_factory_spec.rb +235 -0
  59. data/spec/rley/parser/state_set_spec.rb +4 -0
  60. data/spec/rley/sppf/alternative_node_spec.rb +72 -0
  61. data/spec/rley/sppf/antecedence_graph.rb +87 -0
  62. data/spec/rley/sppf/forest_representation.rb +136 -0
  63. data/spec/rley/sppf/gfg_representation.rb +111 -0
  64. data/spec/rley/sppf/non_terminal_node_spec.rb +64 -0
  65. data/spec/rley/support/ambiguous_grammar_helper.rb +36 -36
  66. data/spec/rley/support/expectation_helper.rb +36 -0
  67. data/spec/rley/support/grammar_helper.rb +28 -0
  68. data/spec/rley/support/grammar_sppf_helper.rb +25 -0
  69. data/spec/rley/syntax/grammar_builder_spec.rb +5 -0
  70. data/spec/rley/syntax/non_terminal_spec.rb +4 -0
  71. data/spec/rley/syntax/terminal_spec.rb +4 -0
  72. 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.2.15
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-02-14 00:00:00.000000000 Z
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