Angenommen, ich habe die folgende CFG.Wie finde ich FIRST und FOLLOW-Sätze einer rekursiven Grammatik?
A -> B | Cx | EPSILON
B -> C | yA
C -> B | w | z
Jetzt, wenn ich versuche,
FIRST(C) = FIRST(B) U FIRST(w) U FIRST(z)
= FIRST(C) U FIRST(yA) U {w, z}
zu finden, das heißt, ich bin in einer Schleife gehen. Also nehme ich an, ich muss es in eine Form konvertieren, die sofortige Links Rekursion hat, was ich tun kann, wie folgt.
Wenn ich jetzt versuche, ERSTE Sätze zu berechnen, denke ich, dass ich es wie folgt machen kann.
FIRST(C) = FIRST(C) U FIRST(yA) U FIRST(w) U FIRST(z)
= { y, w, z } // I ignore FIRST(C)
FIRST(B) = FIRST(C) U FIRST(yA)
= { y, w, z }
FIRST(A) = FIRST(B) U FIRST(Cx) U FIRST(EPSILON)
= { y, w, z, EPSILON }
Bin ich richtig dort?
Aber selbst wenn ich genau dort bin, stoße ich immer noch auf ein Problem, wenn ich FOLLE Sätze aus dieser Grammatik berechnen will.
FOLLOW(A) = { $ } U FOLLOW(B) U FOLLOW(C)
Ich bekomme FOLGEN (B) von der 2. Regel und FOLGE (C) von der 3. Regel. Aber jetzt, um FOLLOW (B) zu berechnen, muss ich FOLGEN (A) (von der ersten Grammatikregel), also bin ich wieder in einer Schleife fest.
Irgendwelche Hilfe? Vielen Dank im Voraus!
Verstanden, danke! Das funktioniert wunderbar! – Sach
Danke, Bruder, das hilft mir sehr! – Jiahao
Vielen Dank. Wirklich hat mir geholfen! – Zephyr