automata 0.0.5 → 0.0.6

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.
File without changes
data/lib/automata/nfa.rb CHANGED
@@ -22,18 +22,16 @@ module Automata
22
22
  #
23
23
  def accepts?(string)
24
24
  heads = [@start]
25
+
26
+ #--
27
+ # Move any initial e-transitions
28
+ if has_transition?(@start, '&')
29
+ transition(@start, '&').each { |h| heads << h }
30
+ end
31
+
25
32
  string.each_char do |symbol|
26
33
  newHeads, eTrans = [], []
27
-
28
- #--
29
- # Move any e-transitions
30
- heads.each do |head|
31
- if has_transition?(head, '&')
32
- transition(head, '&').each { |t| eTrans << t }
33
- end
34
- end
35
- eTrans.each { |h| heads << h }
36
-
34
+
37
35
  heads.each do |head|
38
36
  #--
39
37
  # Check if head can transition read symbol
@@ -42,6 +40,16 @@ module Automata
42
40
  transition(head, symbol).each { |t| newHeads << t }
43
41
  end
44
42
  end
43
+
44
+ #--
45
+ # Move any e-transitions
46
+ newHeads.each do |head|
47
+ if has_transition?(head, '&')
48
+ transition(head, '&').each { |t| eTrans << t }
49
+ end
50
+ end
51
+ eTrans.each { |t| newHeads << t }
52
+
45
53
  heads = newHeads
46
54
  break if heads.empty?
47
55
  end
@@ -1,3 +1,3 @@
1
1
  module Automata
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/spec/nfa_spec.rb CHANGED
@@ -2,37 +2,40 @@ require 'spec_helper'
2
2
 
3
3
  describe Automata::NFA do
4
4
 
5
+ ##
6
+ # NFA with e-transitions
7
+ #
5
8
  context "Initializing from a valid file" do
6
9
  before do
7
- @nfa = Automata::NFA.new(file: 'examples/nfa_sample.yml')
10
+ @nfa = Automata::NFA.new(file: 'examples/nfa_2.yml')
8
11
  end
9
12
 
10
- it "should accept 'a'" do
11
- @nfa.accepts?('a').should == true
13
+ it "should accept '0'" do
14
+ @nfa.accepts?('0').should == true
12
15
  end
13
16
 
14
- it "should accept 'aa'" do
15
- @nfa.accepts?('aa').should == true
17
+ it "should accept '1'" do
18
+ @nfa.accepts?('1').should == true
16
19
  end
17
20
 
18
21
  it "should accept the empty string" do
19
22
  @nfa.accepts?('').should == true
20
23
  end
21
24
 
22
- it "should not accept 'b'" do
23
- @nfa.accepts?('b').should == false
25
+ it "should not accept '01'" do
26
+ @nfa.accepts?('01').should == false
24
27
  end
25
28
 
26
- it "should accept 'ab'" do
27
- @nfa.accepts?('ab').should == true
29
+ it "should accept '10'" do
30
+ @nfa.accepts?('10').should == true
28
31
  end
29
32
 
30
- it "should accept 'abab'" do
31
- @nfa.accepts?('abab').should == true
33
+ it "should accept '11'" do
34
+ @nfa.accepts?('11').should == true
32
35
  end
33
36
 
34
- it "should accept 'aab'" do
35
- @nfa.accepts?('aab').should == false
37
+ it "should accept '110'" do
38
+ @nfa.accepts?('110').should == true
36
39
  end
37
40
  end
38
41
 
@@ -46,6 +49,9 @@ describe Automata::NFA do
46
49
  end
47
50
  end
48
51
 
52
+ ##
53
+ # NFA without e-transitions
54
+ #
49
55
  context "Initializing a NFA by params" do
50
56
  before do
51
57
  states = ['q1','q2','q3','q4']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: automata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-04-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70101266746740 !ruby/object:Gem::Requirement
16
+ requirement: &70295152631100 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70101266746740
24
+ version_requirements: *70295152631100
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70101266745440 !ruby/object:Gem::Requirement
27
+ requirement: &70295152630000 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 2.9.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70101266745440
35
+ version_requirements: *70295152630000
36
36
  description: Create and simulate automaton.
37
37
  email:
38
38
  - jico@baligod.com
@@ -48,8 +48,8 @@ files:
48
48
  - Rakefile
49
49
  - automata.gemspec
50
50
  - examples/dfa_sample.yml
51
+ - examples/nfa_1.yml
51
52
  - examples/nfa_2.yml
52
- - examples/nfa_sample.yml
53
53
  - lib/automata.rb
54
54
  - lib/automata/dfa.rb
55
55
  - lib/automata/nfa.rb
@@ -72,7 +72,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
72
72
  version: '0'
73
73
  segments:
74
74
  - 0
75
- hash: -2023160774653295454
75
+ hash: 830920834745777469
76
76
  required_rubygems_version: !ruby/object:Gem::Requirement
77
77
  none: false
78
78
  requirements:
@@ -81,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
81
  version: '0'
82
82
  segments:
83
83
  - 0
84
- hash: -2023160774653295454
84
+ hash: 830920834745777469
85
85
  requirements: []
86
86
  rubyforge_project:
87
87
  rubygems_version: 1.8.17