2 个版本

0.1.1 2023 年 10 月 1 日
0.1.0 2023 年 2 月 22 日

#512编程语言

GPL-3.0-only

46KB
968

bfup

Crate

Brainfuck 类语言的预处理器。

它允许用户,就像每个不错的预处理器应该做的那样,使用奇怪的宏和晦涩难懂的语法来混淆其代码,甚至能够将输出代码排列成指定宽度的矩形。

bfup 主要用于 Brainfuck 或类似 Brainfuck 语法的语言之上,因为它主要在单个、UTF-8 编码的字符上操作。可以完全配置可识别的操作符(字符)以及定义的预处理器指令的前缀。

用法

基本用法

bfup [OPTIONS]... [FILE]

可以通过使用 --help 标志来查看所有可用标志的列表。

行为

程序尝试预处理提供的文件,仅输出指定为操作符的字符(默认情况下输出到 stdin)。默认情况下,输出也以矩形排列。

配置

可识别的操作符以及解析器使用的每个指令字符都可以通过相应的命令行选项或从 RON 配置文件中读取进行配置。

语法

预处理器识别 5 种基本类型的 '令牌'

令牌 预处理为
运算符 直接复制到输出
令牌( ) 包围 令牌 分组,并将它们视为单个令牌。
# 后跟一个 数字 将下一个令牌 数字
$ 后跟任何 字符,后跟一个 令牌 定义一个宏,该宏将后续出现的每个 字符 替换为 令牌
\ 跳过下一个字符

示例

计算为打印 Hello World! 并跟一个换行符的 Brainfuck 程序的代码

$z([-]) $p(.z)

$H(#72+p)
$e(#101+p)
$l(#108+p)
$o(#111+p)
$,(#44+p)
$ (#32+p)
$W(#87+p)
$r(#114+p)
$d(#100+p)
$!(#33+p)
$/(#10+p)

Hello, World!/

注意事项

请注意,每个字符 都可以定义为一个宏;您可以覆盖运算符、预处理器指令前缀甚至空白字符。例如

$+(-) $
< $$([[[-]]])
+++$

计算为

<---([[[-]]])

此外,宏定义会获取它们遇到的第一个有效标记,这意味着

$m($z$a+([-])aa)
mz

计算为

++[-]

贡献

我非常感激任何错误报告/贡献/批评。

依赖项

~2–13MB
~112K SLoC