Für eine gegebene kontextfreie Sprache G nennen wir ein Nicht - End NULLABLE wenn A i → * ε , dh wir den leeren String aus ableiten können A i nach einer endlichen Anzahl von Produktionen Anwendung.
Es gibt einen einfachen Algorithmus zum Bestimmen, welche Nichtterminale einer Grammatik nullbar sind, wie hier zu finden ist :
Wir beginnen damit, dass wir alle Nicht-Terminals als nicht nullwertfähig betrachten. Wir markieren alle als nullbar, wenn es eine Produktion A i → ϵ gibt . Wir durchlaufen dann alle anderen Produktionen A i → B 1 B 2 … B k mit Ausnahme von Produktionen mit einem Terminal darin und markieren A i als nullbar, wenn alle B i nullbar sind. Wir machen diese Schleife so lange, bis wir eine Schleife beendet haben, ohne Nichtterminale als nullbar zu markieren.
Mein Problem mit diesem Algorithmus ist, dass er eine Laufzeit von hat: Ein schlimmster Fall ist zum Beispiel A 1 → A 2 , A 2 → A 3 , A 3 → A 4 , ..., A n - 1 → A n , A n → ϵ .
Gibt es einen Algorithmus für dieses Problem mit einer besseren Laufzeit als ?
quelle
Antworten:
Kann man diesen Algorithmus nicht wie folgt in linearer Zeit implementieren? (Warnung, ich habe dies nicht zu sorgfältig Korrektur gelesen, daher sind Fehler wahrscheinlich.)
quelle