Gibt es ein gutes allgemeines Papier über die Interpretation oder Kompilierung von REGEXP in Programmiersprachen für den Mustervergleich mit oder ohne Variablen? Ich bin nicht auf der Suche nach einer kurzen Erklärung zum Aufbau von DFAs, sondern nach einem echten Papier darüber, wie dies bei der Implementierung von Programmiersprachen tatsächlich gemacht wird und was als einfach oder schwierig angesehen wird. Ich gehe davon aus, dass Unterschiede zwischen den Sprachen einen Einfluss haben können. Ein formelles Papier darüber, wie die REGEXP-Implementierung durchgeführt werden sollte, ist ebenfalls nützlich :-)
7
Antworten:
Ich glaube, die meisten interpretierten Matcher für reguläre Ausdrücke beginnen mit Thompsons Konstruktionsalgorithmus , um den regulären Ausdruck in nicht deterministische endliche Automaten umzuwandeln. Der Artikel, der diese zuerst beschrieb, ist: Ken Thompson, "Programmiertechniken: Suchalgorithmus für reguläre Ausdrücke", Communications of the ACM , 11 (6): 419-422, Juni 1968. Aber dieses Papier ist ein wenig schwer zu lesen, da er wurde zu Maschinencode kompiliert.
Mein Lieblings-Tutorial zur Implementierung regulärer Ausdrücke ist diese Reihe von Blog-Posts von Russ Cox , dem Autor der RE2-Bibliothek für reguläre Ausdrücke. Er gibt viele historische Diskussionen. Er argumentiert, dass der effizienteste Ansatz zur Simulation der NFA darin besteht, im laufenden Betrieb in DFA zu konvertieren, wobei nur die DFA-Zustände zwischengespeichert werden, die Sie tatsächlich erreichen. (Im Gegensatz zum Beispiel zur Implementierung regulärer Ausdrücke in Perl, die Backtracking verwenden.) Es gibt Fälle (z. B. wenn Sie erweiterte reguläre Ausdrücke mit Backreferences erhalten), in denen Sie Backtracking verwenden müssen, aber Cox empfiehlt dies Verwenden Sie Backtracking nur, wenn Sie dies benötigen.
Der andere Ort, den Sie vielleicht suchen, ist Henry Spencers Bibliothek für reguläre Ausdrücke . Laut dieser Website wurde dies in dem Buch beschrieben: Dale Schumacher (Hrsg.), Software Solutions In C , Academic Press, 1994.
quelle