blob: 5b8ff8a2e234529dd14c12ab8e9736130cfb4872 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
/* EXPECT:
Hello World!
*/
unsigned char M[1<<15];
void bf(const char *p)
{
extern int putchar(int);
extern int getchar(void);
unsigned char *Mend = M + sizeof M;
int b;
unsigned char *m = M;
while (*p) {
switch (*p) {
case '+': ++*m; break;
case '-': --*m; break;
case '<': if (m == M) m = Mend; else --m; break;
case '>': if (m == Mend) m = M; else ++m; break;
case '.': putchar(*m); break;
case ',': *m = getchar(); break;
case '[':
if (*m) break;
b = 0;
do switch (*p++) {
case '[': ++b; break;
case ']': --b; break;
case 0: return;
} while (b != 0);
continue;
case ']':
if (!*m) break;
b = 0;
do switch (*p--) {
case '[': ++b; break;
case ']': --b; break;
case 0: return;
} while (b != 0);
break;
}
++p;
}
}
int main(int argc, char **argv) {
const char *p = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.";
bf(argc < 2 ? p : argv[1]);
}
|