sequitur 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzQ3ZTE3YTkyZTkyMmE3MzYzZmY1YTA0ZTdhZGExZDE5NjM1NzkxOQ==
4
+ OGM4MWZiN2YzOTRmODhhNDlkNGIzMGRiOWYzZjU3MDY5ODc2YWUwMg==
5
5
  data.tar.gz: !binary |-
6
- ZDMxZjI4ODQzNWFmOTU2ZmI1NjI0ZmJmNmM2Yjc4NjFlYmI2ZGNjZQ==
6
+ ZGJmYzVjMzlkOTE0ZGRhZGI3ZWRjY2IyMDk3ZGY3ZDY1YjIyY2YyNg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YjVhYmFkOTgwYjVhNmFmNmNhYzRmNzFiZjYwNDI1ZmNiY2M4MzdlYTkxZmY2
10
- MTA1NDI4NWQ4N2IxMTkxNTU5NWNiZTk4ZDYxYzcyODQ4YjExYWU4MzJhZmI5
11
- OTM0YTBiNDUxNzNkZDQwNTVmY2Y5NzhlYTc5MjJkNGYxMjRlYWU=
9
+ Nzk1ZDRmNjBkN2FmODQ4Yjk5ODNiYTk3NDA1YTkxYmZlYjMyOGI0MDhkZTM5
10
+ NTg1ZWQyOGIxYzc2NjE4ODg0ODY1MDJiMzJhNDBmNGJlMjdiNzAwMTI3ZmZl
11
+ MDkzMGFjYWNhNTU4ZWUwYTBjYjdlMjJjNjc2MmY5ZTk5MTUzNTQ=
12
12
  data.tar.gz: !binary |-
13
- YWQ3MDZkZWJhN2NjZTZkMzhmYjZiMGMwYjk5MjIyNzg2YWMzMGIwMjU1ZTY5
14
- MzkwOGJiNDI2ZjRhZjk2YjZhN2Q2NTJiYzA3OGMxNDNiMmNmYjBjNWM1MDZm
15
- M2FjYzVlY2M2MWM1Y2I1Y2UyMzgxMjBiZWNiZWI4NzFlOGRjOWM=
13
+ MWQ2OGU3OWIyMzQ5MWVkM2IxZGFhYzhmNDM5MGRkMzA5MjlhNzUxYTViYWMz
14
+ MzIzY2MxYjk1OTBmMTNkNmM4NDM0NWI4YzJlZDk5YjU2ZjU4YmM2ZWYzMjkx
15
+ MmNkYWE5MjU3NmI3MTE1OTIwYWZmOWI1ODRlMmQ4ZmZjNjkwY2E=
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ### 0.0.11 / 2014-08-24
2
+ * [FIX] `SequiturGrammar#check_unicity`: an exception was raised when it shouldn't. Added example in spec file.
3
+ * [CHANGE] `sequitur.rb` : Added the convenience Sequitur::build_from method.
4
+
1
5
  ### 0.0.10 / 2014-08-24
2
6
  * [CHANGE] `README.md`: Added hyperlinks about Sequitur algorithm.
3
7
 
data/README.md CHANGED
@@ -15,7 +15,29 @@ Sequitur is an algorithm that generates a set of rules representing a sequence o
15
15
  It detects repeated token patterns and can represent them in a compact way.
16
16
 
17
17
 
18
- ### TODO: Add documentation ###
18
+ ## Synopsis
19
+
20
+ ```ruby
21
+
22
+ require 'sequitur' # Load the Sequitur library
23
+
24
+ input_sequence = 'abcabdab'
25
+
26
+ # The SEQUITUR algorithm will detect the repeated 'ab' pattern
27
+ # and will generate a context-free grammar that represents the input string
28
+ grammar = Sequitur.build_from(input_sequence)
29
+
30
+ # Display the grammar rules
31
+ # Each rule is displayed with the format:
32
+ # rule_id : a_sequence_grammar_symbols
33
+ # Where:
34
+ # - rule_id is the object id of a rule (in decimal)
35
+ # - a grammar symbol is either a terminal symbol
36
+ # (i.e. a character from the input) or the id of a production
37
+ puts grammar.to_string
38
+ ```
39
+
40
+ ### TODO: Add more documentation ###
19
41
 
20
42
 
21
43
  Copyright
data/lib/sequitur.rb CHANGED
@@ -5,4 +5,24 @@
5
5
  require_relative './sequitur/constants'
6
6
  require_relative './sequitur/sequitur_grammar'
7
7
 
8
+
9
+ module Sequitur
10
+
11
+ # Convenience method. Builds a Sequitur-generated grammar based
12
+ # on the sequence of input tokens
13
+ # @param tokens [StringOrEnumerator] The input sequence of input tokens.
14
+ # Can be a sequence of characters (i.e. a String) or an Enumerator
15
+ # Tokens returned by enumerator should respond to the :hash message.
16
+ # Returns a SequiturGrammar instance.
17
+ def self.build_from(tokens)
18
+ input_sequence = case tokens
19
+ when String then tokens.chars
20
+ when Enumerator then tokens
21
+ else tokens.to_enum
22
+ end
23
+
24
+ return SequiturGrammar.new(input_sequence)
25
+ end
26
+ end # module
27
+
8
28
  # End of file
@@ -3,7 +3,7 @@
3
3
 
4
4
  module Sequitur # Module used as a namespace
5
5
  # The version number of the gem.
6
- Version = '0.0.10'
6
+ Version = '0.0.11'
7
7
 
8
8
  # Brief description of the gem.
9
9
  Description = 'Ruby implementation of the Sequitur algorithm'
@@ -41,7 +41,7 @@ class SequiturGrammar < DynamicGrammar
41
41
  msg << "\nOnce in production #{colliding.production_id}"
42
42
  msg << "\nSecond in production #{a_prod.object_id}"
43
43
  msg << "\n#{to_string}"
44
- fail StandardError, msg
44
+ fail StandardError, msg unless colliding.production_id == a_prod.object_id
45
45
  else
46
46
  all_digrams[a_digram.key] = a_digram
47
47
  end
@@ -74,6 +74,13 @@ describe SequiturGrammar do
74
74
  expect(p_a.rhs).to eq([:a, :b, :c])
75
75
  expect(instance.root.rhs).to eq([p_a, p_a])
76
76
  end
77
+
78
+ it 'should cope with a pattern that caused an exception' do
79
+ input = 'aaac' # This sequence raised an exception
80
+
81
+ # Creation
82
+ expect {SequiturGrammar.new(input.chars)}.not_to raise_error
83
+ end
77
84
 
78
85
 
79
86
  it 'should cope with the example from presentation' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequitur
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitri Geshef
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-25 00:00:00.000000000 Z
11
+ date: 2014-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake