php parsing lexer

Generar AST de un archivo fuente PHP



parsing lexer (5)

Bueno, puede ver las respuestas de Parsing e Impresión de código PHP y Generación de código PHP (de Parser Tokens) : básicamente, el paquete PHP_Beautifier de PEAR en http://pear.php.net/package/PHP_Beautifier puede extenderse para hacer lo que quiera , pero suena como que requiere un trabajo pesado.

Y si no está limitado a PHP, http://www.eclipse.org/pdt/articles/ast/PHP_AST.html guiará a través del uso del analizador AST del módulo PHP de Eclipse.

Quiero analizar un archivo fuente PHP, en un AST (preferiblemente como una matriz de instrucciones anidadas).

Básicamente quiero convertir cosas como

f($a, $b + 1)

en algo como

array( ''function_call'', array( array( ''var'', ''$a'' ), array( ''expression'', array( array( ''binary_operation'', ''+'', array (''var'', ''$b''), array( ''int'', ''1'' ) ) ) ) ) )

¿Hay alguna biblioteca PHP incorporada o bibliotecas de terceros (preferiblemente en PHP) que me permitan hacer esto?



No, no hay tal característica incorporada. Pero puedes usar el Tokenizer para crearlo.


Pfff es una biblioteca OCaml para analizar y manipular el código PHP. Consulte el manual de Pfff para más detalles.


Hip hop

Puedes usar el HHVM de Facebook para volcar el AST.

apt-get install hhvm # parse specified file and dump the AST hhvm --parse arg

Esto funcionó para HipHop (el antiguo compilador de PHP a C ++) - ¡en los días de 2013!

H HVM

Actualización 2015

--parse no es compatible.

Recibirá un error: HHVM The ''parse'' command line option is not supported.

Consulte https://github.com/facebook/hhvm/blob/c494c3a145008f65d349611eb2d09d0c33f1ab23/hphp/runtime/base/program_functions.cpp#L1111

Solicitud de funciones para volver a admitir la opción CLI: https://github.com/facebook/hhvm/issues/4615

PHP 7

PHP 7 tendrá un AST, vea el RFC relacionado.

Hay dos extensiones, que proporcionan acceso y exponen el AST generado por PHP 7: