Domanda

Nel linguaggio di riferimento in avanti come C #, come fa il compilatore gestire questo? Quali sono i passi in cui il compilatore operano?

È stato utile?

Soluzione

La differenza principale tra consentire avanti riferimento o non utilizza un un compilatore passaggio o un multi passaggio singolo. Naturalmente per gestire in avanti riferimento si controlla i simboli e le definizioni non typechecking DOPO che hanno generato il pieno albero sintassi astratta della sorgente che si sta compilando.

Quindi, non c'è nessun problema, la prima volta che trova un riferimento in avanti è sufficiente contare che sarà definito successivamente (è possibile contrassegnare come in attesa nella tabella dei simboli), poi quando si trova la definizione stessa di perfezionare l'oggetto simbolo a simbolo tavolo.

Dopo si può TYPECHECK o controllare se alcuni simboli sono ancora pendenti (quindi non c'è una vera definizione, e si può sollevare un errore semantico) ..

Altri suggerimenti

Lo fa fare due passaggi di compilazione. Il primo passaggio analizza il codice e raccoglie tutti gli identificatori utilizzati. Il secondo passaggio risolve tutti gli identificatori.

In una lingua con un unico compilatore passaggio, come Pascal, solo all'indietro i riferimenti possono essere usati come il tipo di un identificatore devono essere conosciuti prima che possa essere risolto.

esattamente nello stesso modo in cui C ++ gestisce, credo, unica differenza:. La sintassi è abbastanza semplice che il compilatore può costruire l'albero di analisi senza bisogno di dire quale tipo di oggetto sintattico vostri simboli ancora non dichiarati si riferiscono a

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