2 import turing._ |
2 import turing._ |
3 import abacus._ |
3 import abacus._ |
4 import comp1._ |
4 import comp1._ |
5 |
5 |
6 // Turing machine examples |
6 // Turing machine examples |
7 val TMCopy = TM(List((WBk, 5), (R, 2), (R, 3), (R, 2), (WOc, 3), |
7 val TMCopy = TM((WBk, 5), (R, 2), (R, 3), (R, 2), (WOc, 3), |
8 (L, 4), (L, 4), (L, 5), (R, 11), (R, 6), |
8 (L, 4), (L, 4), (L, 5), (R, 11), (R, 6), |
9 (R, 7), (WBk, 6), (R, 7), (R, 8), (WOc, 9), |
9 (R, 7), (WBk, 6), (R, 7), (R, 8), (WOc, 9), |
10 (R, 8), (L, 10), (L, 9), (L, 10), (L, 5), |
10 (R, 8), (L, 10), (L, 9), (L, 10), (L, 5), |
11 (L, 0), (R, 12), (WOc, 13), (L, 14), (R, 12), |
11 (L, 0), (R, 12), (WOc, 13), (L, 14), (R, 12), |
12 (R, 12), (L, 15), (WBk, 14), (R, 0), (L, 15))) |
12 (R, 12), (L, 15), (WBk, 14), (R, 0), (L, 15)) |
13 |
13 |
14 println("TMCopy: " + (TMCopy.run(Tape(3)))) |
14 println("TMCopy: " + (TMCopy.run(Tape(3)))) |
15 println("TMfindnth: " + (TMFindnth(3).run(Tape(1,2,3,4,5)))) |
15 println("TMfindnth: " + (TMFindnth(3).run(Tape(1,2,3,4,5)))) |
16 println("TMMopup: " + (TMMopup(3).run(Tape(1,2,3,4,5)))) |
16 println("TMMopup: " + (TMMopup(3).run(Tape(1,2,3,4,5)))) |
17 |
17 |
18 |
18 |
19 // Abacus machine examples |
19 // Abacus machine examples |
20 def Copy(in: Int, out: Int, jump: Int) = |
20 def Copy(in: Int, out: Int, jump: Int) = |
21 Abacus(List(Dec(in, jump), Inc(out), Goto(0))) |
21 Abacus(List(Dec(in, jump), Inc(out), Goto(0))) |
30 Abacus(List(Inc(out), Dec(in1, jump))) ++ |
30 Abacus(List(Inc(out), Dec(in1, jump))) ++ |
31 Mult(out, in2, tmp2, tmp1, -1).shift(2, -1).adjust(-1, 10) ++ |
31 Mult(out, in2, tmp2, tmp1, -1).shift(2, -1).adjust(-1, 10) ++ |
32 Copy(tmp2, out, -1).shift(10, -1). adjust(-1, 1) |
32 Copy(tmp2, out, -1).shift(10, -1). adjust(-1, 1) |
33 } |
33 } |
34 |
34 |
35 println("Copy: 3 " + (Copy(0, 1, -1).run(Map(0 -> 3, 1 -> 0)))) |
35 println("Copy 3: " + (Copy(0, 1, -1).run(Map(0 -> 3, 1 -> 0)))) |
36 println("Plus: 3 + 4 " + (Plus(0, 1, 2, -1).run(Map(0 -> 3, 1 -> 4, 2 -> 0)))) |
36 println("Plus 3 + 4: " + (Plus(0, 1, 2, -1).run(Map(0 -> 3, 1 -> 4, 2 -> 0)))) |
37 println("Mult: 3 * 5 " + (Mult(0, 1, 2, 3, -1).run(Map(0 -> 3, 1 -> 5, 2 -> 0, 3 -> 0)))) |
37 println("Mult 3 * 5: " + (Mult(0, 1, 2, 3, -1).run(Map(0 -> 3, 1 -> 5, 2 -> 0, 3 -> 0)))) |
38 println("Expo: 3 ^ 4 " + (Expo(0, 1, 2, 3, 4, -1).run(Map(0 -> 4, 1 -> 3, 2 -> 0, 3 -> 0, 4 -> 0)))) |
38 println("Expo 3 ^ 4: " + (Expo(0, 1, 2, 3, 4, -1).run(Map(0 -> 4, 1 -> 3, 2 -> 0, 3 -> 0, 4 -> 0)))) |
39 |
39 |
40 |
40 |
41 // Abacus-to-TM translation examples |
41 // Abacus-to-TM translation examples |
42 println("Compiled Copy 3: " + toTM(Copy(0, 1, Int.MaxValue).p).run(Tape(3,0,0))) |
42 println("Compiled Copy 3: " + toTM(Copy(0, 1, Int.MaxValue).p).run(Tape(3,0,0))) |
43 println("Compiled Plus 3 + 4: " + toTM(Plus(0, 1, 2, Int.MaxValue).p).run(Tape(3,4,0,0))) |
43 println("Compiled Plus 3 + 4: " + toTM(Plus(0, 1, 2, Int.MaxValue).p).run(Tape(3,4,0,0))) |