2010-04-12 3 views
8

sto cercando il codice sorgente di un compilatore in grado di creare i programmi Win32 da un programma di ingresso in un linguaggio di programmazione (non importa quale, forse il più semplice il migliore)Esempio compilatori

Eppure posso Non trovo niente di giusto per me e enormi compilatori come GCC mi rendono estremamente confuso visto che hanno così tante funzioni che non so da dove cominciare.

  • C'è un micro-compilatore OpenSource Win32 per un po 'di linguaggio di programmazione che potrei dare un'occhiata?
+3

Dai un'occhiata a questa domanda: http://stackoverflow.com/ questions/1669/learning-to-write-a-compiler –

+0

Questa è una lista di libri. – saf

+0

Attualmente sto sviluppando un compilatore per la mia lingua per la piattaforma Win32. Vi consiglio di leggere sul file header PE e di prendere una copia del manuale di riferimento Intel x86 per l'implementazione di opcode. Quindi è necessario creare un livello di "astrazione" dell'esecuzione e utilizzare questo modello per creare previsioni dello stato del processore per produrre un assembly valido. – Pindatjuh

risposta

4

http://en.wikipedia.org/wiki/List_of_compilers scelto quelli con il tipo di licenza "open source"

+0

Questi sono i tipi di compilatori che non mi aiutano. Come ti aspetti che scavassi attraverso diecimila righe di codice solo per scoprire le basi? – saf

+0

pensi che ci siano compilatori con un numero di codici inferiore a 10? ho la sensazione che non ce ne siano. – Andrey

+0

C'è un sacco di tali compilatori. Se togli la sintassi e l'ottimizzazione complesse, un compilatore non è così complicato. Certo, un compilatore del genere non è così utile per l'effettivo lavoro di codifica, ma è l'ideale per imparare le basi su come funzionano i compilatori. –

0

gas può trasformarsi linguaggio assembly in codice oggetto, che ld possono poi collegarsi con i tempi di esecuzione appropriate per generare un programma.

+3

Nessuno dei due è un compilatore. – WhirlWind

+0

Downvoted in accordo con WhirlWind. – Kawa

+0

Assembler è un compilatore, per definizione. Aumento di voti in disaccordo con downvoters. E sì, se stai implementando un compilatore, non dovresti preoccuparti del formato dei file PE - non è un lavoro di compilatori, è un lavoro di collegamento. –

2

Suggerirei di prendere un manuale di compilatori. Spiegano tutti i componenti richiesti di un compilatore e di solito sviluppano un compilatore dall'inizio alla fine.

Possiedo una copia di Modern Compiler Implementation in Java dal mio corso di compilatore e ne sono abbastanza soddisfatto.

0

Se il tuo obiettivo è quello di imparare come funzionano i compilatori e/o come codificare, è davvero dovrebbe leggere un libro sull'argomento. Tuttavia, quando si cercano campioni di codice sorgente, provare campioni di compilatori Pascal come this one.

Pascal ha una grammatica un po 'semplice ed è implementato in molti libri.

0

Il linguaggio di programmazione più semplice è Assembly, x86-assembly per la precisione. L'assemblatore più famoso, NASM, è open source; è possibile controllare di essa la fonte presso:

http://repo.or.cz/w/nasm.git

NASM ha macro di che sono davvero "compilato" in dichiarazioni assembler. Anche se non è un linguaggio completo, è focalizzato sulle basi.

0

Suggerirei di cercare una sorgente di compilazione Pascal, C o SmallC per MS-DOS (16-bit). Soprattutto se si limitano alla modalità reale piatta a 16 bit (< = 64 KB di memoria), dovrebbero essere abbastanza semplici.

Il supporto per la modalità reale segmentata aggiunge una grande quantità di complessità che sarebbe meglio evitare ed è irrilevante per il programma in modalità a schermo piatto a 32 bit (programmazione a 32 bit non OS).

Per un processore non x86, il programma di esempio per la serie di articoli di Jack Crenshaw "Let's Build a Compiler", che è un compilatore di sintassi simile a Pascal che utilizza il processore MC68000 a 16/32 bit Motorola. C'è anche Marcel Hendrix scritto in Forth su win32 version of the series.

C'è anche il TCC - Tiny C Compiler, che supporta l'uscita PE-i386 (cioè Win32).

Anche se non potevi preoccuparti di leggere l'intero link SO che Firas Assaad ha dato nei commenti, che contiene tutti tranne uno di questi link, credo che troverai il codice sorgente di un compilatore terribilmente lungo .

2

Stai cercando di capire come compilare un compilatore o stai cercando di capire come funziona un eseguibile Win32 internamente?

Se la prima lettura di un libro su come creare un compilatore sarà molto più efficiente rispetto al tentativo di invertire il codice sorgente dell'ingegnere. I compilatori sono diversi da qualsiasi cosa tu abbia mai visto e aiuta davvero a farti guidare da un autore attraverso i principi e le tecniche e gli strumenti comuni utilizzati. Vale anche la pena sottolineare che i compilatori sono costruiti in fasi ed è solo verso la fine dell'implementazione è necessario avere una conoscenza della CPU e del sistema operativo che si sta prendendo di mira. Se sei nuovo nella compilazione del compilatore, hai molto da imparare prima di arrivare a quel punto.

Tuttavia, se si desidera comprendere il formato degli eseguibili Win32, è necessario comprendere il codice assembly x86 (o x64) e il formato file Portable Execution (PE) (utilizzato da Windows per i file eseguibili). Per un'introduzione al codice assembly x86 raccomando l'eccellente eBook http://www.drpaulcarter.com/pcasm/ del Dr. Paul Carter eBook gratuito per PE Vorrei iniziare qui http://msdn.microsoft.com/en-us/magazine/cc301805.aspx e http://msdn.microsoft.com/en-us/magazine/cc301808.aspx