rley 0.7.03 → 0.7.04

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 (171) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -4
  3. data/CHANGELOG.md +10 -1
  4. data/README.md +3 -5
  5. data/Rakefile +2 -0
  6. data/appveyor.yml +4 -2
  7. data/examples/NLP/benchmark_pico_en.rb +2 -0
  8. data/examples/NLP/engtagger.rb +2 -0
  9. data/examples/NLP/nano_eng/nano_en_demo.rb +2 -0
  10. data/examples/NLP/nano_eng/nano_grammar.rb +2 -0
  11. data/examples/NLP/pico_en_demo.rb +2 -0
  12. data/examples/data_formats/JSON/cli_options.rb +2 -0
  13. data/examples/data_formats/JSON/json_ast_builder.rb +2 -0
  14. data/examples/data_formats/JSON/json_ast_nodes.rb +2 -0
  15. data/examples/data_formats/JSON/json_demo.rb +2 -0
  16. data/examples/data_formats/JSON/json_grammar.rb +2 -0
  17. data/examples/data_formats/JSON/json_lexer.rb +2 -0
  18. data/examples/data_formats/JSON/json_minifier.rb +2 -0
  19. data/examples/general/calc_iter1/calc_ast_builder.rb +2 -0
  20. data/examples/general/calc_iter1/calc_ast_nodes.rb +2 -0
  21. data/examples/general/calc_iter1/calc_demo.rb +2 -0
  22. data/examples/general/calc_iter1/calc_grammar.rb +2 -0
  23. data/examples/general/calc_iter1/calc_lexer.rb +2 -0
  24. data/examples/general/calc_iter1/spec/calculator_spec.rb +2 -0
  25. data/examples/general/calc_iter2/calc_ast_builder.rb +2 -0
  26. data/examples/general/calc_iter2/calc_ast_nodes.rb +2 -0
  27. data/examples/general/calc_iter2/calc_demo.rb +2 -0
  28. data/examples/general/calc_iter2/calc_grammar.rb +2 -0
  29. data/examples/general/calc_iter2/calc_lexer.rb +2 -0
  30. data/examples/general/calc_iter2/spec/calculator_spec.rb +2 -0
  31. data/examples/general/left.rb +2 -0
  32. data/examples/general/right.rb +2 -0
  33. data/lib/rley.rb +2 -0
  34. data/lib/rley/base/base_parser.rb +2 -0
  35. data/lib/rley/base/dotted_item.rb +17 -12
  36. data/lib/rley/base/grm_items_builder.rb +2 -0
  37. data/lib/rley/constants.rb +4 -2
  38. data/lib/rley/engine.rb +2 -1
  39. data/lib/rley/formatter/asciitree.rb +3 -1
  40. data/lib/rley/formatter/base_formatter.rb +2 -0
  41. data/lib/rley/formatter/bracket_notation.rb +2 -0
  42. data/lib/rley/formatter/debug.rb +2 -0
  43. data/lib/rley/formatter/json.rb +2 -0
  44. data/lib/rley/gfg/call_edge.rb +2 -0
  45. data/lib/rley/gfg/edge.rb +2 -0
  46. data/lib/rley/gfg/end_vertex.rb +2 -0
  47. data/lib/rley/gfg/epsilon_edge.rb +2 -0
  48. data/lib/rley/gfg/grm_flow_graph.rb +4 -2
  49. data/lib/rley/gfg/item_vertex.rb +2 -12
  50. data/lib/rley/gfg/non_terminal_vertex.rb +2 -0
  51. data/lib/rley/gfg/return_edge.rb +2 -0
  52. data/lib/rley/gfg/scan_edge.rb +2 -0
  53. data/lib/rley/gfg/shortcut_edge.rb +2 -0
  54. data/lib/rley/gfg/start_vertex.rb +2 -0
  55. data/lib/rley/gfg/vertex.rb +4 -2
  56. data/lib/rley/lexical/token.rb +2 -0
  57. data/lib/rley/lexical/token_range.rb +2 -0
  58. data/lib/rley/parse_forest_visitor.rb +2 -0
  59. data/lib/rley/parse_rep/ast_base_builder.rb +2 -0
  60. data/lib/rley/parse_rep/cst_builder.rb +2 -0
  61. data/lib/rley/parse_rep/parse_forest_builder.rb +2 -0
  62. data/lib/rley/parse_rep/parse_forest_factory.rb +2 -0
  63. data/lib/rley/parse_rep/parse_rep_creator.rb +2 -0
  64. data/lib/rley/parse_rep/parse_tree_builder.rb +11 -11
  65. data/lib/rley/parse_rep/parse_tree_factory.rb +2 -0
  66. data/lib/rley/parse_tree_visitor.rb +2 -0
  67. data/lib/rley/parser/error_reason.rb +5 -3
  68. data/lib/rley/parser/gfg_chart.rb +2 -0
  69. data/lib/rley/parser/gfg_earley_parser.rb +3 -1
  70. data/lib/rley/parser/gfg_parsing.rb +7 -1
  71. data/lib/rley/parser/parse_entry.rb +4 -3
  72. data/lib/rley/parser/parse_entry_set.rb +9 -13
  73. data/lib/rley/parser/parse_entry_tracker.rb +2 -0
  74. data/lib/rley/parser/parse_state.rb +2 -0
  75. data/lib/rley/parser/parse_state_tracker.rb +2 -0
  76. data/lib/rley/parser/parse_tracer.rb +2 -0
  77. data/lib/rley/parser/parse_walker_factory.rb +2 -0
  78. data/lib/rley/parser/state_set.rb +2 -0
  79. data/lib/rley/ptree/non_terminal_node.rb +3 -1
  80. data/lib/rley/ptree/parse_tree.rb +3 -1
  81. data/lib/rley/ptree/parse_tree_node.rb +2 -0
  82. data/lib/rley/ptree/terminal_node.rb +2 -0
  83. data/lib/rley/rley_error.rb +2 -0
  84. data/lib/rley/sppf/alternative_node.rb +2 -0
  85. data/lib/rley/sppf/composite_node.rb +2 -0
  86. data/lib/rley/sppf/epsilon_node.rb +2 -0
  87. data/lib/rley/sppf/leaf_node.rb +2 -0
  88. data/lib/rley/sppf/non_terminal_node.rb +2 -0
  89. data/lib/rley/sppf/parse_forest.rb +3 -1
  90. data/lib/rley/sppf/sppf_node.rb +2 -0
  91. data/lib/rley/sppf/token_node.rb +2 -0
  92. data/lib/rley/syntax/grammar.rb +2 -0
  93. data/lib/rley/syntax/grammar_builder.rb +2 -0
  94. data/lib/rley/syntax/grm_symbol.rb +2 -0
  95. data/lib/rley/syntax/literal.rb +2 -0
  96. data/lib/rley/syntax/non_terminal.rb +2 -0
  97. data/lib/rley/syntax/production.rb +3 -1
  98. data/lib/rley/syntax/symbol_seq.rb +3 -1
  99. data/lib/rley/syntax/terminal.rb +2 -0
  100. data/lib/rley/syntax/verbatim_symbol.rb +2 -0
  101. data/lib/support/base_tokenizer.rb +4 -2
  102. data/spec/rley/base/dotted_item_spec.rb +2 -0
  103. data/spec/rley/base/grm_items_builder_spec.rb +2 -0
  104. data/spec/rley/engine_spec.rb +2 -0
  105. data/spec/rley/formatter/asciitree_spec.rb +4 -2
  106. data/spec/rley/formatter/bracket_notation_spec.rb +4 -2
  107. data/spec/rley/formatter/debug_spec.rb +4 -2
  108. data/spec/rley/formatter/json_spec.rb +4 -2
  109. data/spec/rley/gfg/call_edge_spec.rb +2 -0
  110. data/spec/rley/gfg/edge_spec.rb +2 -0
  111. data/spec/rley/gfg/end_vertex_spec.rb +2 -0
  112. data/spec/rley/gfg/epsilon_edge_spec.rb +2 -0
  113. data/spec/rley/gfg/grm_flow_graph_spec.rb +2 -0
  114. data/spec/rley/gfg/item_vertex_spec.rb +2 -0
  115. data/spec/rley/gfg/non_terminal_vertex_spec.rb +2 -0
  116. data/spec/rley/gfg/return_edge_spec.rb +2 -0
  117. data/spec/rley/gfg/scan_edge_spec.rb +2 -0
  118. data/spec/rley/gfg/shortcut_edge_spec.rb +2 -0
  119. data/spec/rley/gfg/start_vertex_spec.rb +2 -0
  120. data/spec/rley/gfg/vertex_spec.rb +2 -0
  121. data/spec/rley/lexical/token_range_spec.rb +2 -0
  122. data/spec/rley/lexical/token_spec.rb +2 -0
  123. data/spec/rley/parse_forest_visitor_spec.rb +2 -0
  124. data/spec/rley/parse_rep/ambiguous_parse_spec.rb +2 -0
  125. data/spec/rley/parse_rep/ast_builder_spec.rb +2 -0
  126. data/spec/rley/parse_rep/cst_builder_spec.rb +2 -0
  127. data/spec/rley/parse_rep/groucho_spec.rb +2 -0
  128. data/spec/rley/parse_rep/parse_forest_builder_spec.rb +2 -0
  129. data/spec/rley/parse_rep/parse_forest_factory_spec.rb +2 -0
  130. data/spec/rley/parse_rep/parse_tree_factory_spec.rb +2 -0
  131. data/spec/rley/parse_tree_visitor_spec.rb +2 -0
  132. data/spec/rley/parser/error_reason_spec.rb +2 -0
  133. data/spec/rley/parser/gfg_chart_spec.rb +2 -0
  134. data/spec/rley/parser/gfg_earley_parser_spec.rb +7 -5
  135. data/spec/rley/parser/gfg_parsing_spec.rb +2 -0
  136. data/spec/rley/parser/parse_entry_set_spec.rb +2 -0
  137. data/spec/rley/parser/parse_entry_spec.rb +2 -0
  138. data/spec/rley/parser/parse_state_spec.rb +2 -0
  139. data/spec/rley/parser/parse_tracer_spec.rb +16 -14
  140. data/spec/rley/parser/parse_walker_factory_spec.rb +2 -0
  141. data/spec/rley/parser/state_set_spec.rb +2 -0
  142. data/spec/rley/ptree/non_terminal_node_spec.rb +2 -0
  143. data/spec/rley/ptree/parse_tree_node_spec.rb +2 -0
  144. data/spec/rley/ptree/parse_tree_spec.rb +2 -0
  145. data/spec/rley/ptree/terminal_node_spec.rb +2 -0
  146. data/spec/rley/sppf/alternative_node_spec.rb +2 -0
  147. data/spec/rley/sppf/non_terminal_node_spec.rb +2 -0
  148. data/spec/rley/sppf/token_node_spec.rb +2 -0
  149. data/spec/rley/support/ambiguous_grammar_helper.rb +2 -0
  150. data/spec/rley/support/expectation_helper.rb +2 -0
  151. data/spec/rley/support/grammar_abc_helper.rb +2 -0
  152. data/spec/rley/support/grammar_ambig01_helper.rb +2 -0
  153. data/spec/rley/support/grammar_arr_int_helper.rb +2 -0
  154. data/spec/rley/support/grammar_b_expr_helper.rb +2 -0
  155. data/spec/rley/support/grammar_helper.rb +2 -0
  156. data/spec/rley/support/grammar_l0_helper.rb +2 -0
  157. data/spec/rley/support/grammar_pb_helper.rb +2 -0
  158. data/spec/rley/support/grammar_sppf_helper.rb +2 -0
  159. data/spec/rley/syntax/grammar_builder_spec.rb +2 -0
  160. data/spec/rley/syntax/grammar_spec.rb +2 -0
  161. data/spec/rley/syntax/grm_symbol_spec.rb +2 -0
  162. data/spec/rley/syntax/literal_spec.rb +2 -0
  163. data/spec/rley/syntax/non_terminal_spec.rb +2 -0
  164. data/spec/rley/syntax/production_spec.rb +2 -0
  165. data/spec/rley/syntax/symbol_seq_spec.rb +2 -0
  166. data/spec/rley/syntax/terminal_spec.rb +2 -0
  167. data/spec/rley/syntax/verbatim_symbol_spec.rb +2 -0
  168. data/spec/spec_helper.rb +2 -0
  169. data/spec/support/base_tokenizer_spec.rb +2 -0
  170. metadata +4 -5
  171. data/Gemfile +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a63420880d532cd1ad4bcef4ff01cbe51de63734f5e30ecc8ffc34338079a3da
