rley 0.2.15 → 0.3.00

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