"Un singolo elemento in un set dipende dall'intero set. L'impostazione dipende da quell'elemento."
Sto creando un compilatore ( link ). Nell'ultima fase, il codice intermedio viene convertito in istruzioni macchina. Li ho rappresentati con le classi IntermediateCode
e MachineCode
.
Per farlo, sto utilizzando il Pattern ospite , che visita ciascuno degli elementi dell'elenco dei codici intermedi. Ogni codice intermedio può emettere uno o più codici macchina.
Funziona perfettamente, ma ho un grosso problema: una delle istruzioni che devono essere generate dipende dall'intero risultato ! Concretamente, c'è un'istruzione che ha bisogno di sapere che l'indice (ordinale) di un'altra istruzione non è ancora stato generato.
In altre parole, devo emettere un'istruzione che significa "spingere l'indirizzo di label X
", quando label X
non è stato ancora emesso. L'indirizzo di tale etichetta sarà conosciuto solo quando tutte le istruzioni sono state emesse.
Illustrare meglio il problema, è simile alla creazione del sommario in un documento. Se vuoi essere in grado di creare il sommario, dove vuoi specificare il numero di pagina di una determinata sezione, devi prima generare tutto il documento, quindi puoi conoscere la pagina di una determinata sezione.
Puoi dirmi un algoritmo o un pattern per risolvere il mio problema? Non so come emettere quelle istruzioni per la correzione in sospeso .
Grazie mille!