rley 0.7.06 → 0.8.01

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 (167) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +362 -62
  3. data/.travis.yml +6 -6
  4. data/CHANGELOG.md +20 -4
  5. data/LICENSE.txt +1 -1
  6. data/README.md +7 -7
  7. data/examples/NLP/engtagger.rb +193 -190
  8. data/examples/NLP/nano_eng/nano_en_demo.rb +7 -11
  9. data/examples/NLP/nano_eng/nano_grammar.rb +21 -21
  10. data/examples/NLP/pico_en_demo.rb +2 -2
  11. data/examples/data_formats/JSON/cli_options.rb +1 -1
  12. data/examples/data_formats/JSON/json_ast_builder.rb +21 -27
  13. data/examples/data_formats/JSON/json_ast_nodes.rb +12 -21
  14. data/examples/data_formats/JSON/json_demo.rb +1 -2
  15. data/examples/data_formats/JSON/json_grammar.rb +13 -13
  16. data/examples/data_formats/JSON/json_lexer.rb +8 -8
  17. data/examples/data_formats/JSON/json_minifier.rb +1 -1
  18. data/examples/general/calc_iter1/calc_ast_builder.rb +13 -10
  19. data/examples/general/calc_iter1/calc_ast_nodes.rb +23 -37
  20. data/examples/general/calc_iter1/calc_grammar.rb +7 -6
  21. data/examples/general/calc_iter1/calc_lexer.rb +6 -4
  22. data/examples/general/calc_iter1/spec/calculator_spec.rb +5 -5
  23. data/examples/general/calc_iter2/calc_ast_builder.rb +5 -3
  24. data/examples/general/calc_iter2/calc_ast_nodes.rb +27 -43
  25. data/examples/general/calc_iter2/calc_grammar.rb +12 -12
  26. data/examples/general/calc_iter2/calc_lexer.rb +11 -10
  27. data/examples/general/calc_iter2/spec/calculator_spec.rb +26 -26
  28. data/examples/general/left.rb +2 -2
  29. data/examples/general/right.rb +2 -2
  30. data/lib/rley.rb +1 -1
  31. data/lib/rley/base/dotted_item.rb +28 -31
  32. data/lib/rley/base/grm_items_builder.rb +6 -0
  33. data/lib/rley/constants.rb +2 -2
  34. data/lib/rley/engine.rb +22 -25
  35. data/lib/rley/formatter/asciitree.rb +3 -3
  36. data/lib/rley/formatter/bracket_notation.rb +1 -8
  37. data/lib/rley/formatter/debug.rb +6 -6
  38. data/lib/rley/formatter/json.rb +2 -2
  39. data/lib/rley/gfg/call_edge.rb +1 -1
  40. data/lib/rley/gfg/edge.rb +5 -5
  41. data/lib/rley/gfg/end_vertex.rb +2 -6
  42. data/lib/rley/gfg/epsilon_edge.rb +1 -5
  43. data/lib/rley/gfg/grm_flow_graph.rb +27 -23
  44. data/lib/rley/gfg/item_vertex.rb +10 -10
  45. data/lib/rley/gfg/non_terminal_vertex.rb +4 -4
  46. data/lib/rley/gfg/scan_edge.rb +1 -1
  47. data/lib/rley/gfg/shortcut_edge.rb +2 -2
  48. data/lib/rley/gfg/start_vertex.rb +4 -8
  49. data/lib/rley/gfg/vertex.rb +43 -39
  50. data/lib/rley/interface.rb +16 -0
  51. data/lib/rley/lexical/token_range.rb +6 -6
  52. data/lib/rley/notation/all_notation_nodes.rb +2 -0
  53. data/lib/rley/notation/ast_builder.rb +191 -0
  54. data/lib/rley/notation/ast_node.rb +44 -0
  55. data/lib/rley/notation/ast_visitor.rb +113 -0
  56. data/lib/rley/notation/grammar.rb +49 -0
  57. data/lib/rley/notation/grammar_builder.rb +504 -0
  58. data/lib/rley/notation/grouping_node.rb +23 -0
  59. data/lib/rley/notation/parser.rb +56 -0
  60. data/lib/rley/notation/sequence_node.rb +35 -0
  61. data/lib/rley/notation/symbol_node.rb +29 -0
  62. data/lib/rley/notation/tokenizer.rb +192 -0
  63. data/lib/rley/parse_forest_visitor.rb +5 -5
  64. data/lib/rley/parse_rep/ast_base_builder.rb +48 -11
  65. data/lib/rley/parse_rep/cst_builder.rb +5 -6
  66. data/lib/rley/parse_rep/parse_forest_builder.rb +22 -18
  67. data/lib/rley/parse_rep/parse_forest_factory.rb +3 -3
  68. data/lib/rley/parse_rep/parse_rep_creator.rb +14 -16
  69. data/lib/rley/parse_rep/parse_tree_builder.rb +4 -4
  70. data/lib/rley/parse_rep/parse_tree_factory.rb +27 -27
  71. data/lib/rley/parse_tree_visitor.rb +1 -1
  72. data/lib/rley/parser/error_reason.rb +4 -5
  73. data/lib/rley/parser/gfg_chart.rb +118 -26
  74. data/lib/rley/parser/gfg_parsing.rb +22 -33
  75. data/lib/rley/parser/parse_entry.rb +25 -31
  76. data/lib/rley/parser/parse_entry_set.rb +19 -16
  77. data/lib/rley/parser/parse_entry_tracker.rb +4 -4
  78. data/lib/rley/parser/parse_tracer.rb +13 -13
  79. data/lib/rley/parser/parse_walker_factory.rb +23 -28
  80. data/lib/rley/ptree/non_terminal_node.rb +7 -5
  81. data/lib/rley/ptree/parse_tree.rb +3 -3
  82. data/lib/rley/ptree/parse_tree_node.rb +5 -5
  83. data/lib/rley/ptree/terminal_node.rb +7 -7
  84. data/lib/rley/rley_error.rb +12 -12
  85. data/lib/rley/sppf/alternative_node.rb +6 -6
  86. data/lib/rley/sppf/composite_node.rb +7 -7
  87. data/lib/rley/sppf/epsilon_node.rb +3 -3
  88. data/lib/rley/sppf/leaf_node.rb +3 -3
  89. data/lib/rley/sppf/parse_forest.rb +16 -16
  90. data/lib/rley/sppf/sppf_node.rb +7 -8
  91. data/lib/rley/sppf/token_node.rb +3 -3
  92. data/lib/rley/syntax/{grammar_builder.rb → base_grammar_builder.rb} +61 -23
  93. data/lib/rley/syntax/grammar.rb +5 -5
  94. data/lib/rley/syntax/grm_symbol.rb +7 -7
  95. data/lib/rley/syntax/match_closest.rb +43 -0
  96. data/lib/rley/syntax/non_terminal.rb +9 -15
  97. data/lib/rley/syntax/production.rb +16 -10
  98. data/lib/rley/syntax/symbol_seq.rb +7 -9
  99. data/lib/rley/syntax/terminal.rb +4 -5
  100. data/lib/rley/syntax/verbatim_symbol.rb +3 -3
  101. data/lib/support/base_tokenizer.rb +19 -18
  102. data/spec/rley/base/dotted_item_spec.rb +2 -2
  103. data/spec/rley/engine_spec.rb +23 -21
  104. data/spec/rley/formatter/asciitree_spec.rb +7 -7
  105. data/spec/rley/formatter/bracket_notation_spec.rb +13 -13
  106. data/spec/rley/formatter/json_spec.rb +1 -1
  107. data/spec/rley/gfg/end_vertex_spec.rb +5 -5
  108. data/spec/rley/gfg/grm_flow_graph_spec.rb +2 -2
  109. data/spec/rley/gfg/item_vertex_spec.rb +10 -10
  110. data/spec/rley/gfg/non_terminal_vertex_spec.rb +3 -3
  111. data/spec/rley/gfg/shortcut_edge_spec.rb +1 -1
  112. data/spec/rley/gfg/start_vertex_spec.rb +5 -5
  113. data/spec/rley/gfg/vertex_spec.rb +3 -3
  114. data/spec/rley/lexical/token_range_spec.rb +16 -16
  115. data/spec/rley/lexical/token_spec.rb +2 -2
  116. data/spec/rley/notation/grammar_builder_spec.rb +302 -0
  117. data/spec/rley/notation/parser_spec.rb +184 -0
  118. data/spec/rley/notation/tokenizer_spec.rb +370 -0
  119. data/spec/rley/parse_forest_visitor_spec.rb +165 -163
  120. data/spec/rley/parse_rep/ambiguous_parse_spec.rb +44 -44
  121. data/spec/rley/parse_rep/ast_builder_spec.rb +6 -7
  122. data/spec/rley/parse_rep/cst_builder_spec.rb +5 -5
  123. data/spec/rley/parse_rep/groucho_spec.rb +24 -26
  124. data/spec/rley/parse_rep/parse_forest_builder_spec.rb +27 -27
  125. data/spec/rley/parse_rep/parse_forest_factory_spec.rb +8 -8
  126. data/spec/rley/parse_rep/parse_tree_factory_spec.rb +3 -3
  127. data/spec/rley/parse_tree_visitor_spec.rb +10 -8
  128. data/spec/rley/parser/dangling_else_spec.rb +445 -0
  129. data/spec/rley/parser/error_reason_spec.rb +6 -6
  130. data/spec/rley/parser/gfg_earley_parser_spec.rb +120 -12
  131. data/spec/rley/parser/gfg_parsing_spec.rb +6 -13
  132. data/spec/rley/parser/parse_entry_spec.rb +19 -19
  133. data/spec/rley/parser/parse_walker_factory_spec.rb +10 -10
  134. data/spec/rley/ptree/non_terminal_node_spec.rb +5 -3
  135. data/spec/rley/ptree/parse_tree_node_spec.rb +4 -4
  136. data/spec/rley/ptree/terminal_node_spec.rb +6 -6
  137. data/spec/rley/sppf/alternative_node_spec.rb +6 -6
  138. data/spec/rley/sppf/non_terminal_node_spec.rb +3 -3
  139. data/spec/rley/sppf/token_node_spec.rb +4 -4
  140. data/spec/rley/support/ambiguous_grammar_helper.rb +4 -5
  141. data/spec/rley/support/grammar_abc_helper.rb +3 -5
  142. data/spec/rley/support/grammar_ambig01_helper.rb +5 -6
  143. data/spec/rley/support/grammar_arr_int_helper.rb +5 -6
  144. data/spec/rley/support/grammar_b_expr_helper.rb +5 -6
  145. data/spec/rley/support/grammar_int_seq_helper.rb +51 -0
  146. data/spec/rley/support/grammar_l0_helper.rb +14 -17
  147. data/spec/rley/support/grammar_pb_helper.rb +8 -7
  148. data/spec/rley/support/grammar_sppf_helper.rb +3 -3
  149. data/spec/rley/syntax/{grammar_builder_spec.rb → base_grammar_builder_spec.rb} +35 -16
  150. data/spec/rley/syntax/grammar_spec.rb +6 -6
  151. data/spec/rley/syntax/grm_symbol_spec.rb +1 -1
  152. data/spec/rley/syntax/match_closest_spec.rb +46 -0
  153. data/spec/rley/syntax/non_terminal_spec.rb +8 -8
  154. data/spec/rley/syntax/production_spec.rb +17 -13
  155. data/spec/rley/syntax/symbol_seq_spec.rb +2 -2
  156. data/spec/rley/syntax/terminal_spec.rb +5 -5
  157. data/spec/rley/syntax/verbatim_symbol_spec.rb +1 -1
  158. data/spec/spec_helper.rb +0 -12
  159. data/spec/support/base_tokenizer_spec.rb +7 -2
  160. metadata +48 -74
  161. data/.simplecov +0 -7
  162. data/lib/rley/parser/parse_state.rb +0 -83
  163. data/lib/rley/parser/parse_state_tracker.rb +0 -59
  164. data/lib/rley/parser/state_set.rb +0 -101
  165. data/spec/rley/parser/parse_state_spec.rb +0 -125
  166. data/spec/rley/parser/parse_tracer_spec.rb +0 -200
  167. data/spec/rley/parser/state_set_spec.rb +0 -130
