2017-05-01 3 views
0

Ich schreibe aus Neugier eine Spielzeugsprache. Ich habe einen funktionierenden Lexer geschrieben, um Token mit einer Anzahl von regulären Ausdrücken zu erstellen.Ist eine Schleife effizienter als Regex in einem Lexer?

Aus Leistungsgesichtspunkten ist es schneller/effizienter, den Quellcode Zeichen für Zeichen zu durchlaufen und die Token herauszufinden oder sollte ich mit Regex bleiben? Nur neugierig wie "richtige" Lexer implementiert sind.

+2

Es hängt wirklich davon ab, wie Sie es implementieren. Eine schlecht geschriebene Schleife wird wahrscheinlich langsamer sein als die Regex, während eine sorgfältig optimierte Schleife wahrscheinlich schneller ist. Für eine Spielzeugsprache würde ich mit dem beginnen, was für Sie einfacher ist und dann andere Ansätze ausprobieren, wenn die Leistung nicht ausreicht. – svick

Antwort

0

Angesichts der Architektur der Computer, die wir verwenden, wird ein Regex mit Schleifen implementiert.

Wenn der Code strukturiert ist, wird es eine Kombination aus so etwas wie eine switch Anweisung innerhalb einer while Anweisung, mit den Fällen in der switch werden die Zustände des Deterministic Finite Automaton darstellt, die die gleiche Sprache wie die Regex erkennt.

Wenn goto erlaubt ist, kann die Umsetzung viel effizienter sein als das, was ein generisches regex Bibliothek tun können.

Sofern Sie keine besonderen Effizienzanforderungen haben, sollte das Festhalten an einer Regex-Bibliothek effizient genug sein, damit Sie viel Zeit beim Programmieren (Debugging) sparen.

+0

Ich schrieb [Grako] (https://pypi.python.org/pypi/grako) und ging mutig für das zugrundeliegende 're' Modul in Pythons Standardbibliothek. – Apalala

Verwandte Themen