Attualmente sto scrivendo un compilatore per una nuova lingua e sto lottando con l'aspetto di collegamento dei nuovi tipi quando esiste un riferimento circolare.
Ho creato un albero delle dipendenze in modo da poter compilare i Tipi nell'ordine delle loro dipendenze che sembrava aver risolto il mio problema ... cioè fino a quando non ho trovato riferimenti circolari come nell'esempio seguente (pubblicato in c #):
public class A
{
public A() { var b = new B(); }
}
public class B
{
public B() { var a = new A(); }
}
Il mio limite è che posso creare solo 1 Tipo alla volta e, nel caso di riferimenti circolari, o A deve essere creato per primo, o B deve essere creato per primo, entrambi i quali rappresentano il problema che posso creare o a meno che non vengano create prima le dipendenze!
Come fanno i compilatori a superare questo?