begin process at 2012 05 28 18:31:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Développement d'un compilateur C vers ByteCode pour machine virtuelle


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Développement d'un compilateur C vers ByteCode pour machine virtuelle

dimanche 20 septembre 2009 à 19:16:12 | Développement d'un compilateur C vers ByteCode pour machine virtuelle

xterminhate

Membre Club

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) ?

Cordialement,
Xterminhate.

lundi 21 septembre 2009 à 01:35:51 | Re : Développement d'un compilateur C vers ByteCode pour machine virtuelle

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !

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.

Je me fait un peu de pub, je sais, mais j'ai déjà réalisé un mini compilateur. Réaliser un compilateur de C, n'est pas foncièrement plus difficile, c'est juste plus long.
http://www.cppfrance.com/codes/COMPILATEUR-PSEUDO-PASCAL_49318.aspx

lundi 21 septembre 2009 à 09:27:01 | Re : Développement d'un compilateur C vers ByteCode pour machine virtuelle

xterminhate

Membre Club


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/*) ?

Cordialement,
Xterminhate.

lundi 21 septembre 2009 à 12:56:46 | Re : Développement d'un compilateur C vers ByteCode pour machine virtuelle

CptPingu

Administrateur CodeS-SourceS

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.

La grammaire du C se trouve facilement (recherche "grammaire BNF du C" sous google, ex: [ Lien ])

Il me semble avoir vu un lexer/parser de C déjà prêt en Boost::Spirit sur le site officiel, mais je ne l'ai pas testé [ Lien ]

mardi 22 septembre 2009 à 12:07:35 | Re : Développement d'un compilateur C vers ByteCode pour machine virtuelle

xterminhate

Membre Club


Au sujet du "lexer", on trouve dans Boost une bibliothèque particulièrement adaptée : "wave". Elle doit se baser sur "spirit".

Elle transforme le code source C/C++ en une liste de "tokens" accessibles au travers d'un iterateur. Cela semble être une base solide !

Si je comprends bien, l'étape suivante consiste à transformer cette liste de "tokens" à plat en un AST (c'est ce que tu appelles le "parser") ?

Cordialement,
Xterminhate.

mardi 22 septembre 2009 à 12:10:35 | Re : Développement d'un compilateur C vers ByteCode pour machine virtuelle

CptPingu

Administrateur CodeS-SourceS

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é).

mardi 22 septembre 2009 à 18:43:32 | Re : Développement d'un compilateur C vers ByteCode pour machine virtuelle

xterminhate

Membre Club


L'exemple parait très bien, mais impossible d'y ajouter une "action sémantique" en respectant la syntaxe donnée dans l'aide en ligne.

Bizarre, les exemples donnés avec la bibliothèque spirit marchent mieux.

Cordialement,
Xterminhate.

mercredi 23 septembre 2009 à 16:40:26 | Re : Développement d'un compilateur C vers ByteCode pour machine virtuelle

victorcoasne

Membre Club


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.

Merci et bonne prog,
@++

Victor

mercredi 23 septembre 2009 à 21:43:10 | Re : Développement d'un compilateur C vers ByteCode pour machine virtuelle

xterminhate

Membre Club

Victor,

La machine virtuelle, dont il est question, est spécifique. Elle reprend certains concepts de la machine virtuelle Java.

Elle expose un jeu d'instructions pour lequel il n'existe aucun OS ou logiciel compatible à ce jour.

La seule facon de l'exploiter est de programmer directement en langage machine (byte code). Cela n'est pas pratique.

D'ou l'idée de développer un compilateur pour cette machine virtuelle.

Cordialement,
Xterminhate.



Cette discussion est classée dans : machine, développement, compilateur, virtuelle, bytecode


Répondre à ce message

Sujets en rapport avec ce message

Détection machine virtuelle [ par lombredudragon ] Salut tout le monde! Voila j'aimerais savoir si c'est possible en C/C++ de faire un programme qui arrive à savoir s'il est executé sur une machine v machine virtuelle 2007 [ par malbackt ] Bonjour à tous;Pourriez vous m'aider à résoudre ce problème s'il vous plaît,Virtual PC n'a pas pu ouvrir le pilote des services Réseau d'ordinateurs v Compilateur c++ [ par kopierreko ] Bonjour tout le monde,Je recherche actuellement le compilateur Visual C++ 6.0Pas la peine de m'en proposer un autre, c'est celui là qu'il me faudrait Recherche d'un code en languga C pour le développement d'un serveur /cleint [ par margou57 ] Bonjour à tousJe dois développer un programme en C permettant la création d'un serveur, initialiser la socket d'écoute et se positionner en attente de eclipse cdt et embarqé [ par ensi2009 ] bonjour , Est ce qu on peut changer le compilateur d eclipse cdt ? Eclipse cdt utilise le gcc , est ce que je peut utilisé le fcc907s ( ou un autr CNC MACHINE 5 AXES [ par gripsous2 ] BONJOUR ,je suis nouveau et je debute dans la programmation sur les machines a commande numeriques.Je vais bientot travailler sur une fraiseuse 5 axes Redemarrer Machine [ par chinois0013 ] Bonjour,Après avoir terminé mon programme qui me permet de modifier la base de registre (merci à ceux qui m'ont aidés !), pour que les changements soi Dev plug-in [ par joss91 ] Bonjour, Je souhaiterais de l'aide concernant le développement d'un plugin sur MS Outlook 2007. Etant ultra novice dans ce domaine "développement plug Comment sortir du code machine sur visual C++ [ par wallie0703 ] Bon je débug mon programme avec Visual C++ 2008? en fait j'ai eu un message qui me demandais d'afficher oui ou non le code machine et moi j'ai mis "ou Detection du Login sur machine. [ par albanovisch ] Bonjour, je travaille en c++ sur une application qui va se charger de récupérer qui veut se loger sur la machine. J'ai beau regardé un peu partou


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,429 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales