sequitur 0.1.18 → 0.1.23

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,23 +1,29 @@
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:
12
+ - 2.6.3
13
+ - 2.5.5
14
+ - 2.4.6
15
+ - 2.3.8
3
16
  - ruby-head
4
- - jruby-head
5
- - 2.3.3
6
- - 2.2.6
7
- - 2.1.9
8
- - 2.0.0
9
- - jruby
10
-
17
+ - jruby-9.1.9.0
18
+ - jruby-head
19
+
11
20
  matrix:
12
21
  allow_failures:
13
- - rvm: jruby
14
22
  - rvm: ruby-head
15
23
  - rvm: jruby-head
16
24
 
17
- gemfile:
18
- - Gemfile
19
-
25
+
20
26
  # whitelist
21
- branches:
27
+ branches:
22
28
  only:
23
- - master
29
+ - master
data/CHANGELOG.md CHANGED
@@ -1,3 +1,36 @@
1
+ ## [0.1.23] - 2021-09-04
2
+ - Remove dependencies towards `coverall`, `simplecov`
3
+ - Code restyling to please rubocop 1.19.1
4
+
5
+ * [CHANGE] File 'sequitur.gemspec' Remove dependencies towards `coverall`, `simplecov`
6
+ * [CHANGE] File 'sequitur.gemspec' Ruby version must be 2.5+
7
+
8
+ ## [0.1.22] - 2019-08-18
9
+ - Code refactoring to use string frozen magic comments (as a consequence, sequitur runs only on Rubies 2.3 or newer).
10
+ - Code restyling to please rubocop 0.7.40.
11
+
12
+ * [CHANGE] Files `Gemfile`, `.travis.yml`, `appveyor.yml` updated.
13
+
14
+ ## 0.1.21 - 2019-01-13
15
+ - Removed Ruby versions older than 2.3 in CI testing because of breaking changes by Bundler 2.0
16
+ * [CHANGE] Files `Gemfile`, `.travis.yml`, `appveyor.yml` updated.
17
+
18
+ ### 0.1.20 / 2019-01-03
19
+ Maintenance release.
20
+ * [CHANGE] File `.travis.yml`: updated Ruby versions.
21
+ * [CHANGE] File `appveyor.yml` updated Ruby versions.
22
+ * [CHANGE] File 'Gemfile' Code re-styling to please Rubocop 0.62.0.
23
+ * [CHANGE] File `LICENSE.txt` Updated copyright years.
24
+
25
+ ### 0.1.19 / 2018-05-16
26
+ Maintenance release.
27
+ * [CHANGE] File `.travis.yml`: updated Ruby versions.
28
+ * [CHANGE] File `appveyor.yml` updated Ruby versions, updated for syntax changes.
29
+ * [CHANGE] File 'sequitur.gemspec' Updated versions in dependencies.
30
+ * [CHANGE] File 'Gemfile' Updated versions in dependencies.
31
+ * [CHANGE] File 'Gemfile' Code re-styling to please Rubocop 0.55.0.
32
+
33
+
1
34
  ### 0.1.18 / 2016-12-21
2
35
  * [NEW] Added AppVeyor CI to Github commits. AppVeyor allows to build and test commits on Windows servers.
3
36
  This is complementary to Travis CI which does Linux builds.
data/Gemfile CHANGED
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
  # Prevent Bundler to load the dependencies from our .gemspec file
3
5
 
4
-
5
6
  group :development do
6
7
  gem 'coveralls', '>= 0.7.0'
7
- gem 'rake', '>= 10.0.0'
8
- gem 'rspec', '>= 2.1.0'
8
+ gem 'rake', '>= 10.0.0'
9
+ gem 'rspec', '>= 3.0.0'
9
10
  gem 'simplecov', '>= 0.8.0'
