bonjour :D
je doit realiser un compilateur qui a comme une grammaire un sous ensemble de la grammaire du langage pascal il faut passer dabord par une phase lexicale et une autre syntaxique mais le pbm au detailles du travail
Version imprimable
bonjour :D
je doit realiser un compilateur qui a comme une grammaire un sous ensemble de la grammaire du langage pascal il faut passer dabord par une phase lexicale et une autre syntaxique mais le pbm au detailles du travail
et?
Nas'
Pour réaliser un compilateur, il faut:
- Définir exactement la syntaxe que ton compilateur devra gérer, et les fonctionnalités que tu attends. Le compilateur doit-il optimiser le code? Quel backend? Cette 1ère phase s'appelle la phase de spécification, et elle te permet de répondre aux questions "Quoi?", "Quelles fonctionnalité?", etc.
- La phase de conception est la plus intéressante et celle qui te demandera le plus de soins. Tu devras diviser ton problème en sous-problèmes ou modules, et diviser chaque sous-problème en d'autres sous-problèmes plus simples à résoudre. L'achitecture de ton compilateur se mettra petit à petit en place lors de cette phase de conception qui te permettra de répondre à la question "Comment réaliser un compilateur qui réponde aux spécification de la phase 1?"
- C'est la phase d'implantation dans le langage que tu trouveras le plus adapté.
C'est un gros projet qui demande beaucoup de travail, et une approche très structurée dans le respect des bonnes pratiques du génie logiciel. J'imagine que tu as suivi un cours sur le sujet auparavant ou qu'un tel cours est programmé en parallèle du projet. Le sujet est trop vaste pour pouvoir te donner des lignes directrices dans le contexte d'un forum technique (vise plutôt à répondre à des questions précises). Il existe d'excellents ouvrages qui pourront t'accompagner dans ton projet:
- Modern Compiler Implementation in Java, de Andrew W. Apple chez Cambridge University Press
Il y en a bien d'autres, mais j'ai bien aimé celui là. Sinon Google est ton ami. Voici une référence à consulter sur le web:
http://cs.wwc.edu/~aabyan/Linux/compiler/
Thierry
Ca, c'est un exercice pour un cours. Donc le prof devrait avoir donne suffisamment d'info pour le faire. Tu trouves quelqu'un qui a ete au cours et tu empruntes ses notes pour les copier.
Si tu ne t'en sorts pas comme ca, tu cherches de la doc quelque part. Le prof a vraisemblablement donne une bibliographie. Je peux y a jouter ces bouquins: http://www.cs.vu.nl/~dick/MCD.html, http://www.oberon.ethz.ch/WirthPubl/CBEAll.pdf et ce lien: http://compilers.iecc.com/crenshaw.
As-tu le droit d'utiliser des outils tel lex/flex (analyseur lexical) et bison/yacc (analysieur syntaxique) ? J'imagines que tu dois également créer un analyseur sémantique ? (bon typage, variable bien déclaré...)Citation:
Envoyé par hanene_z
Quel est le langage de ton code cible ? (code 3 adresses ?)
merci a votre reponseCitation:
Envoyé par millie
non je ne peut pas utiliser importe quel outils et je doit realiser ce travail moi meme en langage C
Il manque pas mal de détails que tu ne nous as pas donnée.
Je te signales que lex et yacc fonctionne très bien en C. C'est un outil, qui à partir de fichiers y (grammaire) et l (lexemes) fournit des fichiers en langage C. Il est totalement possible d'intégrer du code C dans ces fichiers.
Maintenant, les analyseurs lexicals et syntaxiques ne sont pas évidents à mettre en oeuvre. Il faut pour cela implémenter des automates normaux (pour l'analyseur lexical) et des automates à piles (pour l'analyseur syntaxique). As-tu déjà vu ces notions ?
Je ne suis pas au courant des cursus traditionnels, mais j'imagine que ce type de projet doit faire suite à un cours sur la conception de compilateurs et les concepts algorithmiques associés. Au pire des cas, le cours et ses notions théoriques sont présentés en parallèle au projet.Citation:
Envoyé par millie
Thierry
Justement, dans les cours de Compilation "classique", on peut y avoir figurer effectivement les notions d'automates et d'automates à piles, mais leur implémentation n'est pas forcement vu. Genre pour les automates qui n'ont en général jamais été implementé par les élèves, on ne le revoit que de manière théorique et les cours disent : "Ceci n'était pas un cours sur les automates, veuillez en regarder un...". Pareil pour les automates à pile (qui sont moins classique) mais dont l'implémentation n'est pas précisé en général.Citation:
Envoyé par mujigka
C'est pourquoi je m'étonnes qu'il n'ait pas à utiliser d'autres outils (mais peut être qu'il a vu précisiment de tels implémentations, c'est pourquoi je demandais :aie: )
As-tu de bonnes références à conseiller qui traitent de ce type d'implémentations? Pour ma part, je connaisCitation:
Envoyé par millie
- Compilers: Principles, Techniques, and Tools (le Dragon Book) de Alfred Aho et al.
- Parsing Techniques - A Practical Guide de Dick Grune et Ceriel J.H. Jacobs (téléchargeable sur le web: http://www.cs.vu.nl/~dick/PTAPG.html)
(également auteurs de Modern compiler design)
Sinon, la plupart des ouvrages traitants de la conception de compilateurs que j'ai eu l'occasion de consulter utilisent des outils tels lex et yacc (ou flex/bison).
Pour un exemple ultra commenté du code source d'un compilateur:
A retargetable C compiler: design and implementation, de Christopher Fraser et David Hanson
Cet ouvrage présente avec un grand luxe de détails le code source de lcc dont l'analyseur lexical et l'analyseur syntaxique ont été écrits à la main.
Thierry
Pour ceux que ça intéresse, il y a une nouvelle édition. Je ne l'ai pas encore lue mais il me semble que la partie optimisation est un peu plus importante.Citation:
Envoyé par mujigka
En ce qui concerne la théorie derrière les automates à piles, à ma connaissance, la référence reste The Theory of Parsing, Translation and Compiling de Aho et Ullman. Le bouquin est épuisé depuis des années.
A noter que j'ai préféré Crafting a Compiler de Fisher et LeBlanc au Dragon Book.
Merci pour les infos, je n'ai jamais eu vent de Crafting a Compiler. J'y ai accès à la bibliothèque et je vais jeter un coup d'oeil.Citation:
Envoyé par Jean-Marc.Bourguet
Thierry
Voici les resources qu'il est possible sur le site de developpez.com concernant l'analyse lexicale et l'analyse syntaxique. C'est plutôt orienté Delphi, mais c'est intéressant d'un point de vue alogithmique.
analyse lexicale:
http://olance.developpez.com/article...exers-theorie/ (une deuxième partie orientée pratique de ce tutoriel semble être planifiée)
analyse syntaxique:
http://olance.developpez.com/article...exers-theorie/
Thierry
La nouvelle édition (que je viens de lire rapidement) me semble à la hauteur de la réputation de l'ouvrage. Elle traite mieux que la précédente (du moins dans mon souvenir) d'un certain nombre de choses (les types, l'optimisation, les GC).Citation:
Envoyé par Jean-Marc.Bourguet
Mon regret principal -- sur ce point Modern Compiler Design de Grune est meilleur, mais il est moins locace sur d'autres choses -- c'est qu'il reste très orienté langage impératif. Même s'ils utilisent Java, les langages objets sous sous-traité: je n'ai pas vu -- ai-je été trop vite -- une explication des structures nécessaires pour implémenter ni ce que le C++ appelle des membres virtuels ni la forme restreinte d'héritage multiple que sont les interfaces. Les techniques des langages fonctionnels (en particulier l'évaluation paresseuse) et logiques sont complètements absentes.