PDA

View Full Version : Macchina virtuale


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.

rdefalco
08-02-2006, 23:00
Non sono un esperto, ma come metodo mi sembra ragionevole.