我想将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)可以让我这样做?
答案 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.
功能请求再次支持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 Code和Generating 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解析器。