Come leggere i conflitti di riduzione / spostamento in LR (1) DFA?

1

Sto leggendo una spiegazione (impressionante "Parsing Techniques" di D.Grune e CJHJacobs, p.293 nella 2a edizione) e sono passato dalla mia ultima domanda: Come ottenere il simbolo lookahead durante la costruzione di LR (1) NFA per parser?

Ora ho un tale "problema" (forse non un problema, ma piuttosto bisogno di conferma da parte di alcune persone più competenti).

Gli autori presentano lo stato in LR (0) che ha un conflitto di riduzione / spostamento. Quindi creano DFA per LR (1) per la stessa grammatica. E ora dicono che fa not avere un conflitto (guarda avanti alla fine):

S -> E .        eof
E -> E . - T    eof
E -> E . - T    -

e c'è un margine da questo stato etichettato - ma non etichettato eof . Gli autori dicono che su eof ci sarà una riduzione, in - ci sarà uno spostamento.

Tuttavia eof è anche per lo spostamento (come lookahead). Quindi la mia comprensione personale di LR (1) DFA è questa: è possibile ignorare i cambiamenti di prospettiva, perché non servono a nulla ora - i turni si basano sull'input, non sui lookaheads e, successivamente, rimuovere i duplicati.

S -> E .        eof
E -> E . - T    

Quindi il lookahead for reduce serve davvero come input, perché in questa fase (tutti gli input richiesti vengono letti) è davvero un simbolo in arrivo in questo momento. Per i turni, i simboli di input sono sui bordi.

Quindi la mia domanda è questa: in effetti ho ragione di perdere lookaheads per i turni (dopo aver completato la compilazione di DFA)?

    
posta greenoldman 29.11.2012 - 22:44
fonte

1 risposta

0

Non importa i lookaheads in forma definitiva in DFA: il prossimo simbolo per lo shift è sul bordo.

    
risposta data 04.12.2012 - 19:57
fonte

Leggi altre domande sui tag