📜  Brainfuck (1)

📅  最后修改于: 2023-12-03 15:13:42.963000             🧑  作者: Mango

Brainfuck

简介

Brainfuck 是一门极为简单和极其小型的编程语言,它由 Urban Müller 在 1993 年创造。它的设计目的是为了仅仅含有命令“<”、“>”、“+”、“-”、“.”、“,”、“[” 和 “]” 的最小限定集上去掉所有的语言表述中的相关。 Brainfuck 提供了一种极为简单和极其小型的语言结构来充分地解释最终的目标并且这也是它最受欢迎的原因之一。

语法

Brainfuck 语言只有 8 个命令:

  • “>”:将数据指针向右移动一个位置,即将指针指向下一个单元。
  • “<”:将数据指针向左移动一个位置,即将指针指向上一个单元。
  • “+”:将指针当前指向的单元的值加上 1。
  • “-”:将指针当前指向的单元的值减去 1。
  • “.”:输出指针当前指向的单元的 ASCII 值。
  • “,”:将输入的一个字符的 ASCII 值存储到指针当前指向的单元中。
  • “[”:如果指针当前指向的单元值为 0,则跳转到对应的 “]” 后一位继续执行; 如果指针当前指向的单元值不为 0,则继续向下执行。
  • “]”:如果指针当前指向的单元值不为 0,则跳转到对应的 “[” 后一位继续执行;如果指针当前指向的单元值为 0,则继续向下执行。

这 8 个命令的语义非常简单,只需要运行 Brainfuck 解释器即可体验。

以下是一个经典的 Hello World 程序:

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

该程序的意思为:依次输出 "H"、"e"、"l"、"l"、"o"、" "、"W"、"o"、"r"、"l"、"d"、"!"。

使用

这里提供一个开源的 Brainfuck 解释器:bf.py

可以在命令行中运行 Brainfuck 解释器:

python bf.py helloworld.bf

也可以在 Python 中集成解释器:

from bf import Interpreter

with open("helloworld.bf", "r") as f:
    code = f.read()

interpreter = Interpreter()
interpreter.run(code)
符号计数

Brainfuck 语言的单元块可以使用左右两个括号进行包装。编写时要特别注意符号的使用,因为使用错误可能会导致解释器错误。

以下是一种计算 1 到 5 的和并输出的代码:

+[->+++++<]>.
进一步

Brainfuck 可以用来解决复杂的计算问题,但是其语法及其复杂,也没有常规编程语言的附加功能。尽管如此, Brainfuck 它的非常小巧,经常被嵌入到其它的程序中作为可执行代码或为加密算法提供一个简单、小型的实现示例。

参考
  1. Brainfuck - Wikipedia
  2. bf.py - GitHub