deralex / phprainfuck
Brainfuck 解释器和虚拟机
dev-master
2020-01-06 08:15 UTC
Requires
- phpunit/phpunit: ^8.4@dev
Requires (Dev)
- phpspec/phpspec: ^4.0
This package is not auto-updated.
Last update: 2024-09-24 02:37:10 UTC
README
这究竟是什么东西?
这是一个 Brainfuck 解释器和(某种程度上)虚拟机,这使得它能够既作为“纯”Brainfuck 代码评估 Brainfuck 代码,也能作为 PHP 代码评估 Brainfuck 代码。
安装
只需将其添加到您的 composer.json 中
"require": {
...
"AlexClooze/phprainfuck": "dev-master"
}
然后运行 composer update
。
用法
使用 phprainfuck 有两种方式。
一切从创建一个新的 phprainfuck 实例开始
use AlexClooze\Phprainfuck\Phprainfuck;
$phprain = new Phprainfuck();
之后,您有两个选择。
直接解释 Brainfuck 代码
这里有一个示例,说明如何使用 evaluate
方法仅解释纯 Brainfuck 代码
$code = <<<EOT
+++++ +++[- >++++ ++++< ]>+++ +++++ .<+++ ++[-> +++++ <]>++ ++.++ +++++
..+++ .<+++ +++++ [->-- ----- -<]>- ----- ----- ----. <++++ +++[- >++++
+++<] >++++ ++.<+ +++[- >++++ <]>++ +++++ +.+++ .---- --.-- ----- -.<++
+++++ +[->- ----- --<]> ---.<
EOT;
print $phprain->evaluate($code);
这将打印 "Hello World!"。
将 Brainfuck 代码作为 PHP 代码评估
这里有一个示例,说明如何创建一个新的虚拟机并在其中执行 Brainfuck 代码作为 PHP 代码。
提示:通过虚拟机执行的代码都是在单独的新 PHP 进程中执行的。
$code = <<<EOT
+++++ +++++ [->++ +++++ +++<] >++++ +++++ +++++ ++++. <++++ [->-- --<]>
----- .<+++ +[->+ +++<] >+.<+ +++[- >---- <]>-- -.+++ ++.<+ +++[- >++++
<]>+. ----- ---.+ ++.<+ +++++ ++[-> ----- ---<] >---- ----. ----- -.<++
++++[ ->+++ +++<] >++.< +++++ [->++ +++<] >++++ .++++ +++.. +++.< +++++
+++[- >---- ----< ]>--- ----- ----- --.<+ +++++ +[->+ +++++ +<]>+ +++++
.<+++ +[->+ +++<] >++++ ++++. +++.- ----- .---- ----. <++++ ++++[ ->---
----- <]>-- -.+.+ +++++ +.<++ ++[-> ++++< ]>++. <
EOT;
$vm = $phprain->createVirtualMachine(255);
$vm->run($code);
由 createVirtualMachine
给出的参数是实际的堆大小。上面的代码将评估为 var_dump("Hello World!");
并打印 string(12) "Hello World!"
。
运行测试
phprainfuck 是在 phpspec 的帮助下开发的。运行 phpspec run
来运行测试。