4
- data.tar.gz: 0712f56c42b467cbe571c069e5c856817a856c73eb3608531517b28f61f9682a
3
+ metadata.gz: 9fa143547cbc9df1103e8d5fa196a77fb1dde67edc118f450ba34e2d7338be18
4
+ data.tar.gz: 3a21aa20217d4bf09b9816229b5d5a75a804a8f41c0bb14fc8572f5119f1140b
5
5
  SHA512:
6
- metadata.gz: b1d6824b1e67e3a6b12f262b6e8badc8036fb09cd503de1866834400d23fa815120d71cf5474bd1fef61249836f319f121cc3cf61aff1cef001f7f122d0877e4
7
- data.tar.gz: '081b167f0616abc747e9e90fbf24025e57d1442cd34699e5afd55224042264c4c15f3bcdac1e29b9760f2deba38f113f26da4d119886fc57f099395bd88407a3'
6
+ metadata.gz: 2bd17209dd119cf971f3ccf9f8cafb319955add4714f54d6d3a2baa542fc5a528942d71276ab9110081d1eed6d48d39bfec0f435ef55c47eb0d12dd1aa5b2801
7
+ data.tar.gz: 500b641afa30d01ba6f28ef8fe23d9f157db67985f66fc95a6a07bdff099946a2faeffb09bdd2651a7871edfa756799c9e5768bb3010a8528d8f4a758f5933e3
@@ -9,9 +9,9 @@ script:
9
9
  - bundle exec rake