@@ -98,6 +98,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
98
98
  end
99
99
  end # context
100
100
 
101
+ # rubocop: disable Lint/ConstantDefinitionInBlock
101
102
  class EventDispatcher
102
103
  # return [Array<Proc>]
103
104
  attr_accessor(:expectations)
@@ -125,6 +126,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
125
126
  @event_count += 1
126
127
  end
127
128
  end # class
129
+ # rubocop: enable Lint/ConstantDefinitionInBlock
128
130
 
129
131
  context 'Notifying visit events:' do
130
132
  # expectations [Array<Array<Symbol, String>>]
@@ -161,329 +163,329 @@ module Rley # Open this namespace to avoid module qualifier prefixes
161
163
  # Notify subscribers when start the visit of the pforest
162
164
  # expect(listener1).to receive(:before_pforest).with(forest_root)
163
165
  checker.expectations = [
164
- ->(event, item) {
166
+ lambda do |event, item|
165
167
  check_event(event, item, [:before_pforest, grm_sppf_pforest1])
166
- },
167
- ->(event, item) {
168
+ end,
169
+ lambda do |event, item|
168
170
  check_event(event, item, [:before_non_terminal, 'Phi[0, 4]'])
169
- },
170
- ->(event, parent, children) {
171
+ end,
172
+ lambda do |event, parent, children|
171
173
  check_event(event, parent, [:before_subnodes, 'Phi[0, 4]'])
172
174
  expect(children.size).to eq(1)
173
- },
174
- ->(event, item) {
175
+ end,
176
+ lambda do |event, item|
175
177
  check_event(event, item, [:before_non_terminal, 'S[0, 4]'])
176
178
  check_legs(['S[0, 4]', 2]) # 2
177
179
  check_node_accesses(item, [2])
178
- },
179
- ->(event, parent, children) {
180
+ end,
181
+ lambda do |event, parent, children|
180
182
  check_event(event, parent, [:before_subnodes, 'S[0, 4]'])
181
183
  expect(children.size).to eq(2)
182
- },
183
- ->(event, item) {
184
+ end,
185
+ lambda do |event, item|
184
186
  prediction = 'Alt(S => a T .)[0, 4]'
185
187
  check_event(event, item, [:before_alternative, prediction])
186
188
  check_legs(['Alt(S => a T .)[0, 4]', 6]) # 2 * 3
187
189
  check_node_accesses(item, [6])
188
- },
189
- ->(event, parent, children) {
190
+ end,
191
+ lambda do |event, parent, children|
190
192
  prediction = 'Alt(S => a T .)[0, 4]'
191
193
  check_event(event, parent, [:before_subnodes, prediction])
192
194
  expect(children.size).to eq(2)
193
- },
194
- ->(event, item) {
195
+ end,
196
+ lambda do |event, item|
195
197
  check_event(event, item, [:before_terminal, 'a[0, 1]'])
196
- },
197
- ->(event, item) {
198
+ end,
199
+ lambda do |event, item|
198
200
  check_event(event, item, [:after_terminal, 'a[0, 1]'])
199
- },
200
- ->(event, item) {
201
+ end,
202
+ lambda do |event, item|
201
203
  check_event(event, item, [:before_non_terminal, 'T[1, 4]'])
202
204
  check_legs(['T[1, 4]', 66]) # 2 * 3 * 11
203
205
  check_node_accesses(item, [66])
204
- },
205
- ->(event, parent, children) {
206
+ end,
207
+ lambda do |event, parent, children|
206
208
  check_event(event, parent, [:before_subnodes, 'T[1, 4]'])
207
209
  expect(children.size).to eq(3)
208
- },
209
- ->(event, item) {
210
+ end,
211
+ lambda do |event, item|
210
212
  check_event(event, item, [:before_terminal, 'b[1, 2]'])
211
- },
212
- ->(event, item) {
213
+ end,
214
+ lambda do |event, item|
213
215
  check_event(event, item, [:after_terminal, 'b[1, 2]'])
214
- },
215
- ->(event, item) {
216
+ end,
217
+ lambda do |event, item|
216
218
  check_event(event, item, [:before_terminal, 'b[2, 3]'])
217
- },
218
- ->(event, item) {
219
+ end,
220
+ lambda do |event, item|
219
221
  check_event(event, item, [:after_terminal, 'b[2, 3]'])
220
- },
221
- ->(event, item) {
222
+ end,
223
+ lambda do |event, item|
222
224
  check_event(event, item, [:before_terminal, 'b[3, 4]'])
223
- },
224
- ->(event, item) {
225
+ end,
226
+ lambda do |event, item|
225
227
  check_event(event, item, [:after_terminal, 'b[3, 4]'])
226
- },
227
- ->(event, parent, _children) {
228
+ end,
229
+ lambda do |event, parent, _children|
228
230
  check_event(event, parent, [:after_subnodes, 'T[1, 4]'])
229
- },
230
- ->(event, item) {
231
+ end,
232
+ lambda do |event, item|
231
233
  check_event(event, item, [:after_non_terminal, 'T[1, 4]'])
232
- },
233
- ->(event, parent, children) {
234
+ end,
235
+ lambda do |event, parent, children|
234
236
  prediction = 'Alt(S => a T .)[0, 4]'
235
237
  check_event(event, parent, [:after_subnodes, prediction])
236
238
  expect(children.size).to eq(2)
237
239
  check_legs(['Alt(S => a T .)[0, 4]', 6]) # 2 * 3
238
- },
239
- ->(event, item) {
240
+ end,
241
+ lambda do |event, item|
240
242
  prediction = 'Alt(S => a T .)[0, 4]'
241
243
  check_event(event, item, [:after_alternative, prediction])
242
- },
243
- ->(event, item) {
244
+ end,
245
+ lambda do |event, item|
244
246
  prediction = 'Alt(S => A T .)[0, 4]'
245
247
  check_event(event, item, [:before_alternative, prediction])
246
248
  check_legs(['Alt(S => A T .)[0, 4]', 10]) # 2 * 5
247
249
  check_node_accesses(item, [10])
248
- },
249
- ->(event, parent, children) {
250
+ end,
251
+ lambda do |event, parent, children|
250
252
  prediction = 'Alt(S => A T .)[0, 4]'
251
253
  check_event(event, parent, [:before_subnodes, prediction])
252
254
  expect(children.size).to eq(2)
253
- },
254
- ->(event, item) {
255
+ end,
256
+ lambda do |event, item|
255
257
  check_event(event, item, [:before_non_terminal, 'A[0, 1]'])
256
258
  check_legs(['A[0, 1]', 230]) # 2 * 5 * 23
257
259
  check_node_accesses(item, [230])
258
- },
259
- ->(event, parent, children) {
260
+ end,
261
+ lambda do |event, parent, children|
260
262
  check_event(event, parent, [:before_subnodes, 'A[0, 1]'])
261
263
  expect(children.size).to eq(2)
262
- },
263
- ->(event, item) {
264
+ end,
265
+ lambda do |event, item|
264
266
  prediction = 'Alt(A => a .)[0, 1]'
265
267
  check_event(event, item, [:before_alternative, prediction])
266
268
  check_legs(['Alt(A => a .)[0, 1]', 7130]) # 2 * 5 * 23 * 31
267
269
  check_node_accesses(item, [7130])
268
270
  # p(subject.legs)
269
- },
270
- ->(event, parent, children) {
271
+ end,
272
+ lambda do |event, parent, children|
271
273
  prediction = 'Alt(A => a .)[0, 1]'
272
274
  check_event(event, parent, [:before_subnodes, prediction])
273
275
  expect(children.size).to eq(1)
274
- },
275
- ->(event, item) {
276
+ end,
277
+ lambda do |event, item|
276
278
  check_event(event, item, [:before_terminal, 'a[0, 1]'])
277
- },
278
- ->(event, item) {
279
+ end,
280
+ lambda do |event, item|
279
281
  check_event(event, item, [:after_terminal, 'a[0, 1]'])
280
- },
281
- ->(event, parent, _children) {
282
+ end,
283
+ lambda do |event, parent, _children|
282
284
  prediction = 'Alt(A => a .)[0, 1]'
283
285
  check_event(event, parent, [:after_subnodes, prediction])
284
286
  check_legs(['Alt(A => a .)[0, 1]', 7130]) # 2 * 5 * 23 * 31
285
- },
286
- ->(event, item) {
287
+ end,
288
+ lambda do |event, item|
287
289
  prediction = 'Alt(A => a .)[0, 1]'
288
290
  check_event(event, item, [:after_alternative, prediction])
289
- },
290
- ->(event, item) {
291
+ end,
292
+ lambda do |event, item|
291
293
  prediction = 'Alt(A => B A .)[0, 1]'
292
294
  check_event(event, item, [:before_alternative, prediction])
293
295
  check_legs(['Alt(A => B A .)[0, 1]', 8510]) # 2 * 5 * 23 * 37
294
296
  check_node_accesses(item, [8510])
295
- },
296
- ->(event, parent, children) {
297
+ end,
298
+ lambda do |event, parent, children|
297
299
  prediction = 'Alt(A => B A .)[0, 1]'
298
300
  check_event(event, parent, [:before_subnodes, prediction])
299
301
  expect(children.size).to eq(2)
300
- },
301
- ->(event, item) {
302
+ end,
303
+ lambda do |event, item|
302
304
  check_event(event, item, [:before_non_terminal, 'B[0, 0]'])
303
305
  check_legs(['B[0, 0]', 365930]) # 2 * 5 * 23 * 37 * 43
304
306
  check_node_accesses(item, [365930])
305
- },
306
- ->(event, parent, children) {
307
+ end,
308
+ lambda do |event, parent, children|
307
309
  check_event(event, parent, [:before_subnodes, 'B[0, 0]'])
308
310
  expect(children.size).to eq(1)
309
- },
310
- ->(event, item) {
311
+ end,
312
+ lambda do |event, item|
311
313
  check_event(event, item, [:before_epsilon, '_[0, 0]'])
312
- },
313
- ->(event, item) {
314
+ end,
315
+ lambda do |event, item|
314
316
  check_event(event, item, [:after_epsilon, '_[0, 0]'])
315
- },
316
- ->(event, parent, _children) {
317
+ end,
318
+ lambda do |event, parent, _children|
317
319
  check_event(event, parent, [:after_subnodes, 'B[0, 0]'])
318
320
  check_legs(['B[0, 0]', 365930]) # 2 * 5 * 23 * 37 * 43
319
- },
320
- ->(event, item) {
321
+ end,
322
+ lambda do |event, item|
321
323
  check_event(event, item, [:after_non_terminal, 'B[0, 0]'])
322
- },
323
- ->(event, item) {
324
+ end,
325
+ lambda do |event, item|
324
326
  check_event(event, item, [:before_non_terminal, 'A[0, 1]'])
325
327
  check_legs(['A[0, 1]', 399970]) # 2 * 5 * 23 * 37 * 47
326
328
  check_node_accesses(item, [230, 399970])
327
- },
328
- ->(event, parent, children) {
329
+ end,
330
+ lambda do |event, parent, children|
329
331
  check_event(event, parent, [:before_subnodes, 'A[0, 1]'])
330
332
  expect(children.size).to eq(2)
331
- },
332
- ->(event, item) {
333
+ end,
334
+ lambda do |event, item|
333
335
  prediction = 'Alt(A => a .)[0, 1]'
334
336
  check_event(event, item, [:before_alternative, prediction])
335
337
  # 12399070 = 2 * 5 * 23 * 37 * 47 * 31
336
338
  check_legs(['Alt(A => a .)[0, 1]', 12399070])
337
339
  check_node_accesses(item, [7130, 12399070])
338
- },
339
- ->(event, parent, children) {
340
+ end,
341
+ lambda do |event, parent, children|
340
342
  prediction = 'Alt(A => a .)[0, 1]'
341
343
  check_event(event, parent, [:before_subnodes, prediction])
342
344
  expect(children.size).to eq(1)
343
- },
344
- ->(event, item) {
345
+ end,
346
+ lambda do |event, item|
345
347
  check_event(event, item, [:before_terminal, 'a[0, 1]'])
346
- },
347
- ->(event, item) {
348
+ end,
349
+ lambda do |event, item|
348
350
  check_event(event, item, [:after_terminal, 'a[0, 1]'])
349
- },
350
- ->(event, parent, _children) {
351
+ end,
352
+ lambda do |event, parent, _children|
351
353
  check_event(event, parent, [:after_subnodes, 'Alt(A => a .)[0, 1]'])
352
354
  # 12399070 = 2 * 5 * 23 * 37 * 47 * 31
353
- check_legs(['Alt(A => a .)[0, 1]', 12399070])
354
- },
355
- ->(event, item) {
355
+ check_legs(['Alt(A => a .)[0, 1]', 12399070])
356
+ end,
357
+ lambda do |event, item|
356
358
  prediction = 'Alt(A => a .)[0, 1]'
357
359
  check_event(event, item, [:after_alternative, prediction])
358
- },
359
- ->(event, item) {
360
+ end,
361
+ lambda do |event, item|
360
362
  prediction = 'Alt(A => B A .)[0, 1]'
361
363
  check_event(event, item, [:before_alternative, prediction])
362
- # For prime factoring:
364
+ # For prime factoring:
363
365
  # https://www.calculatorsoup.com/calculators/math/prime-factors.php
364
366
  check_legs(['Alt(A => B A .)[0, 1]', 399970]) # 2 * 5 * 23 * 37 * 47
365
367
  check_node_accesses(item, [8510, 399970])
366
- },
367
- ->(event, parent, children) {
368
+ end,
369
+ lambda do |event, parent, children|
368
370
  prediction = 'Alt(A => B A .)[0, 1]'
369
371
  check_event(event, parent, [:before_subnodes, prediction])
370
372
  expect(children.size).to eq(2)
371
- },
372
- ->(event, item) {
373
+ end,
374
+ lambda do |event, item|
373
375
  check_event(event, item, [:before_non_terminal, 'B[0, 0]'])
374
376
  check_legs(['B[0, 0]', 17198710]) # 2 * 5 * 23 * 37 * 47 * 43
375
377
  check_node_accesses(item, [365930, 17198710])
376
- },
377
- ->(event, parent, children) {
378
+ end,
379
+ lambda do |event, parent, children|
378
380
  check_event(event, parent, [:before_subnodes, 'B[0, 0]'])
379
381
  expect(children.size).to eq(1)
380
- },
381
- ->(event, item) {
382
+ end,
383
+ lambda do |event, item|
382
384
  check_event(event, item, [:before_epsilon, '_[0, 0]'])
383
- },
384
- ->(event, item) {
385
+ end,
386
+ lambda do |event, item|
385
387
  check_event(event, item, [:after_epsilon, '_[0, 0]'])
386
- },
387
- ->(event, parent, _children) {
388
+ end,
389
+ lambda do |event, parent, _children|
388
390
  check_event(event, parent, [:after_subnodes, 'B[0, 0]'])
389
391
  check_legs(['B[0, 0]', 17198710]) # 2 * 5 * 23 * 37 * 43 * 47
390
- },
391
- ->(event, item) {
392
+ end,
393
+ lambda do |event, item|
392
394
  check_event(event, item, [:after_non_terminal, 'B[0, 0]'])
393
- },
394
- ->(event, parent, _children) {
395
+ end,
396
+ lambda do |event, parent, _children|
395
397
  prediction = 'Alt(A => B A .)[0, 1]'
396
398
  check_event(event, parent, [:after_subnodes, prediction])
397
399
  check_legs(['Alt(A => B A .)[0, 1]', 399970]) # 2 * 5 * 23 * 37 * 47
398
400
  check_node_accesses(parent, [8510, 399970])
399
- },
400
- ->(event, item) {
401
+ end,
402
+ lambda do |event, item|
401
403
  prediction = 'Alt(A => B A .)[0, 1]'
402
404
  check_event(event, item, [:after_alternative, prediction])
403
- },
404
- ->(event, parent, _children) {
405
+ end,
406
+ lambda do |event, parent, _children|
405
407
  check_event(event, parent, [:after_subnodes, 'A[0, 1]'])
406
408
  check_legs(['A[0, 1]', 399970]) # 2 * 5 * 23 * 37 * 47
407
- },
408
- ->(event, item) {
409
+ end,
410
+ lambda do |event, item|
409
411
  check_event(event, item, [:after_non_terminal, 'A[0, 1]'])
410
- },
411
- ->(event, parent, _children) {
412
+ end,
413
+ lambda do |event, parent, _children|
412
414
  prediction = 'Alt(A => B A .)[0, 1]'
413
415
  check_event(event, parent, [:after_subnodes, prediction])
414
416
  check_legs(['Alt(A => B A .)[0, 1]', 8510]) # 2 * 5 * 23 * 37
415
- },
416
- ->(event, item) {
417
+ end,
418
+ lambda do |event, item|
417
419
  prediction = 'Alt(A => B A .)[0, 1]'
418
420
  check_event(event, item, [:after_alternative, prediction])
419
- },
420
- ->(event, parent, _children) {
421
+ end,
422
+ lambda do |event, parent, _children|
421
423
  check_event(event, parent, [:after_subnodes, 'A[0, 1]'])
422
424
  check_legs(['A[0, 1]', 230]) # 2 * 5 * 23
423
- },
424
- ->(event, item) {
425
+ end,
426
+ lambda do |event, item|
425
427
  check_event(event, item, [:after_non_terminal, 'A[0, 1]'])
426
- },
427
- ->(event, item) {
428
+ end,
429
+ lambda do |event, item|
428
430
  check_event(event, item, [:before_non_terminal, 'T[1, 4]'])
429
431
  check_legs(['T[1, 4]', 290]) # 2 * 5 * 29
430
432
  check_node_accesses(item, [66, 290])
431
- },
432
- ->(event, parent, children) {
433
+ end,
434
+ lambda do |event, parent, children|
433
435
  check_event(event, parent, [:before_subnodes, 'T[1, 4]'])
434
436
  expect(children.size).to eq(3)
435
- },
436
- ->(event, item) {
437
+ end,
438
+ lambda do |event, item|
437
439
  check_event(event, item, [:before_terminal, 'b[1, 2]'])
438
- },
439
- ->(event, item) {
440
+ end,
441
+ lambda do |event, item|
440
442
  check_event(event, item, [:after_terminal, 'b[1, 2]'])
441
- },
442
- ->(event, item) {
443
+ end,
444
+ lambda do |event, item|
443
445
  check_event(event, item, [:before_terminal, 'b[2, 3]'])
444
- },
445
- ->(event, item) {
446
+ end,
447
+ lambda do |event, item|
446
448
  check_event(event, item, [:after_terminal, 'b[2, 3]'])
447
- },
448
- ->(event, item) {
449
+ end,
450
+ lambda do |event, item|
449
451
  check_event(event, item, [:before_terminal, 'b[3, 4]'])
450
- },
451
- ->(event, item) {
452
+ end,
453
+ lambda do |event, item|
452
454
  check_event(event, item, [:after_terminal, 'b[3, 4]'])
453
- },
454
- ->(event, parent, _children) {
455
+ end,
456
+ lambda do |event, parent, _children|
455
457
  check_event(event, parent, [:after_subnodes, 'T[1, 4]'])
456
- },
457
- ->(event, item) {
458
+ end,
459
+ lambda do |event, item|
458
460
  check_event(event, item, [:after_non_terminal, 'T[1, 4]'])
459
- },
460
- ->(event, parent, children) {
461
+ end,
462
+ lambda do |event, parent, children|
461
463
  prediction = 'Alt(S => A T .)[0, 4]'
462
464
  check_event(event, parent, [:after_subnodes, prediction])
463
465
  expect(children.size).to eq(2)
464
466
  check_legs(['Alt(S => A T .)[0, 4]', 10]) # 2 * 5
465
- },
466
- ->(evt, itm) {
467
- check_event(evt, itm, [:after_alternative, 'Alt(S => A T .)[0, 4]'])
468
- },
469
- ->(event, parent, children) {
467
+ end,
468
+ lambda do |event, item|
469
+ check_event(event, item, [:after_alternative, 'Alt(S => A T .)[0, 4]'])
470
+ end,
471
+ lambda do |event, parent, children|
470
472
  check_event(event, parent, [:after_subnodes, 'S[0, 4]'])
471
473
  expect(children.size).to eq(2)
472
474
  check_legs(['S[0, 4]', 2]) # 2
473
- },
474
- ->(event, item) {
475
+ end,
476
+ lambda do |event, item|
475
477
  check_event(event, item, [:after_non_terminal, 'S[0, 4]'])
476
- },
477
- ->(event, parent, children) {
478
+ end,
479
+ lambda do |event, parent, children|
478
480
  check_event(event, parent, [:after_subnodes, 'Phi[0, 4]'])
479
481
  expect(children.size).to eq(1)
480
- },
481
- ->(event, item) {
482
+ end,
483
+ lambda do |event, item|
482
484
  check_event(event, item, [:after_non_terminal, 'Phi[0, 4]'])
483
- },
484
- ->(event, item) {
485
+ end,
486
+ lambda do |event, item|
485
487
  check_event(event, item, [:after_pforest, grm_sppf_pforest1])
486
- }
488
+ end
487
489
  ]
488
490
  subject.start
489
491
  end