生成PHP源文件的AST

Dog*_*ert 18 php parsing lexer

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

我基本上想转换像

f($a, $b + 1)
Run Code Online (Sandbox Code Playgroud)

变成类似的东西

array( 'function_call',
    array(
        array( 'var', '$a' ),
        array( 'expression',
            array(
                array( 'binary_operation',
                    '+',
                    array ('var', '$b'),
                    array( 'int', '1' )
                )
            )
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

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

Nik*_*kiC 21

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

  • @IraBaxter感谢您提供最有见地的评论.现在查看上述注释的日期和链接存储库中的LICENSE文件. (8认同)

Jen*_*och 8

嘻哈

您可以使用Facebook的HHVM转储AST.

apt-get install hhvm

# parse specified file and dump the AST
hhvm --parse arg  
Run Code Online (Sandbox Code Playgroud)

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


HHVM

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


PHP 7

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

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