rley 0.7.03 → 0.7.08

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