Ecrire un compilateur

Ecrire un compilateur - C++ - Programmation

Marsh Posté le 27-02-2003 à 18:03:58    

voila, je suis en train de definir un chti langage qui gerent  
les operations vectoriels AltiVEc et j'aimerais savoir :
 
1. quel langage se prete le mieux a l'ecriture d'un compilateur ?
2. par ou commencé ? Grammaire ? ASA ?
3. qqs tutoriels sur ce sujet ?
 
Merci d'avance :)

Reply

Marsh Posté le 27-02-2003 à 18:03:58   

Reply

Marsh Posté le 27-02-2003 à 18:09:13    

Joel F a écrit :


1. quel langage se prete le mieux a l'ecriture d'un compilateur ?


Le C Ansi
 

Joel F a écrit :


2. par ou commencé ? Grammaire ? ASA ?


Déja définit les mots clés reconnus, les différents tokens utilisés, les opérateurs, etc...
 

Joel F a écrit :


3. qqs tutoriels sur ce sujet ?


Y'a un topic de vic le viking sur la théorie des langages ou chrisbk donne un lien vers un e-book orienté pratique.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-02-2003 à 18:31:57    

Utilise Lex et Yacc si possible.

Reply

Marsh Posté le 27-02-2003 à 19:36:18    

Tout a fait d'accord Lex et Yacc.
flex et bison chez GNU

Reply

Marsh Posté le 27-02-2003 à 19:59:37    

Joel F a écrit :

voila, je suis en train de definir un chti langage qui gerent  
les operations vectoriels AltiVEc et j'aimerais savoir :
 
1. quel langage se prete le mieux a l'ecriture d'un compilateur ?
2. par ou commencé ? Grammaire ? ASA ?
3. qqs tutoriels sur ce sujet ?
 
Merci d'avance :)


1) Objective Caml, c'est un problème intrinsèquement fonctionnel
2) comme tout le monde : Lex puis Yacc puis sémantique
3) heu c'est un science, les articles sur le sujet foisonnent, y'a des cours dans les facs, mais un tutorial ...

Reply

Marsh Posté le 27-02-2003 à 20:01:29    

Merci a tous :)

Reply

Marsh Posté le 27-02-2003 à 21:38:27    

Harkonnen a écrit :


Le C Ansi
 
 


 
ça dépend de ce qu'il veut compiler :D
 
les compilateurs Pascal sont faits en Pascal, non ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 27-02-2003 à 21:44:51    

antp a écrit :


 
ça dépend de ce qu'il veut compiler :D
 
les compilateurs Pascal sont faits en Pascal, non ?


Oui, mais j'ai mentionné le C Ansi car lexx et yacc recrachent uniquement un fichier en C. Et quitte à avoir le parser en C, autant avoir tout le reste du compilo, non ? [:sinclaire]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-02-2003 à 21:46:44    

Ouais :)
mais bon y a pas mal de compilos qui sont écrits avec le langage qu'ils compilent, non ?


Message édité par antp le 27-02-2003 à 21:48:11

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 27-02-2003 à 21:47:21    

Harkonnen a écrit :


Oui, mais j'ai mentionné le C Ansi car lexx et yacc recrachent uniquement un fichier en C. Et quitte à avoir le parser en C, autant avoir tout le reste du compilo, non ? [:sinclaire]


 :pfff:  
y'a une version python de lex & yacc, y'en a une pour elastiC, doit surement y'en avoir d'autre...
 
http://systems.cs.uchicago.edu/ply/ par exemple

Reply

Marsh Posté le 27-02-2003 à 21:47:21   

Reply

Marsh Posté le 27-02-2003 à 21:52:15    

un très bon tutorial sous forme de TP
http://www.lifl.fr/~marquet/ens/pcp/

Reply

Marsh Posté le 27-02-2003 à 21:59:21    

lorill a écrit :


 :pfff:  
y'a une version python de lex & yacc, y'en a une pour elastiC, doit surement y'en avoir d'autre...
 
http://systems.cs.uchicago.edu/ply/ par exemple


 
O' Caml (filé en standard), Java (JLex, JFlex et cup), Eiffel (un bison haxorisé, il semble), Haskell (happy)...
 
et tout un tas de bordel :  
http://www.first.gmd.de/cogent/catalog/lexparse.html
 
 
Donc les générateurs sont un faux problème, par-contre s'emmerder a faire un truc compliqué avec un langage merdique c'est plus un vrai problème.


Message édité par nraynaud le 27-02-2003 à 22:54:56
Reply

