Domanda

Come vengono generalmente aggiunte le produzioni di errori? Sto riscontrando il problema che le mie produzioni di errori sono troppo superficiali: quando il parser inizia a far scoppiare gli stati su un errore in una dichiarazione, si verifica fino a quando non colpisce la produzione di errore per la sezione in cui si trova e stampa un errore non valido Messaggio.

È una buona idea aggiungere solo un po 'di produzione di errori descrittivi a ogni non terminal?

È stato utile?

Soluzione

Le produzioni di errore riguardano il recupero da un errore al fine di tentare di continuare a elaborare l'input, non sulla stampa di messaggi di errore ragionevoli o utili. Pertanto dovrebbero essere usati in punti della grammatica in cui è probabile che sia possibile riconoscere e risincronizzare correttamente il flusso di input. Ad esempio, se la tua lingua è costituita da una sequenza di costrutti che terminano ; personaggi, una buona produzione di errori è qualcosa di simile construct: error ';', che si riprenderà dagli errori in a construct (qualunque cosa sia) saltando in avanti nell'input a a ; e tentare di andare avanti da lì.

Mettere molte regole di recupero degli errori è generalmente una cattiva idea, dal momento che il parser si riprenderà solo a quello più vicino, ed è spesso il più globale ai massimi livelli che hanno maggiori probabilità di essere utili e che cercano di usare una granularità più fine porterà per errori cascate poiché le regole di recupero degli errori non possono risincronizzare con l'input correttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top