rley 0.7.03 → 0.7.08

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 (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
  # Load the builder class
2
4
  require_relative '../../../lib/rley/syntax/grammar_builder'
3
5
 
@@ -8,7 +10,7 @@ module GrammarSPPFHelper
8
10
  # "SPPF-Style Parsing From Earley Recognizers" in
9
11
  # Notes in Theoretical Computer Science 203, (2008), pp. 53-67
10
12
  # contains a hidden left recursion and a cycle
11
- def grammar_sppf_builder()
13
+ def grammar_sppf_builder
12
14
  builder = Rley::Syntax::GrammarBuilder.new do
13
15
  add_terminals('a', 'b')
14
16
  rule 'Phi' => 'S'
@@ -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,7 +24,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
22
24
 
23
25
  context 'Initialization with argument:' do
24
26
  it 'could be created with a block argument' do
25
- expect do
27
+ expect do
26
28
  GrammarBuilder.new { nil }
27
29
  end.not_to raise_error
28
30
  end
@@ -97,14 +99,14 @@ module Rley # Open this namespace to avoid module qualifier prefixes
97
99
  expect(new_prod.lhs).to eq(subject['A'])
98
100
  expect_rhs = [subject['a'], subject['A'], subject['c']]
99
101
  expect(new_prod.rhs.members).to eq(expect_rhs)
100
-
102
+
101
103
  # Try another syntax
102
104
  subject.add_production('A' => 'a A c')
103
105
  expect(subject.productions.size).to eq(3)
104
106
  new_prod = subject.productions.last
105
107
  expect(new_prod.lhs).to eq(subject['A'])
106
108
  expect_rhs = [subject['a'], subject['A'], subject['c']]
107
- expect(new_prod.rhs.members).to eq(expect_rhs)
109
+ expect(new_prod.rhs.members).to eq(expect_rhs)
108
110
 
109
111
  # GrammarBuilder#rule is an alias of add_production
110
112
  subject.rule('A' => ['b'])
@@ -160,11 +162,11 @@ module Rley # Open this namespace to avoid module qualifier prefixes
160
162
  err = StandardError
161
163
  msg = 'Useless terminal symbol(s): d.'
162
164
  expect { subject.grammar }.to raise_error(err, msg)
163
-
165
+
164
166
  # Add another useless terminal
165
167
  subject.add_terminals('e')
166
168
  msg = 'Useless terminal symbol(s): d, e.'
167
- expect { subject.grammar }.to raise_error(err, msg)
169
+ expect { subject.grammar }.to raise_error(err, msg)
168
170
  end
169
171
 
170
172
  it 'should build a grammar with nullable nonterminals' do
@@ -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/verbatim_symbol'
@@ -72,7 +74,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
72
74
  let(:nt_A) { NonTerminal.new('A') }
73
75
  let(:nt_B) { NonTerminal.new('B') }
74
76
  let(:nt_C) { NonTerminal.new('C') }
75
- let(:nt_D) { NonTerminal.new('D') }
77
+ let(:nt_D) { NonTerminal.new('D') }
76
78
  let(:a_) { VerbatimSymbol.new('a') }
77
79
  let(:b_) { VerbatimSymbol.new('b') }
78
80
  let(:c_) { VerbatimSymbol.new('c') }
@@ -159,7 +161,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
159
161
  expect(subject.name2symbol['b']).to eq(b_)
160
162
  expect(subject.name2symbol['c']).to eq(c_)
161
163
  end
162
-
164
+
163
165
  it 'should ensure that each production has a name' do
164
166
  subject.rules.each do |prod|
165
167
  expect(prod.name).to match(Regexp.new("#{prod.lhs.name}_\\d$"))
@@ -216,8 +218,8 @@ module Rley # Open this namespace to avoid module qualifier prefixes
216
218
  partitioning = instance.non_terminals.partition(&:generative?)
217
219
  expect(partitioning[0].size).to eq(2)
218
220
  expect(partitioning[0]).to eq([nt_S, nt_A])
219
- expect(partitioning[1]).to eq([nt_B, nt_C, nt_D])
220
-
221
+ expect(partitioning[1]).to eq([nt_B, nt_C, nt_D])
222
+
221
223
  undefined = instance.non_terminals.select(&:undefined?)
222
224
  expect(undefined).to be_empty
223
225
  end
@@ -246,13 +248,13 @@ module Rley # Open this namespace to avoid module qualifier prefixes
246
248
  expect(nterm).to be_nullable
247
249
  end
248
250
  end
249
-
251
+
250
252
  it 'should mark its nullable productions' do
251
253
  # Given the above productions, here are our expectations:
252
254
  expectations = [true, false, false, true]
253
255
  actuals = subject.rules.map(&:nullable?)
254
256
  expect(actuals).to eq(expectations)
255
- end
257
+ end
256
258
  end # context
257
259
  end # describe
258
260
  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
@@ -18,7 +20,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
18
20
  expect(subject.name).to eq(sample_name)
19
21
  end
20
22
  end # context
21
-
23
+
22
24
  context 'Provided services:' do
23
25
  it 'should give its text representation' do
24
26
  expect(subject.to_s).to eq(sample_name)
@@ -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
@@ -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
@@ -17,28 +19,28 @@ module Rley # Open this namespace to avoid module qualifier prefixes
17
19
  it 'should know its name' do
18
20
  expect(subject.name).to eq(sample_name)
19
21
  end
20
-
22
+
21
23
  it 'should know that is a not a terminal' do
22
24
  expect(subject).not_to be_terminal
23
25
  end
24
26
  end # context
25
27
 
26
-
27
- context 'Provided services:' do
28
+
29
+ context 'Provided services:' do
28
30
  it 'should know whether it is nullable' do
29
31
  expect(subject.nullable?).to be_nil
30
32
  subject.nullable = true
31
33
  expect(subject).to be_nullable
32
34
  subject.nullable = false
33
- expect(subject).not_to be_nullable
35
+ expect(subject).not_to be_nullable
34
36
  end
35
-
37
+
36
38
  it 'should know whether it is defined' do
37
39
  expect(subject.undefined?).to be_nil
38
40
  subject.undefined = true
39
41
  expect(subject).to be_undefined
40
42
  subject.undefined = false
41
- expect(subject).not_to be_undefined
43
+ expect(subject).not_to be_undefined
42
44
  end
43
45
 
44
46
  it 'should know whether it is generative' do
@@ -46,8 +48,8 @@ module Rley # Open this namespace to avoid module qualifier prefixes
46
48
  subject.generative = true
47
49
  expect(subject).to be_generative
48
50
  subject.generative = false
49
- expect(subject).not_to be_generative
50
- end
51
+ expect(subject).not_to be_generative
52
+ end
51
53
  end # context
52
54
  end # describe
53
55
  end # module
@@ -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'
@@ -22,11 +24,11 @@ module Rley # Open this namespace to avoid module qualifier prefixes
22
24
  it 'should be created with a non-terminal and a symbol sequence' do
23
25
  expect { Production.new(sentence, sequence) }.not_to raise_error
24
26
  end
25
-
27
+
26
28
  it 'should complain when its rhs is nil' do
27
29
  err = StandardError
28
30
  msg_prefix = 'Right side of a production of the kind '
29
- msg_suffix = "'Sentence' => ... is nil."
31
+ msg_suffix = "'Sentence' => ... is nil."
30
32
  msg = msg_prefix + msg_suffix
31
33
  expect { Production.new(sentence, nil) }.to raise_error(err, msg)
32
34
  end
@@ -47,42 +49,42 @@ module Rley # Open this namespace to avoid module qualifier prefixes
47
49
  instance = Production.new(sentence, [])
48
50
  expect(instance).to be_empty
49
51
  end
50
-
52
+
51
53
  it 'should be anonymous at creation' do
52
54
  expect(subject.name).to be_nil
53
55
  end
54
-
56
+
55
57
  it 'should complain if its lhs is not a non-terminal' do
56
58
  err = StandardError
57
59
  msg_prefix = 'Left side of production must be a non-terminal symbol'
58
- msg_suffix = ", found a #{String} instead."
60
+ msg_suffix = ", found a #{String} instead."
59
61
  msg = msg_prefix + msg_suffix
60
62
  expect { Production.new('wrong', sequence) }.to raise_error(err, msg)
61
63
  end
62
64
  end # context
63
-
65
+
64
66
  context 'Provided services:' do
65
67
  it 'should accept a name (i)' do
66
68
  a_name = 'nominem'
67
69
  subject.name = a_name
68
70
  expect(subject.name).to eq(a_name)
69
71
  end
70
-
72
+
71
73
  it 'should accept a name (ii)' do
72
74
  a_name = 'nominem'
73
75
  subject.as(a_name)
74
- expect(subject.name).to eq(a_name)
76
+ expect(subject.name).to eq(a_name)
75
77
  end
76
-
78
+
77
79
  it 'should provide human-readable representation of itself' do
78
80
  subject.name = 'some name'
79
81
  prefix = /^#<Rley::Syntax::Production:\d+ @name="some name"/
80
82
  expect(subject.inspect).to match(prefix)
81
- pattern = /@lhs=Sentence @rhs=#<Rley::Syntax::SymbolSeq/
83
+ pattern = /@lhs=Sentence @rhs=#<Rley::Syntax::SymbolSeq/
82
84
  expect(subject.inspect).to match(pattern)
83
- suffix = /> @generative=>$/
84
- expect(subject.inspect).to match(suffix)
85
- end
85
+ suffix = /> @generative=>$/
86
+ expect(subject.inspect).to match(suffix)
87
+ end
86
88
  end # context
87
89
  end # describe
88
90
  end # module
@@ -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/non_terminal'
@@ -55,13 +57,13 @@ module Rley # Open this namespace to avoid module qualifier prefixes
55
57
  unequal_one = SymbolSeq.new([verb, pp, np])
56
58
  expect(subject == unequal_one).not_to eq(true)
57
59
  end
58
-
60
+
59
61
  it 'should complain when unable to compare' do
60
62
  err = StandardError
61
63
  msg = 'Cannot compare a SymbolSeq with a String'
62
64
  expect { subject == 'dummy-text' }.to raise_error(err, msg)
63
65
  end
64
-
66
+
65
67
  it 'should provide human-readable representation of itself' do
66
68
  suffix = /::SymbolSeq:\d+ @members=\["Verb", "NP", "PP"\]>$/
67
69
  expect(subject.inspect).to match(suffix)
@@ -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
@@ -17,18 +19,18 @@ module Rley # Open this namespace to avoid module qualifier prefixes
17
19
  it 'should know its name' do
18
20
  expect(subject.name).to eq(sample_name)
19
21
  end
20
-
22
+
21
23
  it 'should know that is a terminal symbol' do
22
24
  expect(subject).to be_terminal
23
- end
24
-
25
+ end
26
+
25
27
  it "should know that isn't nullable" do
26
28
  expect(subject).not_to be_nullable
27
29
  end
28
-
30
+
29
31
  it 'should know that it is generative' do
30
32
  expect(subject).to be_generative
31
- end
33
+ end
32
34
  end # context
33
35
  end # describe
34
36
  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,7 +24,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
22
24
  expect(subject.text).to eq(sample_name)
23
25
  end
24
26
  end # context
25
-
27
+
26
28
  context 'Provided services:' do
27
29
  it 'should give its text representation' do
28
30
  expected = "'#{sample_name}'"
data/spec/spec_helper.rb CHANGED
@@ -1,18 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # File: spec_helper.rb
2
4
  # Purpose: utility file that is loaded by all our RSpec files
3
5
 
4
- require 'simplecov'
5
- require 'coveralls'
6
-
7
- Coveralls.wear!
8
-
9
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
10
- [
11
- SimpleCov::Formatter::HTMLFormatter,
12
- Coveralls::SimpleCov::Formatter
13
- ]
14
- )
15
-
16
6
  require 'pp' # Use pretty-print for debugging purposes
