bonjour![]()
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
bonjour![]()
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
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
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
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é...)Envoyé par hanene_z
Quel est le langage de ton code cible ? (code 3 adresses ?)
merci a votre reponseEnvoyé 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.Envoyé par millie
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
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.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)
Partager