10
10
 
11
11
  rvm:
12
- - 2.6.0
13
- - 2.5.3
14
- - 2.4.5
12
+ - 2.6.3
13
+ - 2.5.5
14
+ - 2.4.6
15
15
  - 2.3.8
16
16
  - ruby-head
17
17
  - jruby-9.1.9.0
@@ -19,7 +19,6 @@ rvm:
19
19
 
20
20
  matrix:
21
21
  allow_failures:
22
- - rvm: 2.6.0
23
22
  - rvm: ruby-head
24
23
  - rvm: jruby-head
25
24
 
@@ -1,10 +1,19 @@
1
+ ### 0.7.04 / 2019-08-17
2
+ - Rley recognizer is about 25% faster than previous version. Kudos to the people
3
+ behind the *magic_frozen_string_literal* gem.
4
+ - Code refactoring to use string frozen magic comments (as a consequence, Rley runs only on Rubies 2.3 or newer).
5
+ - Code restyling to please rubocop 0.7.40.
6
+ - [CHANGE] Class `ParseEntrySet`: minor code optimization
7
+ - [CHANGE] File `README.md` removed allusion to Ruby 2.0.x up to 2.2.x.
8
+ - [CHANGE] File `README.md` added Ruby 2.6.x up as supported version.
9
+
10
+
1
11
  ### 0.7.03 / 2019-07-21