17
7
  require 'rspec' # Use the RSpec framework
18
8
 
@@ -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
@@ -23,6 +25,8 @@ describe BaseTokenizer do
23
25
 
24
26
 
25
27
  context 'Provided services:' do
28
+ # Simplistic tokenizer.
29
+ # rubocop: disable Lint/ConstantDefinitionInBlock
26
30
  class PB_Tokenizer < BaseTokenizer
27
31
  @@lexeme2name = {
28
32
  '(' => 'LPAREN',
@@ -32,8 +36,9 @@ describe BaseTokenizer do
32
36
 
33
37
  protected
34
38
 
35
- def recognize_token()
36
- if (lexeme = scanner.scan(/[\(\)]/)) # Single characters
39
+ # rubocop: disable Lint/DuplicateBranch
40
+ def recognize_token
41
+ if (lexeme = scanner.scan(/[()]/)) # Single characters
37
42
  # Delimiters, separators => single character token
38
43
  build_token(@@lexeme2name[lexeme], lexeme)
39
44
  elsif (lexeme = scanner.scan(/(?:\+)(?=\s)/)) # Isolated char
@@ -42,7 +47,9 @@ describe BaseTokenizer do
42
47
  build_token('int', lexeme)
43
48
  end
44
49
  end
50
+ # rubocop: enable Lint/DuplicateBranch
45
51
  end # class
52
+ # rubocop: enable Lint/ConstantDefinitionInBlock
46
53
 
47
54
  # Basic tokenizer
48
55
  # @return [Array<Rley::Lexical::Token>]
metadata CHANGED
@@ -1,115 +1,75 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rley
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.03
4
+ version: 0.7.08
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitri Geshef
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-21 00:00:00.000000000 Z
11
+ date: 2021-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: coveralls
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 0.7.0
20
17
  - - "~>"
21
18
  - !ruby/object:Gem::Version
22
- version: '0.7'
23
- type: :development
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: 0.7.0
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: '0.7'
33
- - !ruby/object:Gem::Dependency
34
- name: rake
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
19
+ version: '10.0'
37
20
  - - ">="
38
21
  - !ruby/object:Gem::Version
39
22
  version: 10.0.0
40
- - - "~>"
41
- - !ruby/object:Gem::Version
42
- version: '10.0'
43
23
  type: :development
44
24
  prerelease: false
45
25
  version_requirements: !ruby/object:Gem::Requirement
46
26
  requirements:
47
- - - ">="
48
- - !ruby/object:Gem::Version
49
- version: 10.0.0
50
27
  - - "~>"
51
28
  - !ruby/object:Gem::Version
52
29
  version: '10.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 10.0.0
53
33
  - !ruby/object:Gem::Dependency
54
34
  name: rspec
55
35
  requirement: !ruby/object:Gem::Requirement
56
36
  requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- version: 3.5.0
60
37
  - - "~>"
61
38
  - !ruby/object:Gem::Version
62
39
  version: '3.5'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 3.5.0
63
43
  type: :development
64
44
  prerelease: false
65
45
  version_requirements: !ruby/object:Gem::Requirement
66
46
  requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: 3.5.0
70
47
  - - "~>"
71
48
  - !ruby/object:Gem::Version
72
49
  version: '3.5'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.5.0
73
53
  - !ruby/object:Gem::Dependency
74
54
  name: rubygems
75
55
  requirement: !ruby/object:Gem::Requirement
76
56
  requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- version: 2.0.0
80
57
  - - "~>"
81
58
  - !ruby/object:Gem::Version
82
59
  version: '2.0'
83
- type: :development
84
- prerelease: false
85
- version_requirements: !ruby/object:Gem::Requirement
86
- requirements:
87
60
  - - ">="
88
61
  - !ruby/object:Gem::Version
89
62
  version: 2.0.0
90
- - - "~>"
91
- - !ruby/object:Gem::Version
92
- version: '2.0'
93
- - !ruby/object:Gem::Dependency
94
- name: simplecov
95
- requirement: !ruby/object:Gem::Requirement
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- version: 0.1.0
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '0.1'
103
63
  type: :development
104
64
  prerelease: false
105
65
  version_requirements: !ruby/object:Gem::Requirement
106
66
  requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: 0.1.0
110
67
  - - "~>"
111
68
  - !ruby/object:Gem::Version
112
- version: '0.1'
69
+ version: '2.0'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 2.0.0
113
73
  description: A general parser using the Earley algorithm.
114
74
  email: famished.tiger@yahoo.com
115
75
  executables: []
@@ -120,11 +80,9 @@ files:
120
80
  - ".rspec"
121
81
  - ".rubocop.yml"
122
82
  - ".ruby-gemset"
123
- - ".simplecov"
124
83
  - ".travis.yml"
125
84
  - ".yardopts"
126
85
  - CHANGELOG.md
127
- - Gemfile
128
86
  - LICENSE.txt
129
87
  - README.md
130
88
  - Rakefile
@@ -308,15 +266,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
308
266
  requirements:
309
267
  - - ">="
310
268
  - !ruby/object:Gem::Version
311
- version: 2.0.0
269
+ version: 2.5.0
312
270
  required_rubygems_version: !ruby/object:Gem::Requirement
313
271
  requirements:
314
272
  - - ">="
315
273
  - !ruby/object:Gem::Version
316
274
  version: '0'
317
275
  requirements: []
318
- rubygems_version: 3.0.2
319
- signing_key:
276
+ rubygems_version: 3.1.4
277
+ signing_key:
320
278
  specification_version: 4
321
279
  summary: Ruby implementation of the Earley's parsing algorithm
322
280
  test_files: