Lark ist ein Parsing-Toolkit für Python, das mit Schwerpunkt auf Ergonomie, Leistung und Modularität entwickelt wurde.
Lark kann alle kontextfreien Sprachen analysieren. Einfach ausgedrückt bedeutet dies, dass es in der Lage ist, fast jede verfügbare Programmiersprache und bis zu einem gewissen Grad auch die meisten natürlichen Sprachen zu analysieren.
Für wen ist es?
Anfänger : Lerche ist sehr experimentierfreudig. Es kann jede Grammatik analysieren, egal wie kompliziert oder mehrdeutig sie ist, und zwar effizient. Außerdem erstellt es für Sie einen annotierten Parse-Baum, der nur die Grammatik und eine Eingabe verwendet, und stellt Ihnen praktische und flexible Tools zur Verarbeitung dieses Parse-Baums zur Verfügung.
Experten : Lark implementiert sowohl Earley (SPPF) als auch LALR (1) und mehrere verschiedene Lexer, sodass Sie je nach Ihren Anforderungen einen Kompromiss zwischen Leistung und Geschwindigkeit finden können. Es bietet außerdem eine Vielzahl anspruchsvoller Funktionen und Dienstprogramme.
Was kann es tun?
Und viele weitere Funktionen. Lesen Sie weiter und finden Sie es heraus!
Am wichtigsten ist, dass Sie mit Lark Zeit sparen und Kopfschmerzen beim Parsen vermeiden.
$ pip install lark --upgrade
Lark hat keine Abhängigkeiten.
Lark bietet Syntaxhervorhebung für seine Grammatikdateien (*.lark):
Dies sind Implementierungen von Lark in anderen Sprachen. Sie akzeptieren Lark-Grammatiken und bieten ähnliche Dienstprogramme.
Hier ist ein kleines Programm zum Parsen von „Hello, World!“ (Oder ein anderer ähnlicher Satz):
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!" ) )
Und die Ausgabe ist:
Tree ( start , [ Token ( WORD , 'Hello' ), Token ( WORD , 'World' )])
Beachten Sie, dass im resultierenden Baum keine Satzzeichen angezeigt werden. Es wird automatisch von Lark herausgefiltert.
Lark ist großartig im Umgang mit Mehrdeutigkeiten. Hier ist das Ergebnis der Analyse des Ausdrucks „Fruchtfliegen wie Bananen“:
Lesen Sie den Code hier und sehen Sie sich hier weitere Beispiele an.
Die vollständige Liste der Funktionen finden Sie hier
Lark ist schnell und leicht (niedriger ist besser)
Weitere Informationen zur Durchführung des Vergleichs finden Sie im JSON-Tutorial.
Ausführliche Benchmarks von Drittanbietern finden Sie im Repo „Python Parsing Benchmarks“.
Bibliothek | Algorithmus | Grammatik | Baut Baum? | Unterstützt Mehrdeutigkeit? | Kommt mit jedem CFG zurecht? | Zeilen-/Spaltenverfolgung | Erzeugt Standalone |
---|---|---|---|---|---|---|---|
Lerche | Earley/LALR(1) | EBNF | Ja! | Ja! | Ja! | Ja! | Ja! (nur LALR) |
PLY | LALR(1) | BNF | NEIN | NEIN | NEIN | NEIN | NEIN |
PyParsing | PFLOCK | Kombinatoren | NEIN | NEIN | NEIN* | NEIN | NEIN |
Petersilie | PFLOCK | EBNF | NEIN | NEIN | NEIN* | NEIN | NEIN |
Sparsam | PFLOCK | EBNF | Ja | NEIN | NEIN* | NEIN | NEIN |
ANTLR | LL(*) | EBNF | Ja | NEIN | Ja? | Ja | NEIN |
(* PEGs können nicht mit nichtdeterministischen Grammatiken umgehen. Außerdem bleibt laut Wikipedia unbeantwortet, ob PEGs wirklich alle deterministischen CFGs analysieren können .)
Vollständige Liste
Lark nutzt die MIT-Lizenz.
(Das eigenständige Tool steht unter MPL2)
Lark akzeptiert Pull-Requests. Siehe So entwickeln Sie Lark
Vielen Dank an alle, die bisher dazu beigetragen haben:
Wenn Sie Lark mögen und uns wachsen sehen möchten, denken Sie bitte darüber nach, uns zu sponsern!
Fragen zum Code stellen Sie am besten auf Gitter oder in den Issues.
Für alle anderen Fragen bin ich per E-Mail unter erezshin at gmail com erreichbar.
-- Erez