Dies ist nicht gerade Hausaufgaben, aber es ist meine Studien im Zusammenhang:Konvertieren eine Grammatik in LL (1) Grammatik: einige Probleme
Eine Grammatik zum Beispiel ist wie:
E -> E + E | E * E | -E | (E) | id
Nach Mehrdeutigkeit zu entfernen wird es (beginnend von der niedrigsten Priorität Operator)
E->-F|F
F->F+G|G
G->G*H|H
H->(E)|id
und nach der Linksrekursion und linken Factoring (in diesem Fall nicht erforderlich) zur Entfernung der letzte LL1 Grammatik ist:
E->-F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
, die eine fehlerfreie Parsertabelle gibt, der gut arbeitet. Jetzt über das Problem nehme an, ich bin vor, die Grammatik ist wie folgt:
E -> E + E | E * E | id = E | (E) | id
Now I Ich bin nicht in der Lage, eine Parsing-Tabelle ohne Konflikte zu generieren, was bedeutet, dass meine letzte Grammatik nicht LL1 ist. Hier sind die Schritte:
nach dem Entfernen Mehrdeutigkeit:
E->id=F|F
F->F+G|G
G->G*H|H
H->(E)|id
und nach der Linksrekursion und linken Factoring entfernen, die Grammatik wird:
E->id=F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
Aber es gibt einen Konflikt in der Parser-Tabelle die ich nicht entfernen kann, was bedeutet, dass es einen Schritt gibt, den ich verpasst habe, oder dass es einen Fehler in den Schritten gibt, die ich nicht finden kann. Bitte sagen Sie mir, was ich falsch gemacht habe und wie ich das beheben kann. Ich arbeite schon lange an diesem Problem.
Unäre Minus-Operator-Priorität ist nicht am niedrigsten, sie ist immer am höchsten für andere binäre Operatoren – ammar26