Ecrire un compilateur - C++ - Programmation
Marsh Posté le 27-02-2003 à 18:09:13
Joel F a écrit : |
Le C Ansi
Joel F a écrit : |
Déja définit les mots clés reconnus, les différents tokens utilisés, les opérateurs, etc...
Joel F a écrit : |
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.
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 |
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 ...
Marsh Posté le 27-02-2003 à 21:38:27
Harkonnen a écrit : |
ça dépend de ce qu'il veut compiler
les compilateurs Pascal sont faits en Pascal, non ?
Marsh Posté le 27-02-2003 à 21:44:51
antp 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 ?
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 ?
Marsh Posté le 27-02-2003 à 21:47:21
Harkonnen a écrit : |
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
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/
Marsh Posté le 27-02-2003 à 21:59:21
lorill a écrit : |
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.
Marsh Posté le 27-02-2003 à 22:03:18
lorill a écrit : |
Ben je savais pas hein
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....
Marsh Posté le 27-02-2003 à 22:07:39
Harkonnen a écrit : |
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.
Marsh Posté le 27-02-2003 à 22:08:29
Harkonnen a écrit : |
je chipote ? je chipote pas ? allez, chipotons
http://fslc.usu.edu/wp/display/22/28.wimpy
Marsh Posté le 27-02-2003 à 22:23:39
nraynaud a écrit : |
oh que oui !! c'est d'ailleurs pour ça que j'y touche plus depuis la fin de mes études, je suis calmé à vie...
Marsh Posté le 27-02-2003 à 22:25:15
lorill a écrit : |
alors ça, c'est petit.....
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 !)
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.
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.
Marsh Posté le 27-02-2003 à 23:35:49
nraynaud a écrit : |
Je comprends rien de ce que tu écris
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 (+ - * /)
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 ...
Marsh Posté le 28-02-2003 à 08:58:12
je te conseille d'investir dans une cafetiere robuste
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
Marsh Posté le 28-02-2003 à 09:50:33
Harkonnen a écrit : |
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 ...
Marsh Posté le 28-02-2003 à 09:53:54
Harkonnen a écrit : |
heureusement que non
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).
Marsh Posté le 28-02-2003 à 11:31:41
chrisbk a écrit : je te conseille d'investir dans une cafetiere robuste |
Pour la cafetiere g ce ki faut
hmmm certes, je pensais générer du C/C++ (bicose besoin de tempalte) et de lancer un g++ sur le resultat.
Marsh Posté le 28-02-2003 à 11:33:05
Joel F a écrit : |
ah ben la alors laisse tomber ma remarque, je cru que tu voulais generer directement de l'asm, comme les hommes, les vrais
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
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. |
J'incrémente
Vu que JoelF a besoin de template, le C++ s'impose naturellement
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.
Marsh Posté le 11-05-2003 à 21:15:03
Merci de ces réponses
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
Merci a tous pour toutes vos réponses
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