Ich habe versucht, eine Frage für die Praxis zu lösen, aber ich stieß auf ein Problem, als ich versuchte, die Beispielantwort mit meiner zu vergleichen. Hier ist die Grammatik vor der Konvertierung:konvertieren in LL (k) Grammatik
E-> S*
S-> SD
S-> D
D-> [D]
D-> x
Das Startsymbol ist E
und die andere Nicht-Terminal-Symbole sind S
und D
.
Meine Antwort ist:
E-> S*
S-> DS'
S'-> DS'
S'->
D-> [D]
D-> x
In der Probe Antwort, sie S-> DS'
nicht haben, und E wird E-> DS'*
. Aufgrund der im Buch verwendeten Methoden für die linke Rekursion Entfernen
A -> Aa
A -> b
=> A -> bA'
A' -> aA'
A' ->
soll es ein S-> DS'
sein. Ich bin jetzt verwirrt darüber und vielleicht habe ich diese Methode einfach nicht verstanden. Könnte mir jemand dazu einen Hinweis geben? Und könntest du mir bitte auch die Bedeutung des Sternsymbols *
hier mitteilen? Danke vielmals!
Vielen Dank für Ihre Antwort! – dajavanoob
Ohne den Text zu sehen, in dem dieses Beispiel erscheint, scheint es unwahrscheinlich, dass 'S *' der Kleene-Stern sein soll. Erstens würde es die Grammatik mehrdeutig machen (weil "S" effektiv "D *" ist) und zweitens, weil CFGs normalerweise nicht mit Kleene-Sternen geschrieben werden (daher die Rekursion in der Produktion für "S"). Es scheint mir wahrscheinlicher, dass der Text 'S *' als idiosynkratische Notation für "S" gefolgt vom Ende der Eingabe verwendet, was die meisten von uns "S $' "schreiben würden. – rici
Das könnte gut sein. Es könnte auch ein wörtliches '*' Zeichen bedeuten. Aus den Informationen in der Frage ist es schwer zu sagen. Ich habe die Antwort bearbeitet. – flyx