#!/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)
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)