生成PHP源文件的AST

时间:2011-05-27 14:24:46

标签: php parsing lexer

我想将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)可以让我这样做?

5 个答案:

答案 0 :(得分:21)

在我发现PHP Parser后,我已经实施了was no existing parser。它将PHP代码解析为节点树。

答案 1 :(得分:8)

<强>街舞

您可以使用Facebook's HHVM转储AST。

apt-get install hhvm

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

这适用于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:

答案 2 :(得分:2)

Pfff是一个用于解析和操作PHP代码的OCaml库。有关详细信息,请参阅the manual of Pfff

答案 3 :(得分:1)

不,内置没有这样的功能。但您可以使用Tokenizer创建它。

答案 4 :(得分:1)

嗯,你可以看一下Parsing and Printing PHP CodeGenerating PHP code (from Parser Tokens)的答案:基本上,http://pear.php.net/package/PHP_Beautifier的PEAR的PHP_Beautifier包可以扩展到你想要的,但听起来需要一些举重。

如果您不受PHP限制,那么http://www.eclipse.org/pdt/articles/ast/PHP_AST.html将指导您使用Eclipse PHP模块的AST解析器。