生成PHP源文件的AST

问题描述

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

解决方法

        我发现没有现有的解析器后,就实现了一个PHP解析器。它将PHP代码解析为节点树。     ,        嘻哈(音乐 您可以使用Facebook的HHVM转储AST。
apt-get install hhvm

# parse specified file and dump the AST
hhvm --parse arg  
这适用于HipHop(旧的PHP至C ++编译器)-早在2013年就开始了! 虚拟机 更新2015 不支持3ѭ。 您会得到一个错误:
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: https://github.com/nikic/php-ast https://github.com/sgolemon/astkit     ,        Pfff是用于解析和处理PHP代码的OCaml库。有关更多详细信息,请参见Pfff手册。     ,        不,没有内置此类功能。但是您可以使用令牌生成器来创建它。     ,        好吧,您可以查看解析和打印PHP代码以及生成PHP代码(来自解析器令牌)的答案:基本上可以将PEAR的PHP_Beautifier包(位于http://pear.php.net/package/PHP_Beautifier进行扩展)您想要什么,但听起来好像需要一些繁重的工作。 而且,如果您不受PHP的限制,那么http://www.eclipse.org/pdt/articles/ast/PHP_AST.html会带您使用Eclipse PHP模块的AST解析器。