Questo non è esattamente i compiti a casa, ma è legato ai miei studi:Conversione di una grammatica in LL (1) grammatica: alcuni problemi
Una grammatica per esempio è come:
E -> E + E | E * E | -E | (E) | id
Dopo aver rimosso l'ambiguità diventa (a partire dal più basso precedenza degli operatori)
E->-F|F
F->F+G|G
G->G*H|H
H->(E)|id
E dopo aver rimosso la ricorsione sinistra e factoring di sinistra (non necessario in questo caso) la grammatica finale LL1 è:
E->-F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
che dà una tabella di parser privo di errori che funziona bene. Ora circa il problema che sto affrontando, si supponga che la grammatica è come questo:
E -> E + E | E * E | id = E | (E) | id
Ora non sono in grado di generare una tabella di analisi senza conflitti, il che significa che la mia grammatica finale non è LL1. Ecco i passaggi:
dopo la rimozione ambiguità:
E->id=F|F
F->F+G|G
G->G*H|H
H->(E)|id
e dopo la rimozione della ricorsione sinistra e factoring sinistra, la grammatica diventa:
E->id=F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
Ma c'è un conflitto nella tabella Parser che non sono in grado di rimuovere, il che significa che c'è un passo che ho perso, o c'è qualche errore nei passaggi che non sono in grado di trovare. Per favore dimmi cosa ho fatto di sbagliato e come risolvere questo problema. Ho lavorato su questo problema da molto tempo ormai.
La precedenza dell'operatore Unario meno non è la più bassa, è la più alta sempre su altri operatori binari – ammar26