# Realizza la Macchina Universale # Stato iniziale (0, B, init, B, <) (init, -, start, S, >) # Va a leggere i simboli (start, B, gord, B, >) (gord, S, gord, S, >) (gord, 0, gord, 0, >) (gord, 1, gord, 1, >) (gord, N, gord, N, >) (gord, I, gord, I, >) (gord, T, rd, T, >) # Legge i simboli (rd, 0, rd0, 0, <) (rd, 1, rd1, 1, <) (rd, N, rdN, N, <) (rd, -, rd, N, -) # Memorizza il simbolo all'estremita' # sinistra della stringa (rd0, T, rd0, T, <) (rd0, 1, rd0, 1, <) (rd0, 0, rd0, 0, <) (rd0, I, rd0, I, <) (rd0, S, rd0, S, <) (rd0, N, rd0, N, <) (rd0, B, rd0, B, <) (rd0, -, gom, 0, >) (rd1, T, rd1, T, <) (rd1, 1, rd1, 1, <) (rd1, 0, rd1, 0, <) (rd1, I, rd1, I, <) (rd1, S, rd1, S, <) (rd1, N, rd1, N, <) (rd1, B, rd1, B, <) (rd1, -, gom, 1, >) (rdN, T, rdN, T, <) (rdN, 1, rdN, 1, <) (rdN, 0, rdN, 0, <) (rdN, I, rdN, I, <) (rdN, S, rdN, S, <) (rdN, N, rdN, N, <) (rdN, B, rdN, B, <) (rdN, -, gom, N, >) # Inizia a fare il match dei simboli (gom, S, gom, S, >) (gom, B, gomS, B, >) (gomS, S, msa, A, <) # Stati di match (msa, S, msa, S, <) (msa, N, msa, N, <) (msa, 1, msa, 1, <) (msa, 0, msa, 0, <) (msa, B, cs, B, <) (cs, S, cs, S, <) (cs, X, mark, X, >) (cs, 0, mark, 0, >) (cs, 1, mark, 1, >) (cs, N, mark, N, >) (mark, S, marked, X, >) (mark, B, fvfy, B, <) (marked, S, marked, S, >) (marked, N, marked, N, >) (marked, 1, marked, 1, >) (marked, 0, marked, 0, >) (marked, B, marked, B, >) (marked, A, next, S, >) # Prossimo match (next, S, msa, A, <) (next, 0, vrfy0, Z, <) (next, 1, vrfy1, U, <) (next, N, vrfyN, M, <) (vrfy0, S, vrfy0, S, <) (vrfy0, 1, vrfy0, 1, <) (vrfy0, 0, vrfy0, 0, <) (vrfy0, N, vrfy0, N, <) (vrfy0, B, vfy0, B, <) (vrfy1, S, vrfy1, S, <) (vrfy1, 1, vrfy1, 1, <) (vrfy1, 0, vrfy1, 0, <) (vrfy1, N, vrfy1, N, <) (vrfy1, B, vfy1, B, <) (vrfyN, S, vrfyN, S, <) (vrfyN, 1, vrfyN, 1, <) (vrfyN, 0, vrfyN, 0, <) (vrfyN, N, vrfyN, N, <) (vrfyN, B, vfyN, B, <) (vfy0, X, vfy0, X, <) (vfy0, S, fvfy, S, <) (vfy0, 0, apply, -, >) (vfy0, 1, fail, 1, >) (vfy0, N, fail, N, >) (vfy1, X, vfy1, X, <) (vfy1, S, fvfy, S, <) (vfy1, 0, fail, 0, >) (vfy1, 1, apply, -, >) (vfy1, N, fail, N, >) (vfyN, X, vfyN, X, <) (vfyN, S, fvfy, S, <) (vfyN, 0, fail, 0, >) (vfyN, 1, fail, 1, >) (vfyN, N, apply, -, >) # Fallisce (fvfy, S, fvfy, S, <) (fvfy, X, fvfy, S, <) (fvfy, 1, fail, 1, >) (fvfy, 0, fail, 0, >) (fvfy, N, fail, N, >) (fail, X, fail, S, >) (fail, S, fail, S, >) (fail, B, fail, B, >) (fail, 0, fail, 0, >) (fail, 1, fail, 1, >) (fail, N, fail, N, >) (fail, U, nrule, 1, >) (fail, Z, nrule, 0, >) (fail, M, nrule, N, >) (fail, A, failS, S, >) (failS, S, failS, S, >) (failS, 0, nrule, 0, >) (failS, 1, nrule, 1, >) (failS, N, nrule, N, >) # Prossima tupla (nrule, S, nrule, S, >) (nrule, N, nrules, N, >) (nrule, 0, nrules, 0, >) (nrule, 1, nrules, 1, >) (nrules, 0, nrules, 0, >) (nrules, 1, nrules, 1, >) (nrules, N, nrules, N, >) (nrules, S, msa, A, <) (nrules, I, STOP, I, -) # Applica la tupla (apply, X, apply, -, >) (apply, B, apply, B, >) (apply, S, apply, S, >) (apply, 0, apply, 0, >) (apply, 1, apply, 1, >) (apply, N, apply, N, >) (apply, U, sets, 1, >) (apply, Z, sets, 0, >) (apply, M, sets, N, >) # Prossimo stato (sets, S, gow, X, <) (gow, S, gow, S, <) (gow, N, gow, N, <) (gow, B, gow, B, <) (gow, 0, gow, 0, <) (gow, 1, gow, 1, <) (gow, -, gowb, S, >) (gowb, S, gowb, S, >) (gowb, N, gowb, N, >) (gowb, B, gowb, B, >) (gowb, 0, gowb, 0, >) (gowb, 1, gowb, 1, >) (gowb, X, sets, S, >) (sets, 0, s0d?, 0, >) (sets, 1, s1d?, 1, >) (sets, N, sNd?, N, >) (s0d?, 0, s0d0, 0, >) (s0d?, 1, s0d1, 1, >) (s0d?, N, s0dN, N, >) (s1d?, 0, s1d0, 0, >) (s1d?, 1, s1d1, 1, >) (s1d?, N, s1dN, N, >) (sNd?, 0, sNd0, 0, >) (sNd?, 1, sNd1, 1, >) (sNd?, N, sNdN, N, >)

