问题描述
|
我想将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解析器。