生成 PHP 源文件的 AST

2022-08-30 20:56:48

我想将PHP源文件解析为AST(最好是作为嵌套的指令数组)。

我基本上想转换这样的东西

f($a, $b + 1)

变成类似的东西

array( 'function_call',
    array(
        array( 'var', '$a' ),
        array( 'expression',
            array(
                array( 'binary_operation',
                    '+',
                    array ('var', '$b'),
                    array( 'int', '1' )
                )
            )
        )
    )
)

是否有任何内置的PHP库或第三方库(最好是PHP)可以让我这样做?


答案 1

在我发现没有现成的解析器之后,我实现了一个PHP解析器。它将 PHP 代码解析为节点树。


答案 2

嘻哈

您可以使用Facebook的HHVM来转储AST。

apt-get install hhvm

# parse specified file and dump the AST
hhvm --parse arg  

这适用于HipHop(旧的PHP C++编译器) - 早在2013年!


断续器

2015 年更新

--parse不受支持。

您将收到一个错误:HHVM The 'parse' command line option is not supported.

查看 https://github.com/facebook/hhvm/blob/c494c3a145008f65d349611eb2d09d0c33f1ab23/hphp/runtime/base/program_functions.cpp#L1111

再次支持 CLI 选项的功能请求https://github.com/facebook/hhvm/issues/4615


7 菲律宾比索

PHP 7 将有一个 AST,请参阅相关的 RFC

有两个扩展,它们提供访问权限并公开 PHP 7 生成的 AST:


推荐