xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009
-
20 sept. 2009 à 19:16
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009
-
23 sept. 2009 à 21:43
Bonjour !
Je souhaiterais développer un simple compilateur C pour une machine virtuelle.
Existe-t-il des "briques logicielles" de base pour construire un tel compilateur, que je pourrais utiliser afin d'accélérer ce développement (encodage en C/C++ de la grammaire C, de l'analyseur syntaxique, etc) ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 21 sept. 2009 à 01:35
Si tu veux réaliser un compilateur de C, je te conseille les outils suivants:
- Flex/Bison (ou lex/yacc) pour générer à partir de la grammaire un AST.
- La bibliothèque Boost, pour tout ce que ça apporte. (Boost::Assign, Boost::Bind, Boost::Spirit, et bien d'autre ...).
- Une bonne connaissance des designs patterns (notamment visitor), des templates, et des traits.
- De la patience, car c'est vraiment long à réaliser.
A noter que Boost Spirit pourrait tout à fait remplacer le couple Flex/Bison.
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 21 sept. 2009 à 09:27
Merci pour ta réponse, CptPingu !
En effet, je connais Boost (partiellement) et je souhaiterais l'utiliser quasi exclusivement pour réaliser ce compilateur. Je vois au moins l'intérêt d'avoir un programme homogène en pur C/C++. Flex/* est certainement une suite d'outils très puissante, mais j'ai peur de perdre trop de temps à apprendre à l'utiliser.
Je vais regarder ton code source. L'architecture de ton compilateur peut elle être réutilisée pour compiler du langage C ? Mon objectif est d'offrir un support minimum du langage C (toutes les construction grammaticales ne seront certainement pas compilables par mon projet et cela reste acceptable).
Une grammaire LL(1) pour le langage C est elle disponible sur le net à ta connaissance (prête à être programmée en C/C++ ou Flex/*) ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 21 sept. 2009 à 12:56
Le principe de mon compilateur peut être réutilisé. En revanche, certaines parties peuvent te servir, mais il n'est pas réutilisable en l'état. En effet, je me suis imposé de ne rien utiliser en dehors de la STL. J'ai donc codé le lexeur/parseur "à la main", et il n'y donc pas de Boost.
Boost::Spirit réalise le "lexer" et le "parser", et te génère normalement un AST.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 22 sept. 2009 à 12:10
Je ne suis pas sur que tu es besoin de Boost::Wave. Boost::Spirit devrait être suffisant et il réalise normalement l'AST. As-tu testé l'exemple que je t'ai donné ? Il ne convient pas ? (Je ne l'ai pas testé).
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 23 sept. 2009 à 16:40
Bonjour,
Je me demande quel est l'intérêt de fabriquer un compilateur C alors que GCC le fait très bien.
J'ai peut-être mal saisi ton concept de machine virtuel mais pour moi c'est un programme qui reproduit le fonctionnement d'une machine sur lequel on installe un OS.