Naposledy aktivní 1 week ago

bf.nova Raw Playground
1|# Brainfuck
2
3the brackets are written as { } because of the January syntax.
4
5output is stored in :output: as bits.
6
7the input operator is not implemented.
8
9#|
10
11|| :: control test
12
13|# test programs #|
14
15| :: number 65 test |
16 :: start
17 :program: (
18+ + + + + + + + + + + + + + + + + + + +
19+ + + + + + + + + + + + + + + + + + + +
20+ + + + + + + + + + + + + + + + + + + +
21+ + + + + [.]
22)
23
24| :: overflow test |
25 :: start
26 :program: (
27- - - [.] + + + + + [.]
28)
29
30| :: tape test |
31 :: start
32 :program: (
33+ > + + > + + + > > - < < < - - -
34< < < + + + + + + +
35> > > +
36)
37
38| :: control test |
39 :: start
40 :program: (
41+ + + + + { > + > + + < < - }
42> [.] > [.]
43)
44
45|# interpreter #|
46
47| :: start | :: head empty :: interpret
48
49| :: head empty | :tape: ( 0 0 0 0 0 0 0 0 )
50
51| :symbol: + | :: increment
52| :: increment :tape: 0 | :tape: 1 :: restore number
53| :: increment? :tape: 1 | :number: 0
54| :: increment | :: restore number
55
56| :symbol: - | :: decrement
57| :: decrement? :tape: 0 | :number: 1
58| :: decrement :tape: 1 | :tape: 0 :: restore number
59| :: decrement | :: restore number
60
61| :symbol: > | :: next cell
62| :: next cell :after: ; | :tape: ; :: forward
63| :: next cell | :tape: ( 0 0 0 0 0 0 0 0 ; )
64| :: forward? :after: 0 | :tape: 0
65| :: forward? :after: 1 | :tape: 1
66| :: forward :after: ;? |
67| :: forward |
68
69| :symbol: < | :: previous cell
70| :: previous cell? :tape: 0 | :after: 0
71| :: previous cell? :tape: 1 | :after: 1
72| :: previous cell :tape: ; | :after: ; :: head not empty
73| :: previous cell | :after: ; :: refill head
74| :: head not empty :tape: $x? |
75| :: head not empty | :: refill head
76| :: refill head | :tape: ( 0 0 0 0 0 0 0 0 )
77
78| :: booleanise? :tape: 0 | :number: 0
79| :: booleanise :tape: 1? | :boolean: true :: restore number
80| :: booleanise | :boolean: false :: restore number
81
82| :symbol: { | :: booleanise :: forward jump
83| :: forward jump :boolean: true |
84| :: forward jump :boolean: false | :: skip forward
85| :: skip forward? :program: { | :seen: { :: skip forward
86| :: skip forward :program: } | :seen: }
87| :: skip forward? :program: $other | :seen: $other
88| :: skip forward | :: abort :reason: bracket mismatch
89
90| :symbol: } | :: booleanise :: backward jump
91| :: backward jump :boolean: true :seen: } | :program: } :: rewind
92| :: backward jump :boolean: false |
93| :: rewind? :seen: } | :program: } :: rewind
94| :: rewind :seen: {? |
95| :: rewind? :seen: $other | :program: $other
96| :: rewind | :: abort :reason: bracket mismatch
97
98| :symbol: [.] | :: output
99| :: output? :tape: 0 | :output: 0 :number: 0
100| :: output? :tape: 1 | :output: 1 :number: 1
101| :: output | :output: ; :: restore number
102
103| :symbol: , | :: abort :reason: no input facility
104
105| :symbol: $other |
106
107| :: restore number? :number: $digit | :tape: $digit
108| :: restore number |
109
110| :: interpret? :program: $symbol | :symbol: $symbol :seen: $symbol
111| :: interpret | :: done
112