Esempio n. 1
0
#!/usr/bin/python

from parser import rules
from turing import TuringMachine, Tape, Program
from customErrors import NotValidTokenException, UnreacheableTransitionException

print("Welcome to this Turing machine little project\n")
print(rules["DESCRIPTION"])
string = raw_input("please enter the string:  ")
tape = Tape(string)
program = Program(rules)
machine = TuringMachine(program)

try:
    success = machine.run(tape)
    if success:
        print("The string is valid for this program!")
    else:
        print("The string is not valid for this program")
except NotValidTokenException as e:
    print(e.message)
except UnreacheableTransitionException as e:
    print(e.message)
Esempio n. 2
0
a = "a"
q0 = "q₀"
q1 = "q₁"
q2 = "q₂"
q3 = "q₃"
q4 = "q₄"
q5 = "q₅"
qf = "qf"
blank = "b̸"

tape = [a] * args.a + [blank] + [a] * args.b

transitions = {(q0, a, a, 1, q0),
               (q0, blank, blank, 1, q1),
               (q1, a, a, 1, q2),
               (q1, blank, blank, 0, q2),
               (q2, blank, blank, -1, q3),
               (q2, a, a, 1, q2),
               (q3, a, blank, -1, q4),
               (q3, blank, blank, -1, q5),
               (q4, a, a, -1, q4),
               (q4, blank, a, -1, q5),
               (q5, a, a, -1, q5),
               (q5, blank, blank, 1, qf)}

machine = TuringMachine(tape, transitions, q0, {qf})
machine.run()
output = machine.output()
print(len(output[0]))
delta[(4, 'b', '$')] = (5, 'b', '$', 'L', 'R')
delta[(4, 'b', '0')] = (4, 'b', '0', 'S', 'L')
delta[(4, 'b', '1')] = (4, 'b', '1', 'S', 'L')

delta[(5, 'b', '0')] = (6, '0', '0', 'S', 'R')
delta[(5, 'b', '1')] = (6, '1', '1', 'S', 'R')
delta[(5, '0', '0')] = (6, '0', '0', 'S', 'R')
delta[(5, '0', '1')] = (6, '1', '1', 'S', 'R')
delta[(5, '1', '0')] = (6, '0', '0', 'S', 'R')
delta[(5, '1', '1')] = (6, '1', '1', 'S', 'R')

delta[(6, '0', 'b')] = (1, '0', '0', 'S', 'S')
delta[(6, '1', 'b')] = (1, '1', '0', 'S', 'S')
delta[(6, '0', '0')] = (5, '0', '0', 'L', 'S')
delta[(6, '1', '0')] = (5, '1', '0', 'L', 'S')
delta[(6, '0', '1')] = (5, '0', '1', 'L', 'S')
delta[(6, '1', '1')] = (5, '1', '1', 'L', 'S')

alphabet = TuringMachine.BINARY
alphabet.add("$")

tm = TuringMachine(num_states=7,
                   transitions=delta,
                   start=q_0,
                   accept=q_a,
                   reject=q_r,
                   alphabet=alphabet)

tm.run(test_tape)