rley 0.7.02 → 0.7.03

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 83b3751addeb91efb6316ca04e2bd24c3dbec7b8
4
- data.tar.gz: 8fb879d8e65eae6638611ac78381a54cfa76ddf6
2
+ SHA256:
3
+ metadata.gz: a63420880d532cd1ad4bcef4ff01cbe51de63734f5e30ecc8ffc34338079a3da
4
+ data.tar.gz: 0712f56c42b467cbe571c069e5c856817a856c73eb3608531517b28f61f9682a
5
5
  SHA512:
6
- metadata.gz: 21ec0cbdd4fb79c6a7f45c834b9f4c1a36c7b9054d2b0c39a5c4f8bd3cf2bfef4387a501d7fc44194772191cf66d287ebe0086b558ef00474d4976a7bf0737f7
7
- data.tar.gz: deb719ebd4f82db564ac42f5f40b23c5d5908bc44b8fd26788039d53493e548fa611bdfa1256bfb2ff7c0aeedb77cd1db26d88f9942b0bf95d5d86aaa8323827
6
+ metadata.gz: b1d6824b1e67e3a6b12f262b6e8badc8036fb09cd503de1866834400d23fa815120d71cf5474bd1fef61249836f319f121cc3cf61aff1cef001f7f122d0877e4
7
+ data.tar.gz: '081b167f0616abc747e9e90fbf24025e57d1442cd34699e5afd55224042264c4c15f3bcdac1e29b9760f2deba38f113f26da4d119886fc57f099395bd88407a3'
@@ -1,4 +1,13 @@
1
1
  language: ruby
2
+ dist: trusty
3
+
4
+ before_install:
5
+ - gem update --system
6
+ - gem install bundler
7
+
8
+ script:
9
+ - bundle exec rake
10
+
2
11
  rvm:
3
12
  - 2.6.0
4
13
  - 2.5.3
@@ -7,18 +16,13 @@ rvm:
7
16
  - ruby-head
8
17
  - jruby-9.1.9.0
9
18
  - jruby-head
19
+
10
20
  matrix:
11
21
  allow_failures:
12
22
  - rvm: 2.6.0
13
23
  - rvm: ruby-head
14
24
  - rvm: jruby-head
15
25
 
16
- before_install:
17
- - gem update --system
18
- - gem install bundler
19
-
20
- gemfile:
21
- - Gemfile
22
26
 
23
27
  # whitelist
24
28
  branches:
@@ -1,3 +1,10 @@
1
+ ### 0.7.03 / 2019-07-21
2
+ - Minor refactoring for parsing speed improvement.
3
+ * [CHANGE] Replacing comparison with object_id by `equal?` method
4
+ * [CHANGE] Method `ParseEntry#hash` added
5
+ * [CHANGE] Class `ParseEntrySet` added new Hash attribute in order to speed up membership testing.
6
+
7
+
1
8
  ### 0.7.02 / 2019-01-13
2
9
  - Removed Ruby versions older than 2.3 in CI testing because of breaking changes by Bundler 2.0
3
10
  * [CHANGE] Files `Gemfile`, `.travis.yml`, `appveyor.yml` updated.
@@ -3,7 +3,7 @@
3
3
 
4
4
  module Rley # Module used as a namespace
5
5
  # The version number of the gem.
6
- Version = '0.7.02'.freeze
6
+ Version = '0.7.03'.freeze
7
7
 
8
8
  # Brief description of the gem.
9
9
  Description = "Ruby implementation of the Earley's parsing algorithm".freeze
@@ -28,7 +28,7 @@ module Rley # This module is used as a namespace
28
28
  # @param other [TokenRange, Range, Hash, Array<Integer>]
29
29
  # @return [Boolean]
30
30
  def ==(other)
31
- return true if object_id == other.object_id
31
+ return true if equal?(other)
32
32
 
33
33
  case other
34
34
  when Hash
@@ -48,11 +48,16 @@ module Rley # This module is used as a namespace
48
48
 
49
49
  # Equality comparison. A parse entry behaves as a value object.
50
50
  def ==(other)
51
- return true if object_id == other.object_id
51
+ return true if equal? other
52
52
 
53
53
  result = (vertex == other.vertex) && (origin == other.origin)
54
54
  return result
55
55
  end
56
+
57
+ def hash
58
+ @my_hash ||= "#{vertex.object_id}-#{origin}".hash
59
+ @my_hash
60
+ end
56
61
 
57
62
  # Returns true iff the vertex is a start vertex (i.e. of the form: .X)
58
63
  def start_entry?()
@@ -1,4 +1,5 @@
1
1
  require 'forwardable' # For the Delegation pattern
2
+ require 'set'
2
3
 
3
4
  require_relative '../syntax/terminal'
4
5
  require_relative '../syntax/non_terminal'
@@ -11,12 +12,16 @@ module Rley # This module is used as a namespace
11
12
  extend Forwardable
12
13
  def_delegators :entries, :empty?, :size, :first, :last, :pop, :each
13
14
 
