Python-Bibliothek zur Phrasen- / Syntaxanalyse (erste Umfrage 2014.11, teilweise Hinzufügung 2019.10)

06.10.2019 Nachtrag

Ich kann nicht mit linksrekursiv umgehen, aber PEG-Parser sind heutzutage sehr beliebt. Für Python gibt es https://github.com/erikrose/parsimonious und https://github.com/KuramitsuLab/pegpy.

Motivation zur Untersuchung

Ich wollte die Formel analysieren, die im Theorem Proof Support System namens Coq https://coq.inria.fr/ verwendet wird. Also habe ich mir einige der Python-Tools zur Analyse von Phrasen und Syntax angesehen.

Evaluationskriterien

Die Grammatik der Coq-Ausdrücke ist ziemlich kompliziert (gemäß der Grammatikdefinition handelt es sich um eine linksrekursive Grammatik [^ 1], die einen Blick nach vorne erfordert). Daher wurden bei der Auswahl die folgenden Punkte verwendet. Wenn Sie mit anderen Grammatiken umgehen möchten, ist dies natürlich ein anderes Kriterium.

Nachfolgend finden Sie die Umfrageergebnisse.

[^ 1]: Eine Grammatik mit Regeln wie "expr :: = expr" + "term". Es ist theoretisch möglich, es in eine Grammatik umzuschreiben, die keine Rekursion hinterlassen hat, aber ich möchte es nicht mit einer großen Grammatik wie Coq tun, und ich möchte keine menschlichen Fehler machen.

Ein neues

pyparsing (2.2.0) 2017/03 Syntaxanalysebibliothek. Ein auf Parser-Kombinatoren basierender Ansatz, der Syntaxanalyseregeln erstellt, indem Klassen wie "OneOf", "Optional" und "Group" kombiniert werden. Es ist sehr einfach, "verschachtelte Kommentare" zu definieren, was bei der grammatikalischen Gestaltung von Programmiersprachen problematisch ist. Es ist sehr einfach, die Sprachklasse anzugeben, aber da die linke rekursive Grammatik nicht so behandelt werden kann, wie sie ist, ist ein gewisser Einfallsreichtum erforderlich. Verwendung von Pyparsing: http://masato.github.io/2014/07/01/python27-etl-pyparsing-syntactic-analysis/

PLY (Python Lex-Yacc) (3.11) 2018/02 Python-Version von Lex / Yacc, einem bekannten Tool zur Analyse von C-Phrasen / Syntax. Dies bedeutet, dass eine ähnliche Grammatikdefinitionssyntax verwendet werden kann. Die LALR (1) -Syntaxanalyse wird grundsätzlich zur Analyse verwendet. Hauptsitz: http://www.dabeaz.com/ply/ Referenz: http://blog.livedoor.jp/shf0811/archives/7346881.html

parse (1.6.6; 2014/11) Eine Mustervergleichsbibliothek, die das Gegenteil von "String.format ()" funktioniert. Referenz: http://coreblog.org/ats/python-parse/

Alt / nicht mehr

Yapps (2.2.0) 2014/06
Erweiterter LL (1) -Parser. Anscheinend gibt es keinen Blick nach vorne, so dass es nicht zum Parsen in komplizierten Sprachen geeignet ist. Referenz: https://github.com/mk-fg/yapps
jupyLR (0.3) 2012/06
Generalisierter LR-Parser. Mehrere Syntaxbäume können ausgegeben werden, wenn die Syntax durch die Suche nach Breitenpriorität nicht eindeutig ist. Dies ermöglicht es, Konflikte zu reduzieren / zu reduzieren, die vom LR-Parser nicht behandelt werden können. Hauptsitz: http://bl0b.github.io/jupyLR/
plex
Flex-ähnliches Phrasenanalysetool. Die Entwicklung scheint bei 2.0.0 dev gestoppt zu sein: https://pythonhosted.org/plex/
SimpleParse
Seit 2011 nicht aktualisiert: http://simpleparse.sourceforge.net/
SPARK
Aktualisierungsstatus unbekannt. Irreführender Name mit anderen Bibliotheken: http://pages.cpsc.ucalgary.ca/~aycock/spark/
PyLR
Es sieht aus wie eine berühmte Bibliothek vor 2000, ist aber jetzt nicht da.
FlexModule, BisonModule
Diese scheinen jetzt auch nicht zu existieren. Dies scheint ein Wrapper für Cs Flex und Bison gewesen zu sein.
re.Scanner (eingebaut)
Es war eine Phrasenanalyseklasse mit regulären Ausdrücken, aber es scheint, dass sie aus Python 3.4 verschwunden ist.

Zusammenfassung,

Scheint gut zu sein.


Ist es doch das stärkste von ANTLR?

Außerdem sucht PLY nur nach einem Token. Wenn Sie eine komplizierte Grammatik schreiben möchten, ist dies fast eine Option von ANTLR (Java-Tool), das die LL (*) -Syntaxanalyse verwendet. Zum Beispiel kann die Grammatik von Coq, einem Theorem-Proof-Support-System, von ANTLR leicht analysiert werden. ANTLR v4 kann einen Parser für Python 2/3 generieren. Außerdem scheint der Python-Wrapper von ANTLR in PyPI zu sein.

Recommended Posts

Python-Bibliothek zur Phrasen- / Syntaxanalyse (erste Umfrage 2014.11, teilweise Hinzufügung 2019.10)
Python-Standardbibliothek: Erste Hälfte (Python-Lernnotiz ⑧)
Python 3.6 E-Mail-Bibliothek
Erster Python
Python ast Bibliothek
Erster Python 3 ~ Erster Vergleich ~
Erster Python
Python Library Hinweis
Erste Python ~ Codierung 2 ~
Erste Python [O'REILLY]
Verwenden Sie die eingeschränkte MeCab-Analyse (Teilanalyse) in Python über natto-py