2
12
  - Minor refactoring for parsing speed improvement.
3
13
  * [CHANGE] Replacing comparison with object_id by `equal?` method
4
14
  * [CHANGE] Method `ParseEntry#hash` added
5
15
  * [CHANGE] Class `ParseEntrySet` added new Hash attribute in order to speed up membership testing.
6
16
 
7
-
8
17
  ### 0.7.02 / 2019-01-13
9
18
  - Removed Ruby versions older than 2.3 in CI testing because of breaking changes by Bundler 2.0
10
19
  * [CHANGE] Files `Gemfile`, `.travis.yml`, `appveyor.yml` updated.
data/README.md CHANGED
@@ -50,13 +50,11 @@ application range such as:
50
50
 
51
51
 
52
52
  ### Compatibility
53
- Rley supports the following Ruby implementations:
54
- - MRI 2.0
55
- - MRI 2.1
56
- - MRI 2.2
53
+ Rley supports the following Ruby implementations:
57
54
  - MRI 2.3
58
55
  - MRI 2.4
59
- - MRI 2.5
56
+ - MRI 2.5
57
+ - MRI 2.6
60
58
  - JRuby 9.1+
61
59
 
62
60
  ---
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require_relative './lib/rley/constants'
3
5
 
@@ -2,16 +2,18 @@ version: '{build}'
2
2
  max_jobs: 5
