Die klassische dragon book erklärt sehr gut, wie LR-Parser arbeiten. Es gibt auch Parsing Techniques. A Practical Guide., wo Sie über sie lesen können, wenn ich mich gut erinnere. Der Artikel in Wikipedia (zumindest die Einleitung) ist nicht richtig. Sie wurden von Donald Knuth erstellt, und er erklärt sie in seinem Buch The Art of Computer Programming 5. Wenn Sie Spanisch verstehen, gibt es eine komplette Liste der Bücher here von mir gepostet. Nicht alle diese Bücher sind auch auf Spanisch.
Bevor Sie verstehen, wie sie funktionieren, müssen Sie ein paar Konzepte wie erstens, folgen und Lookahead verstehen. Außerdem empfehle ich Ihnen, die Konzepte hinter LL-Parsern zu verstehen, bevor Sie versuchen, LR (Aszendent) Parser zu verstehen.
Es gibt eine Familie von Parser LR, speziell LR (K), SLR (K) und LALR (K), wobei K ist, wie viele Lookahead sie arbeiten müssen. Yacc unterstützt LALR (1) Parser, aber Sie können Tweaks machen, nicht Theorie basiert, um es mit leistungsfähigeren Arten von Grammatiken arbeiten zu lassen.
Über die Leistung hängt es von der zu analysierenden Grammatik ab. Sie werden in linearer Zeit ausgeführt, aber wie viel Speicherplatz sie benötigen, hängt davon ab, wie viele Zustände Sie für den letzten Parser erstellen.
+1 ich die gleiche Sache fragen haben. Rekursive Abstiegsparser sind so leicht zu verstehen, aber so schwer, richtig zu kommen. LR-Parser sind einfach mit einem Generator zu schreiben (wie YACC), aber ich habe nie wirklich verstanden, wie es "unter der Haube" funktioniert. – Zifre
Happy "Nette Frage" Abzeichen :) –