Ich studiere vor kurzem über das Entwerfen von Compilern. Ich habe zwei Arten von Grammatik kennengelernt: die LL-Grammatik und die LR-Grammatik.
Wir kennen auch die Tatsachen, dass jede LL-Grammatik LR ist, das heißt, LL-Grammatik ist eine richtige Teilmenge der LR-Grammatik. Die erste Methode wird beim Parsen von oben nach unten und die zweite beim Parsen von unten nach oben verwendet.
Aber gibt es eine Möglichkeit, zu sagen, dass eine bestimmte Grammatik LL oder LR ist?
Antworten:
und L R ( k ) -Grammatiken sind nicht nur deshalb schön, weil sie effizient analysiert werden können, sondern auch, weil wir überprüfen können, ob eine Grammatik L L ( k ) oder L R ( k ) ist.LL(k) LR(k) LL(k) LR(k) , und weil wir Tabellen für sie generieren können (Analysetabellen werden zum Analysieren von Eingabezeichenfolgen verwendet). Beachten Sie, dass Sie bei diesen beiden Klassen anhand der Analysetabelle sofort überprüfen können, ob die Grammatiken in den Klassen enthalten sind, da dies genau dann der Fall ist, wenn die Tabellen keine Fehler enthalten. Ja, es gibt auch Grammatikklassen, die wir effizient analysieren können, wenn wir eine Analysetabelle haben, für die wir die Tabelle jedoch nicht generieren können, wenn sie existiert.
In jedem Lehrbuch über Parsing-Methoden erfahren Sie, wie Sie Tabellen für -Methoden und möglicherweise auch für L R ( 1 ) generieren (obwohl S L R ( 1 ) häufiger vorkommt). Lehrbücher wie Parsing Theory von Sippu und Soisalon-Soininen behandeln auch die Generierung von Analysetabellen für L L ( k ) - und L R ( k ) -Grammatiken.LL(1) LR(1) SLR(1) LL(k) LR(k)
quelle
Wir müssen nur überprüfen, ob eine Grammatik LL ist oder nicht, weil jede LL-Grammatik LR ist, das heißt, LL ist die richtige Teilmenge von LR. Wenn also eine Grammatik LL ist, muss sie LR sein, aber nicht jedes LR ist LL.
Eine Grammatik G ist in LL, wenn wann immer A-> C | D, die folgende Bedingung gelten sollte:
quelle