# Aggiorna il nastro
(s0d0, S, s0d0, S, >)
(s0d0, N, s0d0, N, >)
(s0d0, I, s0d0, I, >)
(s0d0, 0, s0d0, 0, >)
(s0d0, 1, s0d0, 1, >)
(s0d0, T, ws0d0, T, >)
(ws0d0, 0, gd0, 0, <)
(ws0d0, 1, gd0, 0, <)
(ws0d0, N, gd0, 0, <)

(s0d1, S, s0d1, S, >)
(s0d1, N, s0d1, N, >)
(s0d1, I, s0d1, I, >)
(s0d1, 0, s0d1, 0, >)
(s0d1, 1, s0d1, 1, >)
(s0d1, T, gd1, 0, >)

(s0dN, S, s0dN, S, >)
(s0dN, N, s0dN, N, >)
(s0dN, I, s0dN, I, >)
(s0dN, 0, s0dN, 0, >)
(s0dN, 1, s0dN, 1, >)
(s0dN, T, ws0dN, T, >)
(ws0dN, 0, rd0, 0, <)
(ws0dN, 1, rd0, 0, <)
(ws0dN, N, rd0, 0, <)

(s1d0, S, s1d0, S, >)
(s1d0, N, s1d0, N, >)
(s1d0, I, s1d0, I, >)
(s1d0, 0, s1d0, 0, >)
(s1d0, 1, s1d0, 1, >)
(s1d0, T, ws1d0, T, >)
(ws1d0, 0, gd0, 1, <)
(ws1d0, 1, gd0, 1, <)
(ws1d0, N, gd0, 1, <)

(s1d1, S, s1d1, S, >)
(s1d1, N, s1d1, N, >)
(s1d1, I, s1d1, I, >)
(s1d1, 0, s1d1, 0, >)
(s1d1, 1, s1d1, 1, >)
(s1d1, T, gd1, 1, >)

(s1dN, S, s1dN, S, >)
(s1dN, N, s1dN, N, >)
(s1dN, I, s1dN, I, >)
(s1dN, 0, s1dN, 0, >)
(s1dN, 1, s1dN, 1, >)
(s1dN, T, ws1dN, T, >)
(ws1dN, 0, rd1, 1, <)
(ws1dN, 1, rd1, 1, <)
(ws1dN, N, rd1, 1, <)

(sNd0, S, s1d0, S, >)
(sNd0, N, s1d0, N, >)
(sNd0, I, s1d0, I, >)
(sNd0, 0, s1d0, 0, >)
(sNd0, 1, s1d0, 1, >)
(sNd0, T, ws1d0, T, >)
(wN1d0, 0, gd0, N, <)
(wN1d0, 1, gd0, N, <)
(wN1d0, N, gd0, N, <)

(sNd1, S, s1d1, S, >)
(sNd1, N, s1d1, N, >)
(sNd1, I, s1d1, I, >)
(sNd1, 0, s1d1, 0, >)
(sNd1, 1, s1d1, 1, >)
(sNd1, T, gd1, N, >)

(sNdN, S, s1dN, S, >)
(sNdN, N, s1dN, N, >)
(sNdN, I, s1dN, I, >)
(sNdN, 0, s1dN, 0, >)
(sNdN, 1, s1dN, 1, >)
(sNdN, T, wsNdN, T, >)
(wsNdN, 0, rdN, N, <)
(wsNdN, 1, rdN, N, <)
(wsNdN, N, rdN, N, <)

# Sposta a sinistra
(gd0, T, gd0, T, <)
(gd0, 0, w0, T, >)
(gd0, 1, w1, T, >)
(gd0, N, wN, T, >)
(w0, T, rd0, 0, <)
(w1, T, rd1, 1, <)
(wN, T, rdN, N, <)

# Sposta a destra
(gd1, 0, rd, T, >)
(gd1, 1, rd, T, >)
(gd1, N, rd, T, >)

# Fine programma