Créer un langage/compilateur - C - Programmation
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.
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 ? |
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...
Marsh Posté le 09-10-2006 à 16:20:55
bb138 a écrit :
|
Existent aussi sous Windows console sous la forme GNU (Flex et Bison)...
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 : Jai 2 pistes en vue : |
Lex/Yacc (Yet Another Compiler Compiler)
Flex/Bison
Citation : |
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 ?
Marsh Posté le 10-10-2006 à 11:56:42
Zavie a écrit :
Déjà, "créer un compilateur", ça ne va ni avec "rapide", ni avec "simple". :-)
Lex/Yacc (Yet Another Compiler Compiler)
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. |
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. Quelquun à une idée de quel compilo C me permettrais de faire ca. Si possible version gratuite.
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).
Marsh Posté le 10-10-2006 à 14:40:12
Zavie a écrit :
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 ?
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.
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?
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
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 ?
Jai 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.