rley 0.7.03 → 0.7.04

Sign up to get free protection for your applications and to get access to all the features.
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