Marsh Posté le 27-02-2003 à 22:03:18    

lorill a écrit :


 :pfff:  
y'a une version python de lex & yacc, y'en a une pour elastiC, doit surement y'en avoir d'autre...
 
http://systems.cs.uchicago.edu/ply/ par exemple


Ben je savais pas hein [:sinclaire]
Faut dire aussi que la seule fois ou j'ai utilisé lex & yacc, c'était pendant mes études en 91, et à l'époque Python, Java et autres n'existaient pas... Et je m'y suis pas trop intéressé à nouveau depuis....


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-02-2003 à 22:07:39    

Harkonnen a écrit :


Ben je savais pas hein [:sinclaire]
Faut dire aussi que la seule fois ou j'ai utilisé lex & yacc, c'était pendant mes études en 91, et à l'époque Python, Java et autres n'existaient pas... Et je m'y suis pas trop intéressé à nouveau depuis....


 
prie pour que ça dure, c'est hyper chiant.
Ex. : y'en a beaucoup des débuggeurs qui savent s'arrêter dans un fichier yacc ? T'as jamais le mode de coloration syntaxique pour ton générateur de parser etc.

Reply

Marsh Posté le 27-02-2003 à 22:08:29    

Harkonnen a écrit :


Faut dire aussi que la seule fois ou j'ai utilisé lex & yacc, c'était pendant mes études en 91, et à l'époque Python, Java et autres n'existaient pas...  


je chipote ? je chipote pas ? allez, chipotons
 
http://fslc.usu.edu/wp/display/22/28.wimpy
 
 :whistle:

Reply

Marsh Posté le 27-02-2003 à 22:23:39    

nraynaud a écrit :


 
prie pour que ça dure, c'est hyper chiant.


oh que oui !! c'est d'ailleurs pour ça que j'y touche plus depuis la fin de mes études, je suis calmé à vie... [:totoz]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-02-2003 à 22:25:15    

lorill a écrit :


je chipote ? je chipote pas ? allez, chipotons
 
http://fslc.usu.edu/wp/display/22/28.wimpy
 
 :whistle:  


alors ça, c'est petit.....  
 :kaola: pour la peine !! (j'avais 17 ans bordel ! et certainement d'autres préoccupations que de m'interesser à un langage encore embryonnaire ! je me faisais suffisamment chier en C !)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-02-2003 à 22:26:45    

nraynaud a écrit :

Donc les générateurs sont un faux problème, par-contre s'emmerder a faire un truc compliqué avec une langage de merdique c'est plus un vrai problème.


Je connais ton opinion sur le C et je la respecte à défaut de la partager. Ceci dit, ce n'est pas une raison pour en remettre une couche dans ce topic, c'est totalement hors sujet.


Message édité par Harkonnen le 27-02-2003 à 22:27:55

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-02-2003 à 22:56:54    


 
C'est la cata ma frappe, vous arrivez à comprendre ce que j'écris ? 'Va falloir que je fasse vérifier mon vaccin contre la polio.

Reply

Marsh Posté le 27-02-2003 à 23:35:49    

nraynaud a écrit :


 
C'est la cata ma frappe, vous arrivez à comprendre ce que j'écris ? 'Va falloir que je fasse vérifier mon vaccin contre la polio.


 
Je comprends rien de ce que tu écris :whistle:


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 28-02-2003 à 07:38:22    

un bon cour de grammaire des langages :)
 
à mon avis, faut commencer par viser petit
 
tu peux peut être faire un compilateur qui fait des calcules à partir des 4 opérations de bases (+ - * /)

Reply

Marsh Posté le 28-02-2003 à 08:37:22    

c'est ce que je pense faire deja.
gérer les types de bases (bool,char,short,long,float) et
leur fournir les opérateurs scalaires de abses et leur variantes vectorielles. Ca sera deja un bon debut.
 
La spec du langage que je dois developper et deja presque terminée donc bon ...

Reply

Marsh Posté le 28-02-2003 à 08:58:12    

je te conseille d'investir dans une cafetiere robuste :D
 
par rapport au e-book du topic de vik, il me semble que ceux ci ne passent pas par un langage intermediaire pour effectuer la compil en asm, ce que pour ma part je te conseille plus que tres vivement
 

Reply

Marsh Posté le 28-02-2003 à 09:50:33    

Harkonnen a écrit :


Oui, mais j'ai mentionné le C Ansi car lexx et yacc recrachent uniquement un fichier en C. Et quitte à avoir le parser en C, autant avoir tout le reste du compilo, non ? [:sinclaire]


