在Brainfuck语言入门 https://blog.csdn.net/nameofcsdn/article/details/110231730 一文中,我给出了把BF语言转化成C++并执行的代码。
这里,我又给出了个简单的BF代码解释器,直接把BF代码贴到源代码里面即可运行(string可以用\作换行)
代码:
string code="...put BF code here...";
char arr[1000]={0};
char *p = arr;
void run(string s)
{
int pcode=0;
while(pcode<s.length())
{
switch(s[pcode])
{
case '>':
p++;
break;
case '<':
p--;
break;
case '+':
*p = *p + 1;
break;
case '-':
*p = *p - 1;
break;
case '.':
cout<<char(*p);
break;
case ',':
*p=getchar();
break;
case '[':
{
int num=1, pend=pcode;
while(num)
{
pend++;
if(s[pend]=='[')num++;
if(s[pend]==']')num--;
}
string ss=s.substr(pcode+1,pend-pcode-1);
while(*p)run(ss);
pcode=pend;
break;
}
case ']':
break;
}
pcode++;
}
}
int main()
{
run(code);
return 0;
}
本来想通过控制台输入BF代码,这样就不用给每一行末尾补一个\
然而输入BF代码和执行BF代码时的输入是交错在一起的,用重定向切来切去都没成功,最后放弃了。