Créer un langage/compilateur

Créer un langage/compilateur - C - Programmation

Marsh Posté le 09-10-2006 à 15:46:09    

Voila mon probléme:
 
Je dois créer un compilateur pour un langage spécifique qui est tout de même assez proche du C. N’étant pas un expert en informatique, auriez vous une méthode rapide et assez simple pour créer ce compilateur ?
 
J’ai 2 pistes en vue :
 - Créer un nouveau compilateur, mais je sais vraiment pas quel outil utiliser.
 - Essayer de traduire mon langage en langage c puis utiliser un compilateur standard du marché (gcc ou autre).
 
Merci pour votre aide.

Reply

Marsh Posté le 09-10-2006 à 15:46:09   

Reply

Marsh Posté le 09-10-2006 à 16:11:21    

J'oublais, il faut que ca tourne sous windows ou dos.

Reply

Marsh Posté le 09-10-2006 à 16:13:45    

A mon avis il vaudrait mieux que tu traduises... ce sera plus simple si tu ne veux pas passer des années a essayer d'optimiser ton compilo pour telle ou telle plateforme :)
 
Sinon, sous linux, tu as de quoi faire des choses avec lex et yacc.

Message cité 1 fois
Message édité par bb138 le 09-10-2006 à 16:14:38
Reply

Marsh Posté le 09-10-2006 à 16:16:23    

xavxavv31 a écrit :

Je dois créer un compilateur pour un langage spécifique qui est tout de même assez proche du C. N’étant pas un expert en informatique, auriez vous une méthode rapide et assez simple pour créer ce compilateur ?
 
J’ai 2 pistes en vue :
 - Créer un nouveau compilateur, mais je sais vraiment pas quel outil utiliser.
 - Essayer de traduire mon langage en langage c puis utiliser un compilateur standard du marché (gcc ou autre).


Je te conseille d'apprendre à créer un compilateur grâce aux méthodes et outils classiques décits dans le Red Dragon Book.
 
http://en.wikipedia.org/wiki/Compi [...] _and_Tools
http://www.amazon.com/Compilers-Pr [...] 0321486811
 
C'est la référence incontournable. Je ne sais pas si il existe en français.
 
Par contre, ça va te prendre un peu de temps, car il y a pas mal de principes à assimiler, à commencer par définir correctement un langage...


Message édité par Emmanuel Delahaye le 09-10-2006 à 16:20:09

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 09-10-2006 à 16:20:55    

bb138 a écrit :

Sinon, sous linux, tu as de quoi faire des choses avec lex et yacc.


Existent aussi sous Windows console sous la forme GNU (Flex et Bison)...


Message édité par Emmanuel Delahaye le 09-10-2006 à 16:22:01

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 09-10-2006 à 16:22:28    

Je ne savais pas  :jap:

Reply

Marsh Posté le 09-10-2006 à 17:56:00    

Citation :

Je dois créer un compilateur pour un langage spécifique qui est tout de même assez proche du C. N’étant pas un expert en informatique, auriez vous une méthode rapide et assez simple pour créer ce compilateur ?

Déjà, "créer un compilateur", ça ne va ni avec "rapide", ni avec "simple". :-)
 

Citation :

J’ai 2 pistes en vue :
 - Créer un nouveau compilateur, mais je sais vraiment pas quel outil utiliser.

Lex/Yacc (Yet Another Compiler Compiler)
Flex/Bison
 

Citation :


 - Essayer de traduire mon langage en langage c puis utiliser un compilateur standard du marché (gcc ou autre).

Ca (ou au moins vers le langage intermédiaire utilisé par gcc), c'est à priori c'est de toute façon la méthode la plus rapide si tu dois aller jusqu'à l'assembleur.
 
Toutefois ça paraît assez monstreux comme projet. De quel langage s'agit-il ? Vous êtes à combien et vous disposez de combien de temps ?


---------------
Viendez vous battre à Prologin \o/
Reply

Marsh Posté le 10-10-2006 à 11:56:42    

Zavie a écrit :

Citation :

Je dois créer un compilateur pour un langage spécifique qui est tout de même assez proche du C. N’étant pas un expert en informatique, auriez vous une méthode rapide et assez simple pour créer ce compilateur ?

Déjà, "créer un compilateur", ça ne va ni avec "rapide", ni avec "simple". :-)
 

Citation :

J’ai 2 pistes en vue :
 - Créer un nouveau compilateur, mais je sais vraiment pas quel outil utiliser.

Lex/Yacc (Yet Another Compiler Compiler)
Flex/Bison
 

Citation :


 - Essayer de traduire mon langage en langage c puis utiliser un compilateur standard du marché (gcc ou autre).