Non, il y a des langages qui sont basés sur un mini-noyau ecrit en C mais le reste est défini "en interne": exemple est Haskell, certaines versions de Lisp, CLIPS/WebCLIPS, ...
Donc, rien n'empeche ...

Reply

Marsh Posté le 28-02-2003 à 09:53:54    

Harkonnen a écrit :


Oui, mais j'ai mentionné le C Ansi car lexx et yacc recrachent uniquement un fichier en C. Et quitte à avoir le parser en C, autant avoir tout le reste du compilo, non ? [:sinclaire]


 
heureusement que non :D
 
par contre je me demande si flex/yacc est quand meme ce qu'il y a de mieux (j'utilise ca parce que je connais mais les erreurs shift/reduce ou reduce/reduce qui apparaissent parfois sans trop que l'on sache pkoi sont assez agacantes).

Reply

Marsh Posté le 28-02-2003 à 11:31:41    

chrisbk a écrit :

je te conseille d'investir dans une cafetiere robuste :D
 
par rapport au e-book du topic de vik, il me semble que ceux ci ne passent pas par un langage intermediaire pour effectuer la compil en asm, ce que pour ma part je te conseille plus que tres vivement


 
Pour la cafetiere g ce ki faut :)  [:joel f]  
hmmm certes, je pensais générer du C/C++ (bicose besoin de tempalte) et de lancer un g++ sur le resultat.

Reply

Marsh Posté le 28-02-2003 à 11:33:05    

Joel F a écrit :


hmmm certes, je pensais générer du C/C++ (bicose besoin de tempalte) et de lancer un g++ sur le resultat.


 
ah ben la alors laisse tomber ma remarque, je cru que tu voulais generer directement de l'asm, comme les hommes, les vrais :D :D

Reply

Marsh Posté le 11-05-2003 à 12:49:16    

Le C Ansi n'est pratiquement jamais la meilleure solution de programmation, sauf en cas de recherche de vitesse brute.
A mon sens, une des seules utilités du C Ansi, c'est l'écriture de noyaux d'OS, pour le reste le C++ est largement préférable.
 
Pour ce qui est de l'écriture d'un compilateur, le C++ convient nettement plus que le C Ansi, sauf si tu aimes te prendre la tête à recoder de choses aussi amusantes que les arbres n-aires, et autres joyeusetés.
 
En matière de compilateurs, il y a une personne qui fait autorité, parce qu'elle a écrit le premier véritable ouvrage entièrement consacré à la programmation des compilateurs, il s'agit d'Andrew Appel, auteur de "Modern Compiler Implementation", décliné pour le C++, le Java et le ML. (plus d'infos ici : http://www.cs.princeton.edu/~appel/modern/)
L'écriture d'un compilateur fait partie de mon cursus, et selon mon prof de langages, la version ML est de loin la plus valable au niveau qualité du code proposé en exemple.
(Il existe une version de Lex pour ML au passage).
 
Après si tu veux te prendre la tête en C Ansi, peut être que tu aimes ça ;)

Reply

Marsh Posté le 11-05-2003 à 12:57:54    

KrisCool a écrit :

Le C Ansi n'est pratiquement jamais la meilleure solution de programmation, sauf en cas de recherche de vitesse brute.
A mon sens, une des seules utilités du C Ansi, c'est l'écriture de noyaux d'OS, pour le reste le C++ est largement préférable.


 
J'incrémente :jap:  :jap:  :jap:  
 
Vu que JoelF a besoin de template, le C++ s'impose naturellement


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 11-05-2003 à 13:52:15    

Joel F a écrit :

3. qqs tutoriels sur ce sujet ?

[url=http://compilers.iecc.com/crenshaw/]Let's Build a Compiler, by Jack Crenshaw  
[/url]
te guide pas à pas dans le parsing (a = 2 => variable opérateur constante), l'interprétation d'une expression (a = b + c), des niveaux de priorités (a + b * c = a + (b*c)), des structures de contrôle (for, while, ...). Ça a dix ans, c'est en pascal et ça compile du 68000, tu n'as besoin d'aucune connaissance de libs, ça se traduit très facilement en C ou autre, c'est extrèmement bien expliqué, bref un pur bonheur.

Reply

Marsh Posté le 11-05-2003 à 21:15:03    

Merci de ces réponses :D
Finalement mon etude s'est écartée de la solution
"compilateur" pour utiliser une technique de "Expression Templates".
 
Merci tout de même pour le lien, je le stocke :D
Merci a tous pour toutes vos réponses

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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