Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
python:parsy [2021/04/08 16:27] root [Seltsamheiten] |
python:parsy [2021/05/11 19:26] (aktuell) root [Nachteile] |
||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
* für einfachere Parses benutzbar | * für einfachere Parses benutzbar | ||
+ | |||
+ | ===== Vorteile ===== | ||
+ | |||
+ | * komplett in Python geschrieben | ||
+ | * sehr klein | ||
+ | * " | ||
+ | ===== Nachteile ===== | ||
+ | |||
+ | * Bei Fehlermeldungen ist per Default nicht ersichtlich welcher Subparser eigentlich fehlgeschlagen | ||
+ | * kein Syntax-Completion in der IDE, da die eigentlichen Objekte über Methoden-Aufrufe erzeugt werden und nicht direkt instanziert | ||
+ | * Kein einfacher Weg Zeichen aus Primitives auszuschließen -> man kann also nicht einfach sagen: Alle Zeichen, außer ":" | ||
Zeile 32: | Zeile 43: | ||
+ | |||
+ | ====== Parser ====== | ||
+ | |||
+ | * Parser können die Repräsentation eines Elements sein (einem Abschnitt des zur parsenden Zeichenkette) oder eine Kombination aus Parsern | ||
+ | * ein Parser kann auf ein oder mehrere Parser verweisen die weitere Teile des Strings prüfen sollen | ||
+ | * das Verweisen kann auf verschiedene Art und Weise passieren -> durch einen Methoden-Aufruf oder durch Operatoren (die technisch im Hintergrund auch nur Methodenaufrufe sind) | ||
+ | |||
+ | ===== Parser erzeugen ===== | ||
+ | |||
+ | * sie werden durch aufrufen einer Factory-Funktion erstellt die den gewünschten Typ erstellt | ||
+ | |||
+ | <sxh python> | ||
+ | from parsy import regex | ||
+ | |||
+ | a = regex(r" | ||
+ | </ | ||
+ | \\ | ||
+ | In obigem Beispiel erstellt die Funktion regex einen Parser der auf einen regulären Ausdruck prüft. | ||
+ | |||
+ | <WRAP center round box 60%> | ||
+ | Einige mögliche Funktionen die Parser erstellen können: | ||
+ | |||
+ | ^Funktion ^Beschreibung ^ | ||
+ | |regex|Es wird ein regulärer Ausdruck ausgewertet| | ||
+ | |string|Es wird ein String gegen zu prüfenden Wert geprüft| | ||
+ | |char_from|Zeichenkette|Prüfe auf ein Zeichen aus einer Liste von Zeichen (repräsentiert durch eine Zeichenkette). \\ Entspricht das aktuelle Zeichen einem der Zeichen in der angegeben Kette dann ist der Parser erfolgreich| | ||
+ | |string_from|Tuple von Zeichenketten|Prüft ob irgend eine der angegebenen Zeichenketten auf die zu prüfende Zeichenkette zutrifft. \\ Wenn eine passt ist der Parser erfolgreich| | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | <WRAP center round box 60%> | ||
+ | Es gibt auch vorgefertigte Parser-Objekte. Diese können | ||
+ | |||
+ | ^Parser ^Beschreibung ^ | ||
+ | |regex|Es wird ein regulärer Ausdruck ausgewertet| | ||
+ | |string|Es wird ein String gegen zu prüfenden Wert geprüft| | ||
+ | |char_from|Zeichenkette|Prüfe auf ein Zeichen aus einer Liste von Zeichen (repräsentiert durch eine Zeichenkette). \\ Entspricht das aktuelle Zeichen einem der Zeichen in der angegeben Kette dann ist der Parser erfolgreich| | ||
+ | |string_from|Tuple von Zeichenketten|Prüft ob irgend eine der angegebenen Zeichenketten auf die zu prüfende Zeichenkette zutrifft. \\ Wenn eine passt ist der Parser erfolgreich| | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Parser kombinieren ===== | ||
+ | |||
+ | ===== Methoden des Parser-Objektes ===== | ||
+ | |||
+ | * die meisten Methoden erzeugen ein neues Parser-Objekt und geben dieses zurück, dadurch können mehrere Methoden hintereinander duch " | ||
+ | |||
+ | |||
+ | ^Methode ^Parameter ^Beschreibung | ||
+ | |parse|Zeichenfolge|Parst die übergebene Zeichenfolge. Die Regel in Parser oder einer der Parser die der Parser aufruft müssen zusammen die gesamte übergebene Zeichenkette abdecken. Wird sie nicht abgedeckt wird ein ParseError geworfen| | ||
+ | |parse_partial|Zeichenfolge|Parst eine Zeichenfolge | ||
+ | |descr||Fügt eine Beschreibung hinzu für was der Parser steht (also für welche Zeichenfolge). \\ Diese Information wird bei einer Exception ausgegeben statt der Zeichenkette die nicht gefunden wurde. \\ \\ Die Beschreibung kann auch beim Erzeugen des Parsers als zweiter Parameter angeben werden| | ||
+ | |map|Typ|Wandle das Ergebnis des Parsers in den gewünschten Typ um| | ||
+ | |||
+ | |||
+ | ====== Hilfsfunktionen ====== |