Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1532 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Comment créer un compilateur C++ ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment créer un compilateur C++ ?

n°1128816
NullDragon
Posté le 23-06-2005 à 15:32:15  profilanswer
 

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:  
 

mood
Publicité
Posté le 23-06-2005 à 15:32:15  profilanswer
 

n°1128828
FrozenPala​din
Posté le 23-06-2005 à 15:40:46  profilanswer
 

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.

n°1128840
0x90
Posté le 23-06-2005 à 15:44:48  profilanswer
 

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.
n°1128850
FrozenPala​din
Posté le 23-06-2005 à 15:48:40  profilanswer
 

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:

n°1128854
0x90
Posté le 23-06-2005 à 15:50:31  profilanswer
 

J'aime la théorie ;)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1128857
manatane
En vous remerciant, bonsoir
Posté le 23-06-2005 à 15:50:43  profilanswer
 

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/

n°1128864
0x90
Posté le 23-06-2005 à 15:54:57  profilanswer
 

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.
n°1128868
NullDragon
Posté le 23-06-2005 à 15:56:20  profilanswer
 

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

n°1128876
FrozenPala​din
Posté le 23-06-2005 à 16:01:00  profilanswer
 

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

n°1128889
elianor
bannie 17 fois
Posté le 23-06-2005 à 16:10:36  profilanswer
 

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 §§§§§§§§
mood
Publicité
Posté le 23-06-2005 à 16:10:36  profilanswer
 

n°1128900
NullDragon
Posté le 23-06-2005 à 16:22:16  profilanswer
 

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 ?

n°1128903
Taz
bisounours-codeur
Posté le 23-06-2005 à 16:23:27  profilanswer
 

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

n°1128904
NullDragon
Posté le 23-06-2005 à 16:24:08  profilanswer
 

:lol:

n°1128975
0x90
Posté le 23-06-2005 à 17:04:21  profilanswer
 

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.
n°1128991
elianor
bannie 17 fois
Posté le 23-06-2005 à 17:17:59  profilanswer
 

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 §§§§§§§§
n°1128995
0x90
Posté le 23-06-2005 à 17:20:58  profilanswer
 

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.
n°1129114
chrisbk
-
Posté le 23-06-2005 à 19:38:47  profilanswer
 

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]

n°1129123
el muchach​o
Comfortably Numb
Posté le 23-06-2005 à 19:49:49  profilanswer
 

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
n°1129128
chrisbk
-
Posté le 23-06-2005 à 19:55:36  profilanswer
 

bof le C jpense ca doit aller quand meme

n°1129132
Taz
bisounours-codeur
Posté le 23-06-2005 à 19:58:10  profilanswer
 

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

n°1129141
0x90
Posté le 23-06-2005 à 20:11:43  profilanswer
 

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.
n°1129239
chrisbk
-
Posté le 23-06-2005 à 22:28:17  profilanswer
 

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)

n°1138397
hazar
J'passais dans le coin...
Posté le 02-07-2005 à 21:53:15  profilanswer
 

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/

n°1138450
Chronoklaz​m
Posté le 03-07-2005 à 00:53:39  profilanswer
 

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 !
n°1138452
farib
Posté le 03-07-2005 à 01:03:42  profilanswer
 

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
n°1138454
Chronoklaz​m
Posté le 03-07-2005 à 01:06:40  profilanswer
 

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 !
n°1138456
Chronoklaz​m
Posté le 03-07-2005 à 01:09:14  profilanswer
 

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 !
n°1138458
chrisbk
-
Posté le 03-07-2005 à 01:18:25  profilanswer
 

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
 
 

n°1138475
Chronoklaz​m
Posté le 03-07-2005 à 03:05:19  profilanswer
 

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 !
n°1138533
chrisbk
-
Posté le 03-07-2005 à 12:24:55  profilanswer
 

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
 

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Comment créer un compilateur C++ ?

 

Sujets relatifs
Une idée pour créer un site populaire?Creer Forum avec PHPBB ?
Créer un fichier HTML à partir d'un formulaire !comment creer un serveur sous free pour des photo?
[VBS]Creer un fichier texte nommée avec la date[Novice] Comment créer une page web et cacher l'adresse dans la barre?
Comment envoyer un pdf dynamique en piece jointe sans créer le fichiercreer un site marchand
Creer un fichier dans un programme en Ccompilateur VB
Plus de sujets relatifs à : Comment créer un compilateur C++ ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR