Ich habe lex/yacc verwendet und jetzt versuche ich auf ANTLR zu wechseln. Das Hauptproblem ist, dass ANTLR ein LL (*) Parser ist, anders als yacc, was LALR ist. Ich bin es gewohnt, von unten nach oben zu denken, und ich weiß nicht genau, was der Vorteil von LL-Grammatiken ist. Die Leute sagen, dass LL-Grammatiken heutzutage leichter zu verstehen und populärer sind. Aber es scheint, dass LR-Parser stärker sind, z.B. LL-Parser sind nicht in der Lage, mit Linksrekursionen umzugehen, obwohl es einige Problemumgehungen zu geben scheint.LALR vs LL Parser
Die Frage ist also, was ist der Vorteil von LL-Grammatiken gegenüber LALR? Ich würde es begrüßen, wenn mir jemand ein paar Beispiele geben könnte. Links zu nützlichen Artikeln wären auch toll.
Vielen Dank für Ihre Hilfe im Voraus!
(sehe ich eine große Ressource ist. What advantages do LL parsers have over LR parsers?, aber es wäre mit einigen Beispielen besser gewesen ist)
Wenn jemand Ihnen den Parser-Generator übergibt, ist per Definition "einfach zu implementieren". In diesem Fall wählen Sie den Parser-Generator, der problemlos die größte Klasse von Sprachen verarbeiten kann, um Ihren Aufwand zu minimieren. Aus der Perspektive, IMHO, LR gewinnt LL ziemlich handlich. GLR gewinnt LR ziemlich gut. –
Ich stimme zu, aber dennoch LL sind immer noch einfach zu implementieren. Ich habe darauf hingewiesen, dass LR normalerweise ein Werkzeug benötigt. Ich finde es sehr faszinierend, dass du rekursive Abstammung schreiben kannst und der Code und die Grammatik Hand in Hand gehen. –
Ja, seine faszinierenden Parser für People Building sollten über sie Bescheid wissen. Wenn Ihre Grammatiken groß werden, ist es unpraktisch, sie in LL-Form zu zwingen, und bei einer (ziemlich kleinen) Punkt-Annehmlichkeit gewinnt LR die konzeptuelle Einfachheit in Ihrem Kopf. LR ist ziemlich einfach zu verstehen, wenn Sie nicht den Parser-Generator erstellen, und es ist nicht so, dass es nicht viele von ihnen gibt. –