3
3
  environment:
4
4
  matrix:
5
+ - Ruby_version: 26-x64
5
6
  - Ruby_version: 25-x64
6
7
  - Ruby_version: 24-x64
7
8
  - Ruby_version: 23-x64
9
+ - Ruby_version: 26
8
10
  - Ruby_version: 25
9
11
  - Ruby_version: 24
10
12
  - Ruby_version: 23
11
13
 
12
14
  # These are failing
13
- # - Ruby_version: 26
14
- # - Ruby_version: 26-x64
15
+ #
16
+ #
15
17
 
16
18
  install:
17
19
  - set PATH=C:\Ruby%Ruby_version%\bin;%PATH%
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # File: benchmark_pico_en.rb
2
4
  # Purpose: benchmark the parse speed
3
5
  require 'benchmark'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rley'
2
4
  require 'engtagger' # Load POS (Part-Of-Speech) tagger EngTagger
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'strscan'
2
4
  require 'rley' # Load Rley library
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Grammar for a simple subset of English language
2
4
  # It is called nano-English because it has a more elaborate
3
5
  # grammar than pico-English but remains still tiny compared to "real" English
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rley' # Load Rley library
2
4
  require 'strscan'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'optparse'
2
4
 
3
5
  # A Hash specialization that collects the command-line options
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'json_ast_nodes'
2
4
 
3
5
  # The purpose of a JSONASTBuilder is to build piece by piece an AST
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Classes that implement nodes of Abstract Syntax Trees (AST) representing
2
4
  # JSON parse results.
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'cli_options'
2
4
  require_relative 'json_lexer'
3
5
  require_relative 'json_minifier'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Grammar for JSON data representation
2
4
  require 'rley' # Load the gem
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # File: json_lexer.rb
2
4
  # Lexer for the JSON data format
3
5
  require 'rley' # Load the gem
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # File: json_minifier.rb
2
4
 
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'calc_ast_nodes'
2
4
 
3
5
  # The purpose of a CalcASTBuilder is to build piece by piece an AST
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Classes that implement nodes of Abstract Syntax Trees (AST) representing
2
4
  # calculator parse results.
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'calc_lexer'
2
4
  require_relative 'calc_ast_builder'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Grammar for simple arithmetical expressions
2
4
  require 'rley' # Load the gem
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # File: calc_lexer.rb
2
4
  # Lexer for a basic arithmetical expression parser
3
5
  require 'strscan'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rspec' # Use the RSpec framework
2
4
  require_relative '../calc_lexer'
3
5
  require_relative '../calc_grammar'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'calc_ast_nodes'
2
4
 
3
5
  # The purpose of a CalcASTBuilder is to build piece by piece an AST
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Classes that implement nodes of Abstract Syntax Trees (AST) representing
2
4
  # calculator parse results.
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'calc_lexer'
2
4
  require_relative 'calc_ast_builder'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Grammar for simple arithmetical expressions
2
4
  require 'rley' # Load the gem
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # File: calc_lexer.rb
2
4
  # Lexer for a basic arithmetical expression parser
3
5
  require 'strscan'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rspec' # Use the RSpec framework
2
4
  require_relative '../calc_lexer'
3
5
  require_relative '../calc_grammar'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Purpose: define a grammar with left-recursive rule
2
4
  require 'rley' # Load Rley library
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Purpose: define a grammar with right-recursive rule
2
4
  require 'rley' # Load Rley library
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # File: rley.rb
2
4
  # This file acts as a jumping-off point for loading dependencies expected
3
5
  # for a Rley client.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../syntax/grammar'
2
4
  require_relative 'grm_items_builder' # Use mix-in module
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Rley # This module is used as a namespace
2
4
  module Base # This module is used as a namespace
3
5
  # A dotted item is a parse state for a given production/grammar rule
