2010-08-19 18 views
7

Tengo algunos archivos fuente Perl razonables (no ofuscados), y necesito un tokenizer, que lo dividirá en tokens, y devolverá el tipo de token de cada uno de ellos, p. para el script¿Cómo se tokeniza el código fuente de Perl?

print "Hello, World!\n"; 

volvería algo como esto:

  • palabra clave 5 bytes
  • espacio en blanco 1 byte
  • entre comillas dobles cuerdas 17 bytes
  • punto y coma 1 byte
  • espacios en blanco 1 byte

¿Cuál es la mejor biblioteca (preferiblemente escrita en Perl) para esto? Tiene que ser razonablemente correcto, es decir, debería ser capaz de analizar construcciones sintácticas como qq{{\}}}, pero no tiene que saber acerca de analizadores especiales como Lingua::Romana::Perligata. Sé que el análisis de Perl es Turing-completo, y solo Perl puede hacerlo bien, pero no necesito la corrección absoluta: el tokenizador puede fallar o ser incompatible o puede asumir algún defecto en algunos casos de esquina muy raros, pero debería funcionar correctamente la mayor parte del tiempo. Debe ser mejor que el resaltado de sintaxis integrado en un editor de texto promedio.

FYI Probé la PerlLexer en pygments, que trabaja razonable para la mayoría de las construcciones, excepto que no se puede encontrar el segundo print palabra clave en éste:

print length(<<"END"); print "\n"; 
String 
END 

Respuesta

7

use PPI;

Sí , solo Perl puede analizar Perl, sin embargo, PPI es la solución correcta al 95%.

+0

+1 respuesta divertida – Dacav

Cuestiones relacionadas