有人请为我描述这个脑泡解释器吗?
#include <stdlib.h>
char m[9999], *n[99], *r = m, *p = m + 5000, **s = n, d, c;
main()
{
for (read(0, r, 4000); c = *r; r++)
c - ']' || (d > 1 ||
(r = *p ? *s : (--s, r)), !d || d--), c - '[' || d++ ||
(*++s = r), d || (*p += c == '+', *p -= c == '-', p += c == '>',
p -= c == '<', c - '.' || write(2, p, 1), c - ',' || read(2, p, 1));
}
答案 0 :(得分:13)
内部循环使用短路布尔表达式(以及逗号运算符而不是分号)来计算每个brainfuck令牌。
<expr a> || <expr b>
的每个实例都可以翻译为if (!<expr a>) { <expr b> }
(r = *p ? *s : (--s, r))
之外的逗号运算符的每次使用都可以用分号替换。
p <op>= <conditional>
和*p+= <conditional>
的列表可以替换为if (<conditional>) p <op>= 1
和if (<conditional>) *p <op>= 1
。整个带括号的集合可以转换为if (!d) { ... }
。
一旦你完成了所有这些,你最终会得到一个非常简单的脑筋解释器。请记住,作为表达式的逗号运算符从左到右进行求值。