Lark es un conjunto de herramientas de análisis para Python, creado centrándose en la ergonomía, el rendimiento y la modularidad.
Lark puede analizar todos los idiomas libres de contexto. En pocas palabras, significa que es capaz de analizar casi cualquier lenguaje de programación que existe y, hasta cierto punto, también la mayoría de los lenguajes naturales.
¿Para quién es?
Principiantes : Lark es muy amigable para la experimentación. Puede analizar cualquier gramática que le arrojes, sin importar cuán complicada o ambigua sea, y hacerlo de manera eficiente. También construye un árbol de análisis anotado para usted, utilizando solo la gramática y una entrada, y le brinda herramientas convenientes y flexibles para procesar ese árbol de análisis.
Expertos : Lark implementa tanto Earley (SPPF) como LALR (1), y varios lexers diferentes, para que pueda equilibrar potencia y velocidad, según sus necesidades. También proporciona una variedad de funciones y utilidades sofisticadas.
¿Qué puede hacer?
Y muchas más funciones. ¡Sigue leyendo y descúbrelo!
Lo más importante es que Lark le ahorrará tiempo y evitará que tenga dolores de cabeza al analizar.
$ pip install lark --upgrade
Lark no tiene dependencias.
Lark proporciona resaltado de sintaxis para sus archivos gramaticales (*.lark):
Estas son implementaciones de Lark en otros idiomas. Aceptan gramáticas de Lark y proporcionan utilidades similares.
Aquí hay un pequeño programa para analizar "¡Hola mundo!" (O cualquier otra frase similar):
from lark import Lark
l = Lark ( '''start: WORD "," WORD "!"
%import common.WORD // imports from terminal library
%ignore " " // Disregard spaces in text
''' )
print ( l . parse ( "Hello, World!" ) )
Y la salida es:
Tree ( start , [ Token ( WORD , 'Hello' ), Token ( WORD , 'World' )])
Observe que la puntuación no aparece en el árbol resultante. Lark lo filtra automáticamente.
Lark es excelente manejando la ambigüedad. Aquí está el resultado de analizar la frase "moscas de la fruta como los plátanos":
Lea el código aquí y vea más ejemplos aquí.
Vea la lista completa de características aquí
Lark es rápida y ligera (cuanto más bajo, mejor)
Consulte el tutorial JSON para obtener más detalles sobre cómo se realizó la comparación.
Para obtener evaluaciones comparativas exhaustivas de terceros, consulte el repositorio Python Parsing Benchmarks.
Biblioteca | Algoritmo | Gramática | ¿Construye árbol? | ¿Apoya la ambigüedad? | ¿Puede manejar todos los CFG? | Seguimiento de línea/columna | Genera Autónomo |
---|---|---|---|---|---|---|---|
Alondra | Earley/LALR(1) | EBNF | ¡Sí! | ¡Sí! | ¡Sí! | ¡Sí! | ¡Sí! (solo LALR) |
CAPA | LALR(1) | BNF | No | No | No | No | No |
PyParsing | CLAVIJA | Combinadores | No | No | No* | No | No |
Perejil | CLAVIJA | EBNF | No | No | No* | No | No |
Parsimonioso | CLAVIJA | EBNF | Sí | No | No* | No | No |
antlr | LL(*) | EBNF | Sí | No | ¿Sí? | Sí | No |
(* Los PEG no pueden manejar gramáticas no deterministas. Además, según Wikipedia, sigue sin respuesta si los PEG realmente pueden analizar todos los CFG deterministas )
Lista completa
Lark utiliza la licencia MIT.
(La herramienta independiente está bajo MPL2)
Lark acepta solicitudes de extracción. Ver Cómo desarrollar Lark
Muchas gracias a todos los que contribuyeron hasta ahora:
Si te gusta Lark y quieres vernos crecer, ¡considera patrocinarnos!
Las preguntas sobre el código se hacen mejor en gitter o en los issues.
Para cualquier otra cosa, pueden comunicarse conmigo por correo electrónico a erezshin en gmail com.
-Erez