Comment créer un compilateur C++ ?

Comment créer un compilateur C++ ? - C++ - Programmation

Marsh Posté le 23-06-2005 à 15:32:15    

Bonjour, je m'intéresse à la création de language, par curiosité, mais avant de créer un nouveau language j'aimerais en comprendre le principe. J'aime comprendre tout dans les moindres détails, je sais qu'il existe des outils comme Lexx et Yacc mais j'aimerais comprendre la création de base, sans outils.
 
Dabord, corrigez-moi si je me trompes, on commence par analyser notre fichier txt pour les erreurs de logiques, grammaticales, syntaxique, etc. Tout cela est bien jolie, mais quelle est l'étape suivante ? J'ai de la misère à trouver des informations sur internet pour le passage de cette étape vers le résultat final: fichier.exe
 
Comment on transforme notre fichier txt en code objet ? Avec l'assembleur ? Donc il faut que je transforme mon code source en un équivalent de Opcodes ? Mais est-ce que le fichier objet à un format précis ? Comment je sais ou placer la ligne x de mon code source à la ligne y dans mon fichier objet ? Ensuite je transforme mon fichier objet comment ? Avec un linker, mais encore la, comment fonctionne un linker pour construire l'en-tête et toute la structure d'un exe PE Win32 par exemple ? Est-ce qu'il faut créer un fichier txt avec une extension.exe et placer notre code objet selon la structure d'un Win32 PE ou si il y a des outils que Microsoft fourni pour ça ? Je me vois mal créer l'en tête à la main, etc.
 
Éclairez ma lanterne svp, merci  :jap:  
 

Reply

Marsh Posté le 23-06-2005 à 15:32:15   

Reply

Marsh Posté le 23-06-2005 à 15:40:46    

Je pense avoir ce qu'il te faut.
Dans mon universite y'a un cour sur la theorie des langages et ca traite (entre autre) de certains aspects de la compilation. J'ai le pdf -> mp pour email.

Reply

Marsh Posté le 23-06-2005 à 15:44:48    

Ca m'interesse aussi si c'est possible d'avoir le pdf :jap:
 
 
( Sinon, le Dunod "Compilateurs" est pas mal, excepté que "Partie Avant" pour Frontend, ca fait bizarre :/ )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 23-06-2005 à 15:48:40    

Filez vos mails  :o .
Sinon je viens de parcourir le pdf. Ca traite bien des compilateurs mais a mon avis c'est un peu trop theorique pour etre directement exploitable  :whistle:

Reply

Marsh Posté le 23-06-2005 à 15:50:31    

J'aime la théorie ;)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 23-06-2005 à 15:50:43    

NullDragon a écrit :

Bonjour, je m'intéresse à la création de language, par curiosité, mais avant de créer un nouveau language j'aimerais en comprendre le principe. J'aime comprendre tout dans les moindres détails, je sais qu'il existe des outils comme Lexx et Yacc mais j'aimerais comprendre la création de base, sans outils.
 
Dabord, corrigez-moi si je me trompes, on commence par analyser notre fichier txt pour les erreurs de logiques, grammaticales, syntaxique, etc. Tout cela est bien jolie, mais quelle est l'étape suivante ? J'ai de la misère à trouver des informations sur internet pour le passage de cette étape vers le résultat final: fichier.exe
 
Comment on transforme notre fichier txt en code objet ? Avec l'assembleur ? Donc il faut que je transforme mon code source en un équivalent de Opcodes ? Mais est-ce que le fichier objet à un format précis ? Comment je sais ou placer la ligne x de mon code source à la ligne y dans mon fichier objet ? Ensuite je transforme mon fichier objet comment ? Avec un linker, mais encore la, comment fonctionne un linker pour construire l'en-tête et toute la structure d'un exe PE Win32 par exemple ? Est-ce qu'il faut créer un fichier txt avec une extension.exe et placer notre code objet selon la structure d'un Win32 PE ou si il y a des outils que Microsoft fourni pour ça ? Je me vois mal créer l'en tête à la main, etc.
 
Éclairez ma lanterne svp, merci  :jap:


Euh il faudrait pondre un bouquin d'un bon millier de pages pour répondre précisemment à ton message...
Pour la construction d'un compilateur tu as des tutoriels gratuits et très bien fichus :
- http://compilers.iecc.com/crenshaw/ et tu convertis le code Pascal dans le langage de ton choix
- http://inger.sourceforge.net/ [:lovev]
il y en a probablement plein d'autres
Pour ce qui concerne le linker il y a un bouquin "Linkers and Loaders" http://www.iecc.com/linker/

Reply

Marsh Posté le 23-06-2005 à 15:54:57    

Sinon une solution batarde mais cependant intéressante à mon avis, c'est de commencer par un compilateur tonlangage->C , et le reste tu le finis à coup de GCC ;) ( Ca dépends si la partie qui t'intéresse c'est de faire un langage ou si c'est de jouer avec l'asm et les linkers et autres joyeusetés )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 23-06-2005 à 15:56:20    

Merci  :jap:  
 
Avec tout cela, quand j'irais à l'université je vais déjà avoir de l'avance sur mes collègues  :bounce:

Reply

Marsh Posté le 23-06-2005 à 16:01:00    

Je dois pouvoir recuperer aussi les cours en amphi sous forme de power point mais y doit pas y avoir plsu d'info que sur le pdf

Reply

Marsh Posté le 23-06-2005 à 16:10:36    

Si tu veux comprendre comment marche un compilateur (et la transfdo assembleur), SURTOUT, ne regarde pas un compilateur C++, c'est certainement le pire des langages.  
 


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 23-06-2005 à 16:10:36   

Reply

Marsh Posté le 23-06-2005 à 16:22:16    

Ah ? je croyais que le C++ était un des meilleurs languages, toute les cie s'en servent pour créer des trucs Wow, Diablo, Doom, etc non ?

Reply

Marsh Posté le 23-06-2005 à 16:23:27    

c'est cool, on a qu'à apprendre comment faire un compilateur pour un langage aussi complexe que le C++ sur un forum, entre 2 cafés, c'est l'affaire de 5 minutes

Reply

Marsh Posté le 23-06-2005 à 16:24:08    

:lol:

Reply

Marsh Posté le 23-06-2005 à 17:04:21    

NullDragon a écrit :

Ah ? je croyais que le C++ était un des meilleurs languages, toute les cie s'en servent pour créer des trucs Wow, Diablo, Doom, etc non ?


 
Il parlait surement du point de vue de la partie compilation, pas de l'utilisation.
 
( C est relativement simple à compiler je pense, il a été +/- concu dans cet optique )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 23-06-2005 à 17:17:59    

0x90 a écrit :


( C est relativement simple à compiler je pense, il a été +/- concu dans cet optique )


 
ah non, pas du tout :o
 
C'est un des pire à compiler. Tous les cours de compilation que tu voient sont obligés de faire des horreurs pour s'adapter au C++.
 


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 23-06-2005 à 17:20:58    

elianor a écrit :

ah non, pas du tout :o
 
C'est un des pire à compiler. Tous les cours de compilation que tu voient sont obligés de faire des horreurs pour s'adapter au C++.


 
 
Je parlais du C, pas du C++, je doute qu'avec ses 3 mots clefs qui se battent en duel et sa structure simplisime le C soit dur à compiler ( pour preuve les TinyC & co ), on l'appelle pas l'assembleur portable pour rien :p
 
[edit] le Il du post d'avant, c'etait Elianor ;)


Message édité par 0x90 le 23-06-2005 à 17:21:47

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 23-06-2005 à 19:38:47    

NullDragon a écrit :

Bonjour, je m'intéresse à la création de language, par curiosité, mais avant de créer un nouveau language j'aimerais en comprendre le principe. J'aime comprendre tout dans les moindres détails, je sais qu'il existe des outils comme Lexx et Yacc mais j'aimerais comprendre la création de base, sans outils.
 
Dabord, corrigez-moi si je me trompes, on commence par analyser notre fichier txt pour les erreurs de logiques, grammaticales, syntaxique, etc. Tout cela est bien jolie, mais quelle est l'étape suivante ? J'ai de la misère à trouver des informations sur internet pour le passage de cette étape vers le résultat final: fichier.exe
 
