Brainfuck语言(简称BF)是一种非常接近图灵机的编程语言。

本文既是BF的详细介绍和工具,也是我学习BF的全过程记录。

目录

一,指令

二,翻译成C/C++

三,打印A

四,BF的归0操作

五,打印Hello World!

六,编程实战

七,Brainfuck语言 解释器

八,Brainfuck语言 未定义行为

九,好用的工具

十,BF系列语言


一,指令

BF只有8种有效字符,其实就是8种指令:

字符

含义

>

指针加一

<

指针减一

+

指针指向的字节的值加一

-

指针指向的字节的值减一

.

输出指针指向的单元内容(ASCⅡ码)

,

输入内容到指针指向的单元(ASCⅡ码)

[

如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处

]

如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处

这里的指针都是指向一个8位的整数,即char,加减法的溢出规则也是和char型整数的溢出规则一致

纸带是双向的,和图灵机保持一致

二,翻译成C/C++

BF可以简单的翻译成C/C++语言:

把BF转换成C++代码的C++代码:

string translate(char c)
{
    switch (c)
    {
    case '>':
        return "p++";
    case '<':
        return "p--";
    case '+':
        return "*p = *p + 1";
    case '-':
        return "*p = *p - 1";
    case '.':
        return "cout<<char(*p)";
    case ',':
        return "*p=getchar()";
    case '[':
        return "while(*p){";
    case ']':
        return "}";
    default:
        return "";
    }
}


int main()
{
    char c;
    string s;
    while (cin >> c) {
        s+= translate(c);
        if (c != '[')s+= ";\n";
    }
    cout << s;
    return 0;
}

然后,我们只需要加几行代码,就可以直接执行上述C++代码

void run()
{
    char arr[1000] = { 0 };
    char* p = arr+500;
    //input code
}

int main()
{
    run();
    return 0;
} 

三,打印A

先看看怎么打印A,即char(65)

+++++++++++++
[->+++++<]
>.

运行第一次(翻译):

运行第2次(执行):

四,BF的归0操作

要把一个位置上的数变成0,BF代码也很简单:

[-]

把当前位置和前面相邻的非0值全部变成0:

[[-]<]

五,打印Hello World!

有了打印一个字符的经验和归0操作,接下来就可以输出任意字符了:

Ascii码分别是72,101,108,108,111,32,87,111,114,108,100,33

+++++++++
[->++++++++<]
>.[[-]<]
++++++++++
[->++++++++++<]
>+.[[-]<]
+++++++++
[->++++++++++++<]
>.[[-]<]
+++++++++
[->++++++++++++<]
>.[[-]<]
+++++++++
[->++++++++++++<]
>+++.[[-]<]
++++++++
[->++++<]
>.[[-]<]
++++++++
[->+++++++++++<]
>-.[[-]<]
+++++++++
[->++++++++++++<]
>+++.[[-]<]
+++++++++
[->++++++++++++<]
>++++++.[[-]<]
+++++++++
[->++++++++++++<]
>.[[-]<]
++++++++++
[->++++++++++<]
>.[[-]<]
++++++++
[->++++<]
>+.[[-]<]

六,编程实战

Brainfuck语言实战

七,Brainfuck语言 解释器

Brainfuck语言 解释器_csuzhucong的博客-CSDN博客

八,Brainfuck语言 未定义行为

Brainfuck语言 未定义行为_csuzhucong的博客-CSDN博客

九,好用的工具

https://fatiherikli.github.io/brainfuck-visualizer/

这个网页可以贴自己的BF代码执行,可以输入输出,还可以看到可视化的运行过程,挺好用的。

十,BF系列语言

BF系列语言_csuzhucong的博客-CSDN博客_bf语言

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