LR(k)-Grammatik

Aus testwiki
Zur Navigation springen Zur Suche springen

In der theoretischen Informatik und dem Compilerbau bezeichnet LR(k)-Grammatik eine spezielle kontextfreie Grammatik, welche die Grundlage eines LR-Parsers bildet.

Man nennt eine kontextfreie Grammatik LR(k)-Grammatik, wenn jeder Reduktionsschritt eindeutig durch k Symbole der Eingabe (sogenannter Lookahead) bestimmt ist. Das bedeutet, die Frage, zu welchem Nichtterminalsymbol mit welcher Regel als Nächstes reduziert werden soll, kann eindeutig mit Hilfe der nächsten k Symbole der Eingabe bestimmt werden.

Ein Unterschied der Sprachklasse, die mit LR(k)-Grammatiken beschrieben werden kann, zeigt sich nur für die beiden Fälle k=0 und k>0. Die Ausdrucksstärke von kontextfreien Grammatiken wird von LR(1) nicht erreicht. Damit gibt es für alle k kontextfreie Grammatiken, zu denen es keine äquivalente LR(k)-Grammatiken gibt, zum Beispiel eine inhärent mehrdeutige Sprache. Man nennt die durch LR(k)-Grammatiken definierte Sprachklasse auch deterministisch kontextfreie Sprachen.

(LR(0))(LR(1))=(LR(2))==(DPDA)(PDA) (DPDA = Deterministic Push-Down Automaton, PDA = Push-Down Automaton)

Formale Definition LR(k)-Grammatik

Eine kontextfreie Grammatik G=(N,Σ,P,S) ist LR(k)-Grammatik genau dann, wenn für alle Rechtsreduktionen der Form

αβw rαAw r*
S
γδx rγBx r*

mit

w,xΣ*;α,β,γ,δ(NΣ)*;A,BN

und

first|αβ|+k(αβw)=first|αβ|+k(γδx)

gilt:

α=γ, A=B sowie β=δ

Siehe auch