deralex/phprainfuck

Brainfuck 解释器和虚拟机

dev-master 2020-01-06 08:15 UTC

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 来运行测试。