Comment on transforme notre fichier txt en code objet ? Avec l'assembleur ? Donc il faut que je transforme mon code source en un équivalent de Opcodes ? Mais est-ce que le fichier objet à un format précis ? Comment je sais ou placer la ligne x de mon code source à la ligne y dans mon fichier objet ? Ensuite je transforme mon fichier objet comment ? Avec un linker, mais encore la, comment fonctionne un linker pour construire l'en-tête et toute la structure d'un exe PE Win32 par exemple ? Est-ce qu'il faut créer un fichier txt avec une extension.exe et placer notre code objet selon la structure d'un Win32 PE ou si il y a des outils que Microsoft fourni pour ça ? Je me vois mal créer l'en tête à la main, etc.
 
Éclairez ma lanterne svp, merci  :jap:


 
analyse => AST => compile IL1 => compile IL2 => opcode
 
vala [:vague nocturne]

Reply

Marsh Posté le 23-06-2005 à 19:49:49    

0x90 a écrit :

Je parlais du C, pas du C++, je doute qu'avec ses 3 mots clefs qui se battent en duel et sa structure simplisime le C soit dur à compiler ( pour preuve les TinyC & co ), on l'appelle pas l'assembleur portable pour rien :p
 
[edit] le Il du post d'avant, c'etait Elianor ;)


Non, un compilateur C, c'est déjà bien chaud à écrire même pour un programmeur expérimenté.  
C++, j'en parle même pas, c'est sans doute le langage le plus complexe à implémenter et c'est totalement hors de portée d'un débutant. Quand on sait qu'il a fallu dix ans à l'ensemble de l'industrie informatique pour sortir les premiers compilos C++ décents...
 
Pour débuter, il faut commencer par un interpréteur d'un langage comme le basic ou un sous-ensemble d'un langage propre et sympa comme le Python, puis un début de compilo, ça sera déjà pas mal.


Message édité par el muchacho le 23-06-2005 à 19:50:27
Reply

Marsh Posté le 23-06-2005 à 19:55:36    

bof le C jpense ca doit aller quand meme

Reply

Marsh Posté le 23-06-2005 à 19:58:10    

si t'arrives à faire un bon basic interprété avec print, goto, toute l'arithmétique, des fonctions, c'est déjà un bon début

Reply

Marsh Posté le 23-06-2005 à 20:11:43    

Ma quantification de la difficulté, c'etait _pour un compilateur_ evidement dans l'absolu, c'est pas le genre de programmes aisés à faire ^^
( Un intepréteur C, ca ca peut être marrant ... )
 
Le compilo autrelangage->C ca se fait pas mal aussi, c'est nettement moins dur comme "exercice", ca permet de jouer avec la partie théorie du langage, etc ... sans s'emmerder avec opcodes, linking, blahblah ..


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 23-06-2005 à 22:28:17    

le plus dur en C ca doit etre les longjmp qui foutent la merde dans le graphe de flux [:petrus75]
 
ski peut etre sympa en theorie des langage c'est un compilo d'un langage vers du bytecode java ou c# (avec ensuite assemblage via jasmin par ex)

Reply

Marsh Posté le 02-07-2005 à 21:53:15    

Representation d'un compilateur quelconque, gcc par exemple:  :jap:  
http://www.lrde.epita.fr/~akim/gcc-structure.pdf
 
Un compilateur, c'est tres interessant, on y trouve de nombreuses notions dont plusieures communes a d'autres domaines que la compilation.  
 
Ceci devrait peut etre interesser, c'est le sujet d'un projet de compilateur d'un langage assez simplifie (il a ete cree expres pour apprendre la compilation) en C++ mais qui reste tout de meme tres long a faire. Alors le C, c'est pas vraiment donne non plus. Le C++ tu peux oublier, mais completement.  
 
http://www.lrde.epita.fr/~akim/compil/assignments.html
 
Langage tiger: http://www.lrde.epita.fr/~akim/compil/tiger.html
 
Le plus dur c'est le Front End (partie avant du compilateur c'est tres bien je trouve), le C++ etant une horreur a parser. Apres la traduction en assembleur, c'est pas plus dur en C ou en C++, c'est pareil grace aux langages intermediaires (interne o compilo).
 
Hesitez pas a fouiller le site, il contient pleins de trucs a lire.
http://www.lrde.epita.fr/~akim/

Reply

Marsh Posté le 03-07-2005 à 00:53:39    

Bein déjà faire un petit compilo d'expression arithmetiques simples (genre une calclette toute conne) en C ça serai un bon début.
 
Une suite logique serai d'inventer son propre petit langage avec une syntaxe bien à lui avec des trucs basiques style déclaration, affectation, structure de boucle .... pour finir avec une génération de code (du C tient).
 
Aprés on peut y consacrer ca vie aussi ...
 

0x90 a écrit :

J'aime la théorie ;)


 
Mange toi ça alors :)
 
http://www-mips.unice.fr/~ol/L3I/A [...] emento.pdf


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 03-07-2005 à 01:03:42    

roh, que c'est beau. J'ose pas imaginer la gueule des chercheurs qui ont pondu des trucs comme ça [:petrus75]


---------------
Bitcoin, Magical Thinking, and Political Ideology
Reply

Marsh Posté le 03-07-2005 à 01:06:40    

chrisbk a écrit :

...
ski peut etre sympa en theorie des langage c'est un compilo d'un langage vers du bytecode java ou c# (avec ensuite assemblage via jasmin par ex)


 
C'est farfeulu ton idée, déjà si le langage en question n'est pas objet je vois pas trop l'utilité ... et tant qu'a faire tu génere du Java ou du C# directement et basta.
 
 
 


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 03-07-2005 à 01:09:14    

farib a écrit :

roh, que c'est beau. J'ose pas imaginer la gueule des chercheurs qui ont pondu des trucs comme ça [:petrus75]


 
http://www-mips.unice.fr/~ol/ol.jpg  :o  


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 03-07-2005 à 01:18:25    

Chronoklazm a écrit :

C'est farfeulu ton idée, déjà si le langage en question n'est pas objet je vois pas trop l'utilité ... et tant qu'a faire tu génere du Java ou du C# directement et basta.


 
passage en gras : gni ? [:zaib3k]
 
 
non c'est pas farfelu, rien que pour faire ca fo deja voir analyse syntaxique lexicale, controle de type....si tu veux gerer des trucs comme heritage y'a deja moyen de s'amuser et ca permet d'avoir un resultat sympa
 
 

Reply

Marsh Posté le 03-07-2005 à 03:05:19    

chrisbk a écrit :

passage en gras : gni ? [:zaib3k]
 
 
non c'est pas farfelu, rien que pour faire ca fo deja voir analyse syntaxique lexicale, controle de type....si tu veux gerer des trucs comme heritage y'a deja moyen de s'amuser et ca permet d'avoir un resultat sympa


 
Je parlais du langage source mais bon assembleur, bytecode c'est la meme méthode pour en génerer. Et avant d'en arriver à la géstion de l'héritage y à du chemin à faire ...
 
Et ca donnerai quoi ton truc à la sortie, des .class ? C'est vrai que ca peut être marrant d'écrire du Scheme et se retrouver avec des .jar à la fin  :lol:  


Message édité par Chronoklazm le 03-07-2005 à 03:38:24

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 03-07-2005 à 12:24:55    

Chronoklazm a écrit :

Je parlais du langage source mais bon assembleur, bytecode c'est la meme méthode pour en génerer. Et avant d'en arriver à la géstion de l'héritage y à du chemin à faire ...


 
heuh generer du bytecode est environ 259x plus facile que de generer de l'assembleur hein ?

Chronoklazm a écrit :


Et ca donnerai quoi ton truc à la sortie, des .class ? C'est vrai que ca peut être marrant d'écrire du Scheme et se retrouver avec des .jar à la fin  :lol:


 
si tu veux, si le but est d'apprendre a faire un compilo, ca me parait assez essentiel d'avoir un code executé a la fin. Maintenant manque de bol, la compilation en ASM est un joli casse tete, tout de meme, et risque de depasser largement en etmps la durée allouée a ce genre de module. Par contre emettre du bytecode/MSIL ca c'est pas dur, y'a des outils qui font ca tres bien. Donc pour le projet tu as l'analyse lexicale/syntaxique (quand t'en a fait 15, ca va, maisla premiere fois spa facile), tu vois les table de symboles/portées de variable, verification et controle de type.... Sachant que JAVA fait une verification sur le code au load, ca te permet aussi de voir si tout ca (controle de type, acces aux variable, gestion de la pile) c'est bien fait
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed