PDA

View Full Version : [Java] creare un compilatore


Pingu1084
03-09-2008, 07:21
C'è qualcuno che sappia spiegarmi come creare un compilatore?
Io cercando un po' ho trovato il codice per modificare i file, ma non capisco come devono diventare i file una volta compilati.

variabilepippo
03-09-2008, 11:20
Un qualsiasi compilatore poggia su una montagna di teoria... Qual è il tuo background culturale in merito? :)

Pingu1084
03-09-2008, 20:19
Io credo di poterci riuscire, in quanto conosco gia abbastanza (credo) di java ed imparo in fretta.

71104
03-09-2008, 20:50
dipende moltissimo anche dal linguaggio che devi compilare: per esempio, credo che non riusciresti mai a creare un compilatore C++, mentre un compilatore Python è già più possibile; un compilatore Brainfuck invece è una cazzata :D

poi devi anche decidere se vuoi tradurre il linguaggio in bytecode o se vuoi creare un vero file eseguibile: nel qual caso non hai più carta bianca, ma devi creare un vero e proprio linker seguendo le specifiche del formato PE/COFF.

per quanto riguarda il "come"... è vero che c'è molta teoria dietro, ma è anche vero che si tratta di un programma come un altro: un compilatore non fa altro che... leggere dei files e scriverne un altro. solo che è un programma estremamente complesso dal punto di vista algoritmico.

Pingu1084
04-09-2008, 07:52
dipende moltissimo anche dal linguaggio che devi compilare: per esempio, credo che non riusciresti mai a creare un compilatore C++, mentre un compilatore Python è già più possibile; un compilatore Brainfuck invece è una cazzata :D

poi devi anche decidere se vuoi tradurre il linguaggio in bytecode o se vuoi creare un vero file eseguibile: nel qual caso non hai più carta bianca, ma devi creare un vero e proprio linker seguendo le specifiche del formato PE/COFF.

per quanto riguarda il "come"... è vero che c'è molta teoria dietro, ma è anche vero che si tratta di un programma come un altro: un compilatore non fa altro che... leggere dei files e scriverne un altro. solo che è un programma estremamente complesso dal punto di vista algoritmico.

Io stavo pensando di crearlo per Java micro edition (la versione di java ridotta per cellulari).

Non so quanto voi ve ne intendiate, ma comunque si creano 2 file, il file *.jad che è semplicissimo ed ho gia capito come va creato. Poi c'è il file *.jar che è un archivio apribile con winrar e contiene tutti i file compilati (*.class) e i possibili file aggiuntivi (*png, *.avi, ecc.).

Quindi dovrebbe bastare sapere come si creano i file *.class ed il file *.jar.

71104
04-09-2008, 10:16
"non so quanto voi ve ne intendiate" detta da te è bellissima :asd:

a parte il fatto che se tu volessi essere del tutto esaustivo creare il jar potrebbe non essere così semplice in quanto dovresti studiare un algoritmo di compressione; ma poi quello è l'ultimissimo dei problemi: i files class come li generi? sono in bytecode, devi generare il bytecode facendo il parsing del codice Java, e Java non è un linguaggio semplicissimo. non è un problema di tecnica, è un problema prevalentemente algoritmico: un compilatore è un programma complesso.

per il resto non sto assolutamente dicendo che dovresti desistere: se vuoi scrivere un compilatore Java in Java comincia subito e buon lavoro :)
qual è il problema?

khelidan1980
04-09-2008, 10:30
Io stavo pensando di crearlo per Java micro edition (la versione di java ridotta per cellulari).

Non so quanto voi ve ne intendiate, ma comunque si creano 2 file, il file *.jad che è semplicissimo ed ho gia capito come va creato. Poi c'è il file *.jar che è un archivio apribile con winrar e contiene tutti i file compilati (*.class) e i possibili file aggiuntivi (*png, *.avi, ecc.).

Quindi dovrebbe bastare sapere come si creano i file *.class ed il file *.jar.

si un po come dire mi basta sapere come si creano i file .exe e poi sono a posto!
A parte tutto ma cosa hanno di male le vm della Sun?
E cmq se proprio ti riferisci ad un compilatore c'è già un gran progetto,puoi aggregarti:

http://gcc.gnu.org/java/

franksisca
04-09-2008, 23:33
sai cos'è una grammatica?

magix2003
05-09-2008, 07:24
L'idea di partire subito costruendo un compilatore per un linguaggio ad oggetti è malsana. Parti da un linguaggio imperativo, fai una versione personalizzata di C o Pascal.

Sembra una cavolata, ma fidati che non lo è.

shinya
05-09-2008, 08:22
Meglio: comincia da un interprete per espressioni tipo:

3 * (10 + 15) / 5

poi aggiungi la possibilità di definire variabili:

a = 10
b = 15
c = 5
3 * (a + b) / 5

poi se vedi che ti piace, vai avanti con cose più complesse...

cdimauro
05-09-2008, 09:21
Se poi usa lo strumento giusto (http://www.antlr.org/) è anche meglio. :D