@@ -38,7 +40,7 @@ module Rley # This module is used as a namespace
38
40
  def to_s()
39
41
  prefix = "#{production.lhs} => "
40
42
  text_values = production.rhs.map(&:to_s)
41
- if position < 0
43
+ if position.negative?
42
44
  text_values << '.'
43
45
  else
44
46
  text_values.insert(position, '.')
@@ -61,7 +63,7 @@ module Rley # This module is used as a namespace
61
63
  # A dotted item is called a reduce item if the dot is at the end.
62
64
  # @return [Boolean]
63
65
  def reduce_item?()
64
- return position < 0 # Either -1 or -2
66
+ return position.negative? # Either -1 or -2
65
67
  end
66
68
 
67
69
  # The non-terminal symbol that is on the left-side of the production
@@ -88,23 +90,26 @@ module Rley # This module is used as a namespace
88
90
  # nil is returned if the dot is at the end
89
91
  # @return [Syntax::GrmSymbol, NilClass]
90
92
  def next_symbol()
91
- return position < 0 ? nil : production.rhs[position]
93
+ return position.negative? ? nil : production.rhs[position]
92
94
  end
93
95
 
94
96
  # Calculate the position of the dot if were moved by
95
97
  # one step on the left.
96
98
  # @return [Integer]
97
99
  def prev_position()
98
- case position
99
- when -2, 0
100
- result = nil
101
- when -1
102
- result = production.rhs.size == 1 ? 0 : production.rhs.size - 1
103
- else
104
- result = position - 1
100
+ unless @k_prev_position
101
+ case position
102
+ when -2, 0
103
+ result = nil
104
+ when -1
105
+ result = production.rhs.size == 1 ? 0 : production.rhs.size - 1
106
+ else
107
+ result = position - 1
108
+ end
109
+ @k_prev_position = [result]
105
110
  end
106
111
 
107
- return result
112
+ @k_prev_position[0]
108
113
  end
109
114
 
110
115
  # Return true if this dotted item has a dot one place
@@ -126,7 +131,7 @@ module Rley # This module is used as a namespace
126
131
  # Return the given position after its validation.
127
132
  def valid_position(aPosition)
128
133
  rhs_size = production.rhs.size
129
- if aPosition < 0 || aPosition > rhs_size
134
+ if aPosition.negative? || aPosition > rhs_size
130
135
  raise StandardError, 'Out of bound index'
131
136
  end
132
137
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'dotted_item'
2
4
 
3
5
  module Rley # This module is used as a namespace
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # File: constants.rb
2
4
  # Purpose: definition of Rley constants.
3
5
 
4
6
  module Rley # Module used as a namespace
5
7
  # The version number of the gem.
6
- Version = '0.7.03'.freeze
8
+ Version = '0.7.04'
7
9
 
8
10
  # Brief description of the gem.
9
- Description = "Ruby implementation of the Earley's parsing algorithm".freeze
11
+ Description = "Ruby implementation of the Earley's parsing algorithm"
10
12
 
11
13
  # Constant Rley::RootDir contains the absolute path of Rley's
12
14
  # start directory. Note: it also ends with a slash character.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative './syntax/grammar_builder'
2
4
  require_relative './parser/gfg_earley_parser'
3
5
  require_relative './parse_tree_visitor'
@@ -15,7 +17,6 @@ module Rley # This module is used as a namespace
15
17
  :repr_builder,
16
18
  :diagnose
17
19
  ) do
18
-
19
20
  # Constructor with default initialization.
20
21
  def initialize()
21
22
  super()
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base_formatter'
2
4
 
3
5
 
@@ -100,7 +102,7 @@ module Rley # This module is used as a namespace
100
102
  def path_prefix()
101
103
  return '' if ranks.empty?
102
104
 
103
- prefix = ''
105
+ prefix = +''
104
106
  @ranks.each_with_index do |rank, i|
105
107
  next if i.zero?
106
108
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Rley # This module is used as a namespace
2
4
  # Namespace dedicated to parse tree formatters.
3
5
  module Formatter
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base_formatter'
2
4
 
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base_formatter'
2
4
 
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base_formatter'
2
4
 
3
5