14
- # @return [Array<ParseEntry>] The set of parse entries
15
+ # @return [Array<ParseEntry>] The array of parse entries
15
16
  attr_reader :entries
17
+
18
+ # @return [Hash] A Hash with pairs { hash of ParseEntry => ParseEntry }
19
+ attr_reader :membership
16
20
 
17
21
  # Constructor.
18
22
  def initialize()
19
23
  @entries = []
24
+ @membership = {}
20
25
  @entries4term = Hash.new { |hash, key| hash[key] = [] }
21
26
  @entries4n_term = Hash.new { |hash, key| hash[key] = [] }
22
27
  end
@@ -55,11 +60,14 @@ module Rley # This module is used as a namespace
55
60
  # @return [ParseEntry] the passed parse entry if it pushes it
56
61
  def push_entry(anEntry)
57
62
  # TODO: control overhead next line
58
- match = entries.find { |entry| entry == anEntry }
63
+ #match = entries.find { |entry| entry == anEntry }
64
+ entry_key = anEntry.hash
65
+ match = membership.fetch(entry_key, false)
59
66
  if match
60
67
  result = match
61
68
  else
62
69
  @entries << anEntry
70
+ membership[entry_key] = anEntry
63
71
  expecting = anEntry.next_symbol
64
72
  add_lookup4symbol(anEntry) if expecting
65
73
  result = anEntry
@@ -14,7 +14,7 @@ module Rley # This module is used as a namespace
14
14
 
15
15
  # Equality comparison. A parse state behaves as a value object.
16
16
  def ==(other)
17
- return true if object_id == other.object_id
17
+ return true if equal?(other)
18
18
 
19
19
  result = (dotted_rule == other.dotted_rule) &&
20
20
  (origin == other.origin)
@@ -21,7 +21,7 @@ module Rley # This module is used as a namespace
21
21
  # @param other [SymbolSeq|Array]
22
22
  # @return [Boolean]
23
23
  def ==(other)
24
- return true if other.object_id == object_id
24
+ return true if equal?(other)
25
25
 
26
26
  case other
27
27
  when SymbolSeq then result = other.members == members
@@ -48,7 +48,7 @@ module Rley # Open this namespace to avoid module qualifier prefixes
48
48
 
49
49
  context 'Provided services:' do
50
50
  it 'should accept the addition of an entry' do
51
- # Case: first time e,try addition
51
+ # Case: first time entry addition
52
52
  expect(subject.push_entry(entry1)).to eq(entry1)
53
53
  expect(subject).not_to be_empty
54
54
 
metadata CHANGED
@@ -1,115 +1,115 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rley
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.02
4
+ version: 0.7.03
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitri Geshef
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-13 00:00:00.000000000 Z
11
+ date: 2019-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coveralls
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.7'
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
19
  version: 0.7.0
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '0.7'
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '0.7'
30
27
  - - ">="
31
28
  - !ruby/object:Gem::Version
32
29
  version: 0.7.0
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.7'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rake
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '10.0'
40
37
  - - ">="
41
38
  - !ruby/object:Gem::Version
42
39
  version: 10.0.0
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '10.0'
43
43
  type: :development
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '10.0'
50
47
  - - ">="
51
48
  - !ruby/object:Gem::Version
52
49
  version: 10.0.0
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '10.0'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: rspec
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '3.5'
60
57
  - - ">="
61
58
  - !ruby/object:Gem::Version
62
59
  version: 3.5.0
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '3.5'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '3.5'
70
67
  - - ">="
71
68
  - !ruby/object:Gem::Version
72
69
  version: 3.5.0
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '3.5'
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: rubygems
75
75
  requirement: !ruby/object:Gem::Requirement
76
76
  requirements:
77
- - - "~>"
78
- - !ruby/object:Gem::Version
79
- version: '2.0'
80
77
  - - ">="
81
78
  - !ruby/object:Gem::Version
82
79
  version: 2.0.0
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.0'
83
83
  type: :development
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '2.0'
90
87
  - - ">="
91
88
  - !ruby/object:Gem::Version
92
89
  version: 2.0.0
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: '2.0'
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: simplecov
95
95
  requirement: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - "~>"
98
- - !ruby/object:Gem::Version
99
- version: '0.1'
100
97
  - - ">="
101
98
  - !ruby/object:Gem::Version
102
99
  version: 0.1.0
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.1'
103
103
  type: :development
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '0.1'
110
107
  - - ">="
111
108
  - !ruby/object:Gem::Version
112
109
  version: 0.1.0
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: '0.1'
113
113
  description: A general parser using the Earley algorithm.
114
114
  email: famished.tiger@yahoo.com
115
115
  executables: []
@@ -315,8 +315,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
315
315
  - !ruby/object:Gem::Version
316
316
  version: '0'
317
317
  requirements: []
318
- rubyforge_project:
319
- rubygems_version: 2.6.13
318
+ rubygems_version: 3.0.2
320
319
  signing_key:
321
320
  specification_version: 4
322
321
  summary: Ruby implementation of the Earley's parsing algorithm