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.
- checksums.yaml +4 -4
- data/.rubocop.yml +362 -62
- data/.travis.yml +6 -6
- data/CHANGELOG.md +20 -4
- data/LICENSE.txt +1 -1
- data/README.md +7 -7
- data/examples/NLP/engtagger.rb +193 -190
- data/examples/NLP/nano_eng/nano_en_demo.rb +7 -11
- data/examples/NLP/nano_eng/nano_grammar.rb +21 -21
- data/examples/NLP/pico_en_demo.rb +2 -2
- data/examples/data_formats/JSON/cli_options.rb +1 -1
- data/examples/data_formats/JSON/json_ast_builder.rb +21 -27
- data/examples/data_formats/JSON/json_ast_nodes.rb +12 -21
- data/examples/data_formats/JSON/json_demo.rb +1 -2
- data/examples/data_formats/JSON/json_grammar.rb +13 -13
- data/examples/data_formats/JSON/json_lexer.rb +8 -8
- data/examples/data_formats/JSON/json_minifier.rb +1 -1
- data/examples/general/calc_iter1/calc_ast_builder.rb +13 -10
- data/examples/general/calc_iter1/calc_ast_nodes.rb +23 -37
- data/examples/general/calc_iter1/calc_grammar.rb +7 -6
- data/examples/general/calc_iter1/calc_lexer.rb +6 -4
- data/examples/general/calc_iter1/spec/calculator_spec.rb +5 -5
- data/examples/general/calc_iter2/calc_ast_builder.rb +5 -3
- data/examples/general/calc_iter2/calc_ast_nodes.rb +27 -43
- data/examples/general/calc_iter2/calc_grammar.rb +12 -12
- data/examples/general/calc_iter2/calc_lexer.rb +11 -10
- data/examples/general/calc_iter2/spec/calculator_spec.rb +26 -26
- data/examples/general/left.rb +2 -2
- data/examples/general/right.rb +2 -2
- data/lib/rley.rb +1 -1
- data/lib/rley/base/dotted_item.rb +28 -31
- data/lib/rley/base/grm_items_builder.rb +6 -0
- data/lib/rley/constants.rb +2 -2
- data/lib/rley/engine.rb +22 -25
- data/lib/rley/formatter/asciitree.rb +3 -3
- data/lib/rley/formatter/bracket_notation.rb +1 -8
- data/lib/rley/formatter/debug.rb +6 -6
- data/lib/rley/formatter/json.rb +2 -2
- data/lib/rley/gfg/call_edge.rb +1 -1
- data/lib/rley/gfg/edge.rb +5 -5
- data/lib/rley/gfg/end_vertex.rb +2 -6
- data/lib/rley/gfg/epsilon_edge.rb +1 -5
- data/lib/rley/gfg/grm_flow_graph.rb +27 -23
- data/lib/rley/gfg/item_vertex.rb +10 -10
- data/lib/rley/gfg/non_terminal_vertex.rb +4 -4
- data/lib/rley/gfg/scan_edge.rb +1 -1
- data/lib/rley/gfg/shortcut_edge.rb +2 -2
- data/lib/rley/gfg/start_vertex.rb +4 -8
- data/lib/rley/gfg/vertex.rb +43 -39
- data/lib/rley/interface.rb +16 -0
- data/lib/rley/lexical/token_range.rb +6 -6
- data/lib/rley/notation/all_notation_nodes.rb +2 -0
- data/lib/rley/notation/ast_builder.rb +191 -0
- data/lib/rley/notation/ast_node.rb +44 -0
- data/lib/rley/notation/ast_visitor.rb +113 -0
- data/lib/rley/notation/grammar.rb +49 -0
- data/lib/rley/notation/grammar_builder.rb +504 -0
- data/lib/rley/notation/grouping_node.rb +23 -0
- data/lib/rley/notation/parser.rb +56 -0
- data/lib/rley/notation/sequence_node.rb +35 -0
- data/lib/rley/notation/symbol_node.rb +29 -0
- data/lib/rley/notation/tokenizer.rb +192 -0
- data/lib/rley/parse_forest_visitor.rb +5 -5
- data/lib/rley/parse_rep/ast_base_builder.rb +48 -11
- data/lib/rley/parse_rep/cst_builder.rb +5 -6
- data/lib/rley/parse_rep/parse_forest_builder.rb +22 -18
- data/lib/rley/parse_rep/parse_forest_factory.rb +3 -3
- data/lib/rley/parse_rep/parse_rep_creator.rb +14 -16
- data/lib/rley/parse_rep/parse_tree_builder.rb +4 -4
- data/lib/rley/parse_rep/parse_tree_factory.rb +27 -27
- data/lib/rley/parse_tree_visitor.rb +1 -1
- data/lib/rley/parser/error_reason.rb +4 -5
- data/lib/rley/parser/gfg_chart.rb +118 -26
- data/lib/rley/parser/gfg_parsing.rb +22 -33
- data/lib/rley/parser/parse_entry.rb +25 -31
- data/lib/rley/parser/parse_entry_set.rb +19 -16
- data/lib/rley/parser/parse_entry_tracker.rb +4 -4
- data/lib/rley/parser/parse_tracer.rb +13 -13
- data/lib/rley/parser/parse_walker_factory.rb +23 -28
- data/lib/rley/ptree/non_terminal_node.rb +7 -5
- data/lib/rley/ptree/parse_tree.rb +3 -3
- data/lib/rley/ptree/parse_tree_node.rb +5 -5
- data/lib/rley/ptree/terminal_node.rb +7 -7
- data/lib/rley/rley_error.rb +12 -12
- data/lib/rley/sppf/alternative_node.rb +6 -6
- data/lib/rley/sppf/composite_node.rb +7 -7
- data/lib/rley/sppf/epsilon_node.rb +3 -3
- data/lib/rley/sppf/leaf_node.rb +3 -3
- data/lib/rley/sppf/parse_forest.rb +16 -16
- data/lib/rley/sppf/sppf_node.rb +7 -8
- data/lib/rley/sppf/token_node.rb +3 -3
- data/lib/rley/syntax/{grammar_builder.rb → base_grammar_builder.rb} +61 -23
- data/lib/rley/syntax/grammar.rb +5 -5
- data/lib/rley/syntax/grm_symbol.rb +7 -7
- data/lib/rley/syntax/match_closest.rb +43 -0
- data/lib/rley/syntax/non_terminal.rb +9 -15
- data/lib/rley/syntax/production.rb +16 -10
- data/lib/rley/syntax/symbol_seq.rb +7 -9
- data/lib/rley/syntax/terminal.rb +4 -5
- data/lib/rley/syntax/verbatim_symbol.rb +3 -3
- data/lib/support/base_tokenizer.rb +19 -18
- data/spec/rley/base/dotted_item_spec.rb +2 -2
- data/spec/rley/engine_spec.rb +23 -21
- data/spec/rley/formatter/asciitree_spec.rb +7 -7
- data/spec/rley/formatter/bracket_notation_spec.rb +13 -13
- data/spec/rley/formatter/json_spec.rb +1 -1
- data/spec/rley/gfg/end_vertex_spec.rb +5 -5
- data/spec/rley/gfg/grm_flow_graph_spec.rb +2 -2
- data/spec/rley/gfg/item_vertex_spec.rb +10 -10
- data/spec/rley/gfg/non_terminal_vertex_spec.rb +3 -3
- data/spec/rley/gfg/shortcut_edge_spec.rb +1 -1
- data/spec/rley/gfg/start_vertex_spec.rb +5 -5
- data/spec/rley/gfg/vertex_spec.rb +3 -3
- data/spec/rley/lexical/token_range_spec.rb +16 -16
- data/spec/rley/lexical/token_spec.rb +2 -2
- data/spec/rley/notation/grammar_builder_spec.rb +302 -0
- data/spec/rley/notation/parser_spec.rb +184 -0
- data/spec/rley/notation/tokenizer_spec.rb +370 -0
- data/spec/rley/parse_forest_visitor_spec.rb +165 -163
- data/spec/rley/parse_rep/ambiguous_parse_spec.rb +44 -44
- data/spec/rley/parse_rep/ast_builder_spec.rb +6 -7
- data/spec/rley/parse_rep/cst_builder_spec.rb +5 -5
- data/spec/rley/parse_rep/groucho_spec.rb +24 -26
- data/spec/rley/parse_rep/parse_forest_builder_spec.rb +27 -27
- data/spec/rley/parse_rep/parse_forest_factory_spec.rb +8 -8
- data/spec/rley/parse_rep/parse_tree_factory_spec.rb +3 -3
- data/spec/rley/parse_tree_visitor_spec.rb +10 -8
- data/spec/rley/parser/dangling_else_spec.rb +445 -0
- data/spec/rley/parser/error_reason_spec.rb +6 -6
- data/spec/rley/parser/gfg_earley_parser_spec.rb +120 -12
- data/spec/rley/parser/gfg_parsing_spec.rb +6 -13
- data/spec/rley/parser/parse_entry_spec.rb +19 -19
- data/spec/rley/parser/parse_walker_factory_spec.rb +10 -10
- data/spec/rley/ptree/non_terminal_node_spec.rb +5 -3
- data/spec/rley/ptree/parse_tree_node_spec.rb +4 -4
- data/spec/rley/ptree/terminal_node_spec.rb +6 -6
- data/spec/rley/sppf/alternative_node_spec.rb +6 -6
- data/spec/rley/sppf/non_terminal_node_spec.rb +3 -3
- data/spec/rley/sppf/token_node_spec.rb +4 -4
- data/spec/rley/support/ambiguous_grammar_helper.rb +4 -5
- data/spec/rley/support/grammar_abc_helper.rb +3 -5
- data/spec/rley/support/grammar_ambig01_helper.rb +5 -6
- data/spec/rley/support/grammar_arr_int_helper.rb +5 -6
- data/spec/rley/support/grammar_b_expr_helper.rb +5 -6
- data/spec/rley/support/grammar_int_seq_helper.rb +51 -0
- data/spec/rley/support/grammar_l0_helper.rb +14 -17
- data/spec/rley/support/grammar_pb_helper.rb +8 -7
- data/spec/rley/support/grammar_sppf_helper.rb +3 -3
- data/spec/rley/syntax/{grammar_builder_spec.rb → base_grammar_builder_spec.rb} +35 -16
- data/spec/rley/syntax/grammar_spec.rb +6 -6
- data/spec/rley/syntax/grm_symbol_spec.rb +1 -1
- data/spec/rley/syntax/match_closest_spec.rb +46 -0
- data/spec/rley/syntax/non_terminal_spec.rb +8 -8
- data/spec/rley/syntax/production_spec.rb +17 -13
- data/spec/rley/syntax/symbol_seq_spec.rb +2 -2
- data/spec/rley/syntax/terminal_spec.rb +5 -5
- data/spec/rley/syntax/verbatim_symbol_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -12
- data/spec/support/base_tokenizer_spec.rb +7 -2
- metadata +48 -74
- data/.simplecov +0 -7
- data/lib/rley/parser/parse_state.rb +0 -83
- data/lib/rley/parser/parse_state_tracker.rb +0 -59
- data/lib/rley/parser/state_set.rb +0 -101
- data/spec/rley/parser/parse_state_spec.rb +0 -125
- data/spec/rley/parser/parse_tracer_spec.rb +0 -200
- 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
|
-
|
166
|
+
lambda do |event, item|
|
165
167
|
check_event(event, item, [:before_pforest, grm_sppf_pforest1])
|
166
|
-
|
167
|
-
|
168
|
+
end,
|
169
|
+
lambda do |event, item|
|
168
170
|
check_event(event, item, [:before_non_terminal, 'Phi[0, 4]'])
|
169
|
-
|
170
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
195
|
+
end,
|
196
|
+
lambda do |event, item|
|
195
197
|
check_event(event, item, [:before_terminal, 'a[0, 1]'])
|
196
|
-
|
197
|
-
|
198
|
+
end,
|
199
|
+
lambda do |event, item|
|
198
200
|
check_event(event, item, [:after_terminal, 'a[0, 1]'])
|
199
|
-
|
200
|
-
|
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
|
-
|
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
|
-
|
210
|
+
end,
|
211
|
+
lambda do |event, item|
|
210
212
|
check_event(event, item, [:before_terminal, 'b[1, 2]'])
|
211
|
-
|
212
|
-
|
213
|
+
end,
|
214
|
+
lambda do |event, item|
|
213
215
|
check_event(event, item, [:after_terminal, 'b[1, 2]'])
|
214
|
-
|
215
|
-
|
216
|
+
end,
|
217
|
+
lambda do |event, item|
|
216
218
|
check_event(event, item, [:before_terminal, 'b[2, 3]'])
|
217
|
-
|
218
|
-
|
219
|
+
end,
|
220
|
+
lambda do |event, item|
|
219
221
|
check_event(event, item, [:after_terminal, 'b[2, 3]'])
|
220
|
-
|
221
|
-
|
222
|
+
end,
|
223
|
+
lambda do |event, item|
|
222
224
|
check_event(event, item, [:before_terminal, 'b[3, 4]'])
|
223
|
-
|
224
|
-
|
225
|
+
end,
|
226
|
+
lambda do |event, item|
|
225
227
|
check_event(event, item, [:after_terminal, 'b[3, 4]'])
|
226
|
-
|
227
|
-
|
228
|
+
end,
|
229
|
+
lambda do |event, parent, _children|
|
228
230
|
check_event(event, parent, [:after_subnodes, 'T[1, 4]'])
|
229
|
-
|
230
|
-
|
231
|
+
end,
|
232
|
+
lambda do |event, item|
|
231
233
|
check_event(event, item, [:after_non_terminal, 'T[1, 4]'])
|
232
|
-
|
233
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
276
|
+
end,
|
277
|
+
lambda do |event, item|
|
276
278
|
check_event(event, item, [:before_terminal, 'a[0, 1]'])
|
277
|
-
|
278
|
-
|
279
|
+
end,
|
280
|
+
lambda do |event, item|
|
279
281
|
check_event(event, item, [:after_terminal, 'a[0, 1]'])
|
280
|
-
|
281
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
311
|
+
end,
|
312
|
+
lambda do |event, item|
|
311
313
|
check_event(event, item, [:before_epsilon, '_[0, 0]'])
|
312
|
-
|
313
|
-
|
314
|
+
end,
|
315
|
+
lambda do |event, item|
|
314
316
|
check_event(event, item, [:after_epsilon, '_[0, 0]'])
|
315
|
-
|
316
|
-
|
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
|
-
|
321
|
+
end,
|
322
|
+
lambda do |event, item|
|
321
323
|
check_event(event, item, [:after_non_terminal, 'B[0, 0]'])
|
322
|
-
|
323
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
345
|
+
end,
|
346
|
+
lambda do |event, item|
|
345
347
|
check_event(event, item, [:before_terminal, 'a[0, 1]'])
|
346
|
-
|
347
|
-
|
348
|
+
end,
|
349
|
+
lambda do |event, item|
|
348
350
|
check_event(event, item, [:after_terminal, 'a[0, 1]'])
|
349
|
-
|
350
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
382
|
+
end,
|
383
|
+
lambda do |event, item|
|
382
384
|
check_event(event, item, [:before_epsilon, '_[0, 0]'])
|
383
|
-
|
384
|
-
|
385
|
+
end,
|
386
|
+
lambda do |event, item|
|
385
387
|
check_event(event, item, [:after_epsilon, '_[0, 0]'])
|
386
|
-
|
387
|
-
|
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
|
-
|
392
|
+
end,
|
393
|
+
lambda do |event, item|
|
392
394
|
check_event(event, item, [:after_non_terminal, 'B[0, 0]'])
|
393
|
-
|
394
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
409
|
+
end,
|
410
|
+
lambda do |event, item|
|
409
411
|
check_event(event, item, [:after_non_terminal, 'A[0, 1]'])
|
410
|
-
|
411
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
425
|
+
end,
|
426
|
+
lambda do |event, item|
|
425
427
|
check_event(event, item, [:after_non_terminal, 'A[0, 1]'])
|
426
|
-
|
427
|
-
|
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
|
-
|
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
|
-
|
437
|
+
end,
|
438
|
+
lambda do |event, item|
|
437
439
|
check_event(event, item, [:before_terminal, 'b[1, 2]'])
|
438
|
-
|
439
|
-
|
440
|
+
end,
|
441
|
+
lambda do |event, item|
|
440
442
|
check_event(event, item, [:after_terminal, 'b[1, 2]'])
|
441
|
-
|
442
|
-
|
443
|
+
end,
|
444
|
+
lambda do |event, item|
|
443
445
|
check_event(event, item, [:before_terminal, 'b[2, 3]'])
|
444
|
-
|
445
|
-
|
446
|
+
end,
|
447
|
+
lambda do |event, item|
|
446
448
|
check_event(event, item, [:after_terminal, 'b[2, 3]'])
|
447
|
-
|
448
|
-
|
449
|
+
end,
|
450
|
+
lambda do |event, item|
|
449
451
|
check_event(event, item, [:before_terminal, 'b[3, 4]'])
|
450
|
-
|
451
|
-
|
452
|
+
end,
|
453
|
+
lambda do |event, item|
|
452
454
|
check_event(event, item, [:after_terminal, 'b[3, 4]'])
|
453
|
-
|
454
|
-
|
455
|
+
end,
|
456
|
+
lambda do |event, parent, _children|
|
455
457
|
check_event(event, parent, [:after_subnodes, 'T[1, 4]'])
|
456
|
-
|
457
|
-
|
458
|
+
end,
|
459
|
+
lambda do |event, item|
|
458
460
|
check_event(event, item, [:after_non_terminal, 'T[1, 4]'])
|
459
|
-
|
460
|
-
|
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
|
-
|
467
|
-
check_event(
|
468
|
-
|
469
|
-
|
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
|
-
|
475
|
+
end,
|
476
|
+
lambda do |event, item|
|
475
477
|
check_event(event, item, [:after_non_terminal, 'S[0, 4]'])
|
476
|
-
|
477
|
-
|
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
|
-
|
482
|
+
end,
|
483
|
+
lambda do |event, item|
|
482
484
|
check_event(event, item, [:after_non_terminal, 'Phi[0, 4]'])
|
483
|
-
|
484
|
-
|
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
|