lib/automata/pda.rb
def feed(input)
      heads, @stack, accept = [@start], [], false
      
      # Move any initial e-transitions
      eTrans = transition(@start, '&') if has_transition?(@start, '&')
      heads += eTrans

      puts "initial heads: #{heads}"
      puts "initial stack: #{@stack}"

      # Iterate through each symbol of input string
      input.each_char do |symbol|
        newHeads = []
        
        puts "Reading symbol: #{symbol}"

        heads.each do |head|
          puts "At head #{head}"

          # Check if head can transition read symbol
          # Head dies if no transition for symbol
          if has_transition?(head, symbol)
            puts "Head #{head} transitions #{symbol}"
            puts "stack: #{@stack}"
            transition(head, symbol).each { |t| newHeads << t }
            puts "heads: #{newHeads}"
            puts "stack: #{@stack}"
          end

        end
        
        heads = newHeads
        break if heads.empty?
      end

      puts "Loop finished"
      
      accept = includes_accept_state? heads

      puts "heads: #{heads}"
      puts "stack: #{stack}"
      puts "accept: #{accept}"

      resp = {
        input: input,
        accept: accept,
        heads: heads,
        stack: stack
      }
    end
def feed(input)
      heads, @stack, accept = [@start], [], false
      
      # Move any initial e-transitions
      eTrans = transition(@start, '&') if has_transition?(@start, '&')
      heads += eTrans

      puts "initial heads: #{heads}"
      puts "initial stack: #{@stack}"

      # Iterate through each symbol of input string
      input.each_char do |symbol|
        newHeads = []
        
        puts "Reading symbol: #{symbol}"

        heads.each do |head|
          puts "At head #{head}"

          # Check if head can transition read symbol
          # Head dies if no transition for symbol
          if has_transition?(head, symbol)
            puts "Head #{head} transitions #{symbol}"
            puts "stack: #{@stack}"
            transition(head, symbol).each { |t| newHeads << t }
            puts "heads: #{newHeads}"
            puts "stack: #{@stack}"
          end

        end
        
        heads = newHeads
        break if heads.empty?
      end

      puts "Loop finished"
      
      accept = includes_accept_state? heads

      puts "heads: #{heads}"
      puts "stack: #{stack}"
      puts "accept: #{accept}"

      resp = {
        input: input,
        accept: accept,
        heads: heads,
        stack: stack
      }
    end
def feed ( input ) heads , @stack , accept = [ @start ] , [ ] , false # Move any initial e-transitions eTrans = transition ( @start , '&' ) if has_transition? ( @start , '&' ) heads += eTrans puts "initial heads: #{heads}" puts "initial stack: #{@stack}" # Iterate through each symbol of input string input . each_char do | symbol | newHeads = [ ] puts "Reading symbol: #{symbol}" heads . each do | head | puts "At head #{head}" # Check if head can transition read symbol # Head dies if no transition for symbol if has_transition? ( head , symbol ) puts "Head #{head} transitions #{symbol}" puts "stack: #{@stack}" transition ( head , symbol ) . each { | t | newHeads << t } puts "heads: #{newHeads}" puts "stack: #{@stack}" end end heads = newHeads break if heads . empty? end puts "Loop finished" accept = includes_accept_state? heads puts "heads: #{heads}" puts "stack: #{stack}" puts "accept: #{accept}" resp = { input : input , accept : accept , heads : heads , stack : stack } end
Initialize a PDA object.
 Runs the input on the machine and returns a Hash describing
 the machine's final state after running.

 @param [String] input the string to use as input for the PDA
 @return [Hash] a hash describing the PDA state after running
   * :input [String] the original input string
   * :accept [Boolean] whether or not the PDA accepted the string
   * :heads [Array] the state which the head is currently on
Initialize a PDA object . Runs the input on the machine and returns a Hash describing the machine s final state after running .