10
11
  end
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014-2017 Dimitri Geshef
1
+ Copyright (c) 2014-2019 Dimitri Geshef
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -7,7 +7,6 @@ _Ruby gem implementing the Sequitur algorithm_
7
7
  [![Windows Build status](https://ci.appveyor.com/api/projects/status/nvi1be8mb0494dqw?svg=true)](https://ci.appveyor.com/project/famished-tiger/sequitur)
8
8
  [![Coverage Status](https://coveralls.io/repos/famished-tiger/Sequitur/badge.png?branch=master)](https://coveralls.io/r/famished-tiger/Sequitur)
9
9
  [![Gem Version](https://badge.fury.io/rb/sequitur.svg)](http://badge.fury.io/rb/sequitur)
10
- [![Dependency Status](https://gemnasium.com/famished-tiger/Sequitur.png)](https://gemnasium.com/famished-tiger/Sequitur)
11
10
  [![Inline docs](http://inch-ci.org/github/famished-tiger/Sequitur.svg?branch=master)](http://inch-ci.org/github/famished-tiger/Sequitur)
12
11
  [![Code Climate](https://codeclimate.com/github/famished-tiger/Sequitur.png)](https://codeclimate.com/github/famished-tiger/Sequitur)
13
12
  [![License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat)](https://github.com/famished-tiger/Sequitur/blob/master/LICENSE.txt)
@@ -248,4 +247,4 @@ More examples are available in the examples folder.
248
247
 
249
248
  Copyright
250
249
  ---------
251
- Copyright (c) 2014-2017, Dimitri Geshef. Sequitur is released under the MIT License see [LICENSE.txt](https://github.com/famished-tiger/Sequitur/blob/master/LICENSE.txt) for details.
250
+ Copyright (c) 2014-2018, Dimitri Geshef. Sequitur is released under the MIT License see [LICENSE.txt](https://github.com/famished-tiger/Sequitur/blob/master/LICENSE.txt) for details.
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require_relative './lib/sequitur/constants'
3
5
 
data/appveyor.yml CHANGED
@@ -1,20 +1,28 @@
1
1
  version: '{build}'
2
- max_jobs: 3
2
+ max_jobs: 5
3
3
  environment:
4
4
  matrix:
5
- - Ruby_version: 200
6
- - Ruby_version: 200-x64
7
- - Ruby_version: 21
8
- - Ruby_version: 21-x64
9
- - Ruby_version: 22
10
- - Ruby_version: 22-x64
11
- - Ruby_version: 23
5
+ - Ruby_version: 26-x64
6
+ - Ruby_version: 25-x64
7
+ - Ruby_version: 24-x64
12
8
  - Ruby_version: 23-x64
9
+ - Ruby_version: 26
10
+ - Ruby_version: 25
11
+ - Ruby_version: 24
12
+ - Ruby_version: 23
13
+
13
14
  install:
14
- - cmd: >-
15
- SET PATH=C:\Ruby%Ruby_version%\bin;%PATH%
15
+ - set PATH=C:\Ruby%Ruby_version%\bin;%PATH%
16
+ - gem update --system
17
+ - gem install bundler
18
+ - bundle install --retry=3 --clean --force
16
19
 
17
- bundle install --retry=3 --clean
18
20
  build: off
21
+
22
+ before_test:
23
+ - ruby -v
24
+ - gem -v
25
+ - bundle -v
26
+
19
27
  test_script:
20
- - cmd: bundle exec rake
28
+ - bundle exec rake
@@ -1,16 +1,18 @@
1
- require 'sequitur' # Load the Sequitur library
1
+ # frozen_string_literal: true
2
+
3
+ require 'sequitur' # Load the Sequitur library
2
4
 
3
5
  #
4
6
  # Purpose: show how to apply Sequitur on a stream of integer values
5
7
  #
6
- input_sequence = [1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5]
8
+ input_sequence = [1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5]
7
9
 
8
10
  # Generate the grammar from the sequence
9
11
  grammar = Sequitur.build_from(input_sequence)
10
12
 
11
13
 
12
14
  # Use a formatter to display the grammar rules on the console output
13
- formatter = Sequitur::Formatter::BaseText.new(STDOUT)
15
+ formatter = Sequitur::Formatter::BaseText.new($stdout)
14
16
 
15
17
  # Now render the rules
16
18
  formatter.render(grammar.visitor)
@@ -23,11 +25,10 @@ formatter.render(grammar.visitor)
23
25
 
24
26
  # Playing a bit with the API
25
27
  # Access last symbol from rhs of start production:
26
- last_symbol_p0 = grammar.start.rhs.symbols[-1]
27
- puts last_symbol_p0 # => 5
28
+ last_symbol_p0 = grammar.start.rhs.symbols[-1]
29
+ puts last_symbol_p0 # => 5
28
30
 
29
31
  # Access first symbol from rhs of P1 production:
30
32
  first_symbol_p1 = grammar.productions[1].rhs.symbols[0]
31
33
 
32
- puts first_symbol_p1 # => 1
33
-
34
+ puts first_symbol_p1 # => 1
data/examples/porridge.rb CHANGED
@@ -1,9 +1,9 @@
1
- require 'sequitur' # Load the Sequitur library
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'sequitur' # Load the Sequitur library
3
4
 
4
5
  # Purpose: demo to show that sequitur gem works on example from sequitur.info website
5
- input_sequence =
6
- input = <<-SNIPPET
6
+ input_sequence = <<-SNIPPET
7
7
  pease porridge hot,
8
8
  pease porridge cold,
9
9
  pease porridge in the pot,
@@ -19,9 +19,9 @@ grammar = Sequitur.build_from(input_sequence)
19
19
 
20
20
  # To display the grammar rules on the console output
21
21
  # We use a formatter
22
- formatter = Sequitur::Formatter::BaseText.new(STDOUT)
22
+ formatter = Sequitur::Formatter::BaseText.new($stdout)
23
23
 
24
- # Now render the rules.
24
+ # Now render the rules.
25
25
  formatter.render(grammar.visitor)
26
26
 
27
27
  # Rendered output is:
@@ -38,4 +38,4 @@ formatter.render(grammar.visitor)
38
38
  # P9 : s o m P1 l i k P1 i t .
39
39
  # P10 : c P7.
40
40
  # P11 : P5 P9.
41
- # P12 : P6 t h P4 t P5 n P6 P1 d a y s P7 .
41
+ # P12 : P6 t h P4 t P5 n P6 P1 d a y s P7 .
@@ -1,8 +1,9 @@
1
- require 'sequitur' # Load the Sequitur library
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'sequitur' # Load the Sequitur library
3
4
 
4
5
  # Purpose: show how to apply Sequitur on a stream of single characters
5
- input_sequence = 'ababcabcdabcde' # Let's analyze this string
6
+ input_sequence = 'ababcabcdabcde' # Let's analyze this string
6
7
 
7
8
  # The SEQUITUR algorithm will detect the repeated 'ab' pattern
8
9
  # and will generate a context-free grammar that represents the input string
@@ -10,13 +11,13 @@ grammar = Sequitur.build_from(input_sequence)
10
11
 
11
12
  # To display the grammar rules on the console output
12
13
  # We use a formatter
13
- formatter = Sequitur::Formatter::BaseText.new(STDOUT)
14
+ formatter = Sequitur::Formatter::BaseText.new($stdout)
14
15
 
15
16
  # Now render the rules. Each rule is displayed with the format:
16
17
  # rule_id : a_sequence_grammar_symbols.
17
- # Where:
18
+ # Where:
18
19
  # - rule_id is either 'start' or a name like 'Pxxxx' (xxxx is a sequential number)
19
- # - a grammar symbol is either a terminal symbol
20
+ # - a grammar symbol is either a terminal symbol
20
21
  # (i.e. a character from the input) or a rule id
21
22
  formatter.render(grammar.visitor)
22
23
 
@@ -24,4 +25,4 @@ formatter.render(grammar.visitor)
24
25
  # start : P1 P2 P3 P3 e.
25
26
  # P1 : a b.
26
27
  # P2 : P1 c.
27
- # P3 : P2 d.
28
+ # P3 : P2 d.
@@ -1,21 +1,21 @@
1
- require 'sequitur' # Load the Sequitur library
1
+ # frozen_string_literal: true
2
+
3
+ require 'sequitur' # Load the Sequitur library
2
4
 
3
5
  #
4
6
  # Purpose: show how to apply Sequitur on a stream of Symbol values
5
7
  #
6
- input_sequence = [
7
- :aa, :bb, :aa, :bb,
8
- :cc, :aa, :bb, :cc,
9
- :dd, :aa, :bb, :cc,
10
- :dd, :ee
8
+ input_sequence = %i[
9
+ aa bb aa bb cc
10
+ aa bb cc dd aa
11
+ bb cc dd ee
11
12
  ]
12
13
 
13
14
  # Generate the grammar from the sequence
14
15
  grammar = Sequitur.build_from(input_sequence)
15
16
 
16
-
17
17
  # Use a formatter to display the grammar rules on the console output
18
- formatter = Sequitur::Formatter::BaseText.new(STDOUT)
18
+ formatter = Sequitur::Formatter::BaseText.new($stdout)
19
19
 
20
20
  # Now render the rules
21
21
  formatter.render(grammar.visitor)
@@ -25,4 +25,3 @@ formatter.render(grammar.visitor)
25
25
  # P1 : aa bb.
26
26
  # P2 : P1 cc.
27
27
  # P3 : P2 dd.
28
-
@@ -1,4 +1,6 @@
1
- require 'sequitur' # Load the Sequitur library
1
+ # frozen_string_literal: true
2
+
3
+ require 'sequitur' # Load the Sequitur library
2
4
 
3
5
  #
4
6
  # Purpose: show how to apply Sequitur on a stream of text words
@@ -18,7 +20,7 @@ grammar = Sequitur.build_from(input_sequence)
18
20
 
19
21
 
20
22
  # Use a formatter to display the grammar rules on the console output
21
- formatter = Sequitur::Formatter::BaseText.new(STDOUT)
23
+ formatter = Sequitur::Formatter::BaseText.new($stdout)
22
24
 
23
25
  # Now render the rules
24
26
  formatter.render(grammar.visitor)
@@ -27,4 +29,3 @@ formatter.render(grammar.visitor)
27
29
  # start : P2 6 Error illegal P1 20 P2 9.
28
30
  # P1 : character at position.
29
31
  # P2 : Error unknown P1.
30
-
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # File: constants.rb
2
4
  # Purpose: definition of Sequitur constants.
3
5
 
4
6
  module Sequitur # Module used as a namespace
5
7
  # The version number of the gem.
6
- Version = '0.1.18'.freeze
8
+ Version = '0.1.23'
7
9
 
8
10
  # Brief description of the gem.
9
- Description = 'Ruby implementation of the Sequitur algorithm'.freeze
11
+ Description = 'Ruby implementation of the Sequitur algorithm'
10
12
 
11
13
  # Constant Sequitur::RootDir contains the absolute path of Sequitur's
12
14
  # start directory. Note: it also ends with a slash character.
@@ -18,7 +20,7 @@ module Sequitur # Module used as a namespace
18
20
  RootDir = begin
19
21
  require 'pathname' # Load Pathname class from standard library
20
22
  startdir = Pathname(__FILE__).dirname.parent.parent.expand_path
21
- startdir.to_s + '/' # Append trailing slash character to it
23
+ "#{startdir}/" # Append trailing slash character to it
22
24
  end
23
25
  end
24
26
  end # module
@@ -1,49 +1,51 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # File: digram.rb
2
4
 
3
5
  module Sequitur # Module for classes implementing the Sequitur algorithm
4
- # In linguistics, a digram is a sequence of two letters.
5
- # In Sequitur, a digram is a sequence of two consecutive symbols that
6
- # appear in a production rule. Each symbol in a digram
7
- # can be a terminal or not.
8
- class Digram
9
- # The sequence of two consecutive grammar symbols.
10
- # The two symbols should respond to the :hash message.
11
- attr_reader(:symbols)
12
-
13
- # An unique hash key of the digram
14
- attr_reader(:key)
15
-
16
- # The production in which the digram occurs
17
- attr_reader(:production)
18
-
19
- # Constructor.
20
- # A digram represents a sequence of two symbols
21
- # (that appears in a rhs of a production).
22
- # Terminal symbols must respond to the :hash message.
23
- # @param symbol1 [StringOrSymbol] First element of the digram
24
- # @param symbol2 [StringOrSymbol] Second element of the digram
25
- # @param aProduction [Production] Production in which the RHS
26
- # the sequence symbol1 symbol2 appears.
27
- def initialize(symbol1, symbol2, aProduction)
28
- @symbols = [symbol1, symbol2]
29
- @key = symbol1.hash.to_s(16) + ':' + symbol2.hash.to_s(16)
30
- @production = aProduction
31
- end
32
-
33
- # Equality testing.
34
- # true iff keys of both digrams are equal, false otherwise
35
- # @param other [Digram] another to compare with
36
- # @return [true/false]
37
- def ==(other)
38
- return key == other.key
39
- end
40
-
41
- # Does the digram consists of twice the same symbols?
42
- # @return [true/false] true when symbols.first == symbols.last
43
- def repeating?()
44
- return symbols[0] == symbols[1]
45
- end
46
- end # class
6
+ # In linguistics, a digram is a sequence of two letters.
7
+ # In Sequitur, a digram is a sequence of two consecutive symbols that
8
+ # appear in a production rule. Each symbol in a digram
9
+ # can be a terminal or not.
10
+ class Digram
11
+ # The sequence of two consecutive grammar symbols.
12
+ # The two symbols should respond to the :hash message.
13
+ attr_reader(:symbols)
14
+
15
+ # An unique hash key of the digram
16
+ attr_reader(:key)
17
+
18
+ # The production in which the digram occurs
19
+ attr_reader(:production)
20
+
21
+ # Constructor.
22
+ # A digram represents a sequence of two symbols
23
+ # (that appears in a rhs of a production).
24
+ # Terminal symbols must respond to the :hash message.
25
+ # @param symbol1 [StringOrSymbol] First element of the digram
26
+ # @param symbol2 [StringOrSymbol] Second element of the digram
27
+ # @param aProduction [Production] Production in which the RHS
28
+ # the sequence symbol1 symbol2 appears.
29
+ def initialize(symbol1, symbol2, aProduction)
30
+ @symbols = [symbol1, symbol2]
31
+ @key = "#{symbol1.hash.to_s(16)}:#{symbol2.hash.to_s(16)}"
32
+ @production = aProduction
33
+ end
34
+
35
+ # Equality testing.
36
+ # true iff keys of both digrams are equal, false otherwise
37
+ # @param other [Digram] another to compare with
38
+ # @return [true/false]
39
+ def ==(other)
40
+ return key == other.key
41
+ end
42
+
43
+ # Does the digram consists of twice the same symbols?
44
+ # @return [true/false] true when symbols.first == symbols.last
45
+ def repeating?
46
+ return symbols[0] == symbols[1]
47
+ end
48
+ end # class
47
49
  end # module
48
50
 
49
51
  # End of file