Lark est une boîte à outils d'analyse pour Python, conçue en mettant l'accent sur l'ergonomie, les performances et la modularité.
Lark peut analyser toutes les langues sans contexte. Pour le dire simplement, cela signifie qu'il est capable d'analyser presque tous les langages de programmation, et dans une certaine mesure, la plupart des langages naturels également.
C'est pour qui ?
Débutants : Lark est très convivial pour l'expérimentation. Il peut analyser n'importe quelle grammaire que vous lui proposez, aussi complexe ou ambiguë soit-elle, et ce, de manière efficace. Il construit également un arbre d'analyse annoté pour vous, en utilisant uniquement la grammaire et une entrée, et il vous offre des outils pratiques et flexibles pour traiter cet arbre d'analyse.
Experts : Lark implémente à la fois Earley(SPPF) et LALR(1), ainsi que plusieurs lexers différents, afin que vous puissiez faire un compromis entre puissance et vitesse, en fonction de vos besoins. Il fournit également une variété de fonctionnalités et d'utilitaires sophistiqués.
Que peut-il faire ?
Et bien d’autres fonctionnalités. Lisez à l’avance et découvrez !
Plus important encore, Lark vous fera gagner du temps et vous évitera des maux de tête lors de l'analyse.
$ pip install lark --upgrade
Lark n'a aucune dépendance.
Lark fournit une coloration syntaxique pour ses fichiers de grammaire (*.lark) :
Ce sont des implémentations de Lark dans d’autres langages. Ils acceptent les grammaires Lark et fournissent des utilitaires similaires.
Voici un petit programme pour analyser "Hello, World!" (Ou toute autre phrase similaire) :
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!" ) )
Et le résultat est :
Tree ( start , [ Token ( WORD , 'Hello' ), Token ( WORD , 'World' )])
Notez que la ponctuation n’apparaît pas dans l’arborescence résultante. Il est automatiquement filtré par Lark.
Lark est doué pour gérer l’ambiguïté. Voici le résultat de l’analyse de l’expression « les fruits volent comme les bananes » :
Lisez le code ici et voyez plus d'exemples ici.
Voir la liste complète des fonctionnalités ici
Lark est rapide et léger (plus bas est mieux)
Consultez le didacticiel JSON pour plus de détails sur la façon dont la comparaison a été effectuée.
Pour des benchmarks tiers approfondis, consultez le dépôt Python Parsing Benchmarks.
Bibliothèque | Algorithme | Grammaire | Construit un arbre ? | Supporte l'ambiguïté ? | Peut-il gérer tous les CFG ? | Suivi de ligne/colonne | Génère de manière autonome |
---|---|---|---|---|---|---|---|
Alouette | Early/LALR(1) | EBNF | Oui! | Oui! | Oui! | Oui! | Oui! (LALR uniquement) |
PLI | LALR(1) | BNF | Non | Non | Non | Non | Non |
PyParsing | CHEVILLE | Combinateurs | Non | Non | Non* | Non | Non |
Persil | CHEVILLE | EBNF | Non | Non | Non* | Non | Non |
Parcimonieux | CHEVILLE | EBNF | Oui | Non | Non* | Non | Non |
ANTLR | LL(*) | EBNF | Oui | Non | Oui? | Oui | Non |
(* Les PEG ne peuvent pas gérer les grammaires non déterministes. De plus, selon Wikipedia, il reste sans réponse si les PEG peuvent réellement analyser tous les CFG déterministes .)
Liste complète
Lark utilise la licence MIT.
(L'outil autonome est sous MPL2)
Lark accepte les pull-requests. Voir Comment développer Lark
Un grand merci à tous ceux qui ont contribué jusqu'à présent :
Si vous aimez Lark et souhaitez nous voir grandir, pensez à nous parrainer !
Il est préférable de poser les questions sur le code sur Gitter ou dans les numéros.
Pour toute autre chose, je suis joignable par email à erezshin at gmail com.
--Erez