nonebot-plugin-brainfuck

a brainfuck interpreter for nonebot


Keywords
brainfuck
License
MIT
Install
pip install nonebot-plugin-brainfuck==1.0.4

Documentation

NoneBotPluginLogo

NoneBotPluginText

nonebot-plugin-brainfuck

brainfuck解释器,让你甚至可以在QQ上写图灵完备的代码

使用方法

群聊中使用 brainfuck:{语句}:输入

如 brainfuck:,>,++.<.:ab

可以得到输出 da

关于brainfuck

这是一句helloworld

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

你别笑!这可是图灵完备的语言!如果你愿意,甚至可以等价翻译成简单的汇编

简单的brainfuck语法

brainfuck可以理解为是对图灵机的完全模拟

计算机对指令纸带上逐个符号进行执行,同时计算机内拥有一条有限或无限长度的内存,每一个位置的数据都为0,指针初始位置指向地址为0的内存块

> 内存指针右移一个地址

< 内存指针左移一个地址

+ 当前指针指向的内存块内的数据+1

- 当前指针指向的内存块内的数据-1

. 把当前内存块内的数据输出到控制台

, 从控制台读取一个小于2^8的数字,写入控制台(本解释器中输入一个大于255的数字会被自动取256模)

[ 如果当前指针指向的内存块数据为0,则跳转到对应的]后执行

] 如果当前指针指向的内存块数据不为0,则跳转到对应的[后执行

看,语法很简单吧,现在,我们可以尝试着用brainfuck写一个简单的减法器了

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

首先读取控制台中的一个数储存在地址0内,左移一格内存,在地址1的内存中写入6作为计数器,之后回到储存数字的内存地址,进行8次-1,然后令计数器-1,直到计数器归零后输出地址0的数字 等于对地址0进行了6次批量-1的计算,每次计算为8次-1,总计6*8 = 48次减一

同理

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

也能输出完全相同的结果

现在你对brainfuck或者打孔编程有一点简单的概念了吧?好了,我们开始尝试着用它来写一个网络app,或者做个3A游戏吧!

关于这个解释器

是的,这个解释器甚至实现了一个完整的虚拟机……