2009-11-21 26 views
9

Hola chicos, esta es mi primera pregunta aquí en Stack Overflow y me preguntaba si podría pedir el consejo de personas que saben un poco más sobre Python y Parser Generators que yo.Asesoramiento en Python Parser Generators

Me han dado una tarea donde tengo que crear un analizador sintáctico para un lenguaje simple en forma de C. Puedo usar cualquier lenguaje de programación y herramientas. Deseo crear el analizador sintáctico, pero estoy aprendiendo Python al mismo tiempo, por lo que sería mi elección preferida.

Existen algunas restricciones que mi analizador tiene que seguir. En primer lugar, tiene que ser capaz de leer en un archivo de texto que contiene la siguiente información:

kind1 : spelling1 
kind2 : spelling2 
kind3 : spelling3 
     . 
     . 
     . 
kindn : spellingn 

Donde cada especie y la ortografía se refieren al tipo de token y el valor de la lengua. Este archivo es el resultado de poner una muestra de código a través del analizador léxico del idioma.

En segundo lugar, debo ser capaz de personalizar la salida del analizador. Idealmente, me gustaría generar un archivo que haya convertido la clase: lista de ortografía en otra secuencia de tokens que se pasará al compilador del lenguaje para convertirlo en código de ensamblado MIPS. He aquí un pequeño ejemplo de la clase de cosa que me gustaría que el analizador sea capaz de producir:

%function int test 
    %variable int x 
    %variable int y 
%begin 
    %if %id y , %id x > %do 
    %begin 
    %return %num 0 
    %end 
    %return %num 1 
%end 

que sería una gran ayuda si alguien me podría asesorar sobre Generadores de Python analizador existente y si yo sería capaz para lograr el tipo de cosa que estoy buscando en los ejemplos anteriores.

Respuesta

10

PyParsing es una herramienta de python para generar analizadores. Hay un lot of interesting examples.

Fácil de empezar:

from pyparsing import Word, alphas 

# define grammar 
greet = Word(alphas) + "," + Word(alphas) + "!" 

# input string 
hello = "Hello, World!" 

# parse input string 
print hello, "->", greet.parseString(hello) 
5

Parece un trabajo pyparsing para mí. Y hace que sea relativamente fácil manipular la salida, también.

+0

Gracias por su consejo. Sin duda echaré un vistazo a PyParsing. – greenie

1

recomiendo que usted echa un vistazo Lark: https://github.com/erezsh/lark

Se puede analizar todas las gramáticas libres de contexto, se crea automáticamente un AST (con números de columna línea de &), y se acepta la gramática en formato EBNF, que es fácil de escribir y se considera el estándar.