Ca (ou au moins vers le langage intermédiaire utilisé par gcc), c'est à priori c'est de toute façon la méthode la plus rapide si tu dois aller jusqu'à l'assembleur.
 
Toutefois ça paraît assez monstreux comme projet. De quel langage s'agit-il ? Vous êtes à combien et vous disposez de combien de temps ?


 
C'est justement ca le problème, il s'agit d'un langage qui n'existe pas. En gros c'est du C "simplifié" avec quelques truc différent comme les noms des boucles. Je dispose pas de beaucoup de temps, ceci n'étant pas la partie principale du projet. Je pense donc que je vais le traduire en C. Justement, à ce sujet, ya une méthode particulière pour faire cette traduction?
 
Idéalement, faudrait que j'arrive à générer une DLL avec mon compilateur ainsi obtenu (traduction en C + compilo C). Je rappel que ca doit tourner sous Windows. Quelqu’un à une idée de quel compilo C me permettrais de faire ca. Si possible version gratuite.
 
 

Reply

Marsh Posté le 10-10-2006 à 12:11:10    

Citation :

C'est justement ca le problème, il s'agit d'un langage qui n'existe pas. En gros c'est du C "simplifié" avec quelques truc différent comme les noms des boucles. Je dispose pas de beaucoup de temps, ceci n'étant pas la partie principale du projet. Je pense donc que je vais le traduire en C. Justement, à ce sujet, ya une méthode particulière pour faire cette traduction?

Si ce langage est suffisamment proche du C, tu as peut-être moyen de t'en tirer en faisant de simples remplacements de chaînes pour transformer le fichier source en C valide. Sinon il faudra passer par un l'artillerie classique lexer/parser pour revenir à du C. Entre les deux il reste la possibilité de faire un parseur à la main (flex et bison étant assez lourds).


---------------
Viendez vous battre à Prologin \o/
Reply

Marsh Posté le 10-10-2006 à 14:40:12    

Zavie a écrit :

Citation :

C'est justement ca le problème, il s'agit d'un langage qui n'existe pas. En gros c'est du C "simplifié" avec quelques truc différent comme les noms des boucles. Je dispose pas de beaucoup de temps, ceci n'étant pas la partie principale du projet. Je pense donc que je vais le traduire en C. Justement, à ce sujet, ya une méthode particulière pour faire cette traduction?

Si ce langage est suffisamment proche du C, tu as peut-être moyen de t'en tirer en faisant de simples remplacements de chaînes pour transformer le fichier source en C valide. Sinon il faudra passer par un l'artillerie classique lexer/parser pour revenir à du C. Entre les deux il reste la possibilité de faire un parseur à la main (flex et bison étant assez lourds).


 
En faisant des remplacements, le problème est que les erreurs de compilations seront sur le langage C et non sur le langage d'origine.
 
Pour bison et flex, j'ai déjà commencé à regarder. Ca me parait assez lourd à utiliser. Et pour les erreurs de compilation, ca serra la même chose non ?

Reply

Marsh Posté le 10-10-2006 à 14:40:12   

Reply

Marsh Posté le 10-10-2006 à 14:51:26    

xavxavv31 a écrit :

Pour bison et flex, j'ai déjà commencé à regarder. Ca me parait assez lourd à utiliser. Et pour les erreurs de compilation, ca serra la même chose non ?


 
bison et flex sont un des moyens les plus "légers" à ma connaissance pour écrire un compilateur.
Au niveau des messages d'erreur, ils porteront bien sur la grammaire de ton langage, pas sur celle du C.
 
Mais très honnêtement, écrire un compilateur est quelque chose de difficile, qui demande de solides connaissances théoriques en théorie des langages. C'est absolument pas "anodin" comme boulot. C'est généralement un projet de plusieurs mois en cursus d'ingé, avec les cours qui vont bien.
 

Reply

Marsh Posté le 19-10-2006 à 16:21:16    

Bon, j'ai pas le choix, va falloir que je passe par Flex et Bison. J'ai a peut prés compris comment ca marche. Du coup il m'est venu une idée. Si j'arrive à récupérer une grammaire C écrite pour flex et Bison, mon langage ressemblant fortement au C, je devrais pas avoir trop de modifications à apporter. Du coup ma question :
Connaissez vous un endroit ou je peux trouver une grammaire du langage C pour Flex et Bison?

Reply

Marsh Posté le 19-10-2006 à 18:01:17    

xavxavv31 a écrit :

Connaissez vous un endroit ou je peux trouver une grammaire du langage C pour Flex et Bison?

Dans la norme ?
 
www.open-std.org/jtc1/sc22/wg21/do [...] /N1124.pdf  
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

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