dfa.rb

Path: dfa.rb
Last Update: Mon Jul 30 22:01:43 -0600 2007

State machines made simple. Here is an example. Read more in the DFA class documentation.

      d = DFA.new('A', ['A','C'])
      d.transition do |s,a|
        ss = case [s, a]
             when ['A', 0]: 'B'
             when ['A', 1]: 'C'
             when ['B', 0]: 'B'
             when ['B', 1]: 'C'
             when ['C', 0]: 'D'
             when ['C', 1]: 'C'
             when ['D', 0]: 'A'
             when ['D', 1]: 'C'
             else raise "Invalid transition (#{s}, #{a})"
             end
        print ss
        ss
      end

      ary = [0,0,0,1,1,1,0,1,1,1,0,0].map do |a|
        d.eat a
      end
      puts
      p ary

[Validate]