Kaldais
08-02-2006, 16:40
.. saluti!
In questi giorni mi sto dilettando nel creare una piccola macchina virtuale che interpreterà il simil-codice macchina che un linguaggio andrà a creare.
L'idea che ho in testa, che poi è quella suggeritomi anche dal mio professore d'informatica, è questa:
* una classe astratta (ad esempio Istruzione) cui tutte le mie istruzioni implementeranno contenente un metodo di tipo esegui();
* ogni istruzione è appunto una classe che eredita da quella astratta e va a reimplementare il metodo esegui();
* la classe principale, la macchina virtuale, che ha in ingresso un array di tipo Istruzione con tutti i comandi e che quindi fa una chiamata polimorfa al famoso esegui();
Un esempio di programma può essere questo:
class Esempio{
public static void main(String[] args){
Istruzione[] programma = {
new Input(),
new Incr(),
new Incr(),
new Output(),
new Alt()
};
Macchina machine = new Macchina(programma, 10);
machine.interpreta();
}
}
Ovviamente per ora la macchina virtuale ha solo un registro (Input() ed Output() fanno riferimento ad una sola variabile) ed è molto limitata.
La domanda è: è questo il metodo migliore o è presente anche un altro più efficiente? Avete idee o proposte?
Bisogna tener conto che farà il codice farà questi passaggi:
linguaggio inventato -> linguaggio macchina inventato -> java -> virtual machine java -> codice macchina
Insomma, si farà un bel giro .. e quello che cerco è appunto efficienza per non avere tanti colli di bottiglia.
In questi giorni mi sto dilettando nel creare una piccola macchina virtuale che interpreterà il simil-codice macchina che un linguaggio andrà a creare.
L'idea che ho in testa, che poi è quella suggeritomi anche dal mio professore d'informatica, è questa:
* una classe astratta (ad esempio Istruzione) cui tutte le mie istruzioni implementeranno contenente un metodo di tipo esegui();
* ogni istruzione è appunto una classe che eredita da quella astratta e va a reimplementare il metodo esegui();
* la classe principale, la macchina virtuale, che ha in ingresso un array di tipo Istruzione con tutti i comandi e che quindi fa una chiamata polimorfa al famoso esegui();
Un esempio di programma può essere questo:
class Esempio{
public static void main(String[] args){
Istruzione[] programma = {
new Input(),
new Incr(),
new Incr(),
new Output(),
new Alt()
};
Macchina machine = new Macchina(programma, 10);
machine.interpreta();
}
}
Ovviamente per ora la macchina virtuale ha solo un registro (Input() ed Output() fanno riferimento ad una sola variabile) ed è molto limitata.
La domanda è: è questo il metodo migliore o è presente anche un altro più efficiente? Avete idee o proposte?
Bisogna tener conto che farà il codice farà questi passaggi:
linguaggio inventato -> linguaggio macchina inventato -> java -> virtual machine java -> codice macchina
Insomma, si farà un bel giro .. e quello che cerco è appunto efficienza per non avere tanti colli di bottiglia.