IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

Comment créer un compilateur ?


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 146
    Par défaut Comment créer un compilateur ?
    Je me suis lancer avec des amis pour créer un nouveau language de programmation, j'ai eu de l'aide, mais maintenant j'ai besoin de vous pour m'eclairssir sur comment créer un compilateur? Quel language dois-je utiliser?
    N.B : je veut traduire un code source d'un nouveau language de programmation en Byte pour que le PC l'execute.

  2. #2
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Salut,

    Premièrement il faut définir une synthaxe et une sémantique pour ton compilateur, et surtout savoir ce que tu souhaite en faire bien sûr.

    Des explications détaillés pour commencer sont données ici:
    http://en.wikipedia.org/wiki/Program...mming_language

    L'idéale si tu veux t'affarchir de toutes contraintes imposés par un autre, c'est de partir du plus bas niveau cad langage machine (allez, assembleur pour ne pas être trop méchant) et de les définir pour obtenir des fonctions. Mais ça prend beaucoup de temps et ça demande une importante somme de connaissances (l'assembleur, le système d'exploitation, la théorie du langage...)

    Maintenant si tu veux pas trop te prendre la tête, tu peux aussi créer une bibliothèque utilisant un langage courrant, dont les fonction serait implémenter par toi, avec le nom que tu souhaite leur donner.Et là c'est nettement plus simple.

    @+.

  3. #3
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Tu peux aussi utiliser Lex et Yacc pour t'aider.
    Et quand au langage de programmation pour ton compilateur, tout dépend si tu as des impératifs de rapidité, de simplicité, de gestions de chaînes...
    L'idéal, je suppose, c'est de choisir celui où tu es le plus à l'aise.

    @+.

  4. #4
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Comme souvent, il s'agit surtout d'y aller pas a pas en sachant ou tu vas.

    Un compilateur (basique) c'est quoi ? C'est juste une espece de gros parseur qui traduit un mot (genre "int variable") en son équivalent machine.

    La premiere chose a faire est de définir avec précision ton language. Quels mots clefs, quelle syntaxe, comment tu définis un bloc de code, la porté de tes variables, objet ou pas, les possibilités de tes structures de données etc...

    Une fois que tu as la liste exhaustive de tes mots clefs / syntaxe, chacun signifie quelque chose de bien particulier pour une machine.

    Par exemple, "a = a + 3;" ca va faire quoi ? Ca peut être :
    Lire ce qui est stocké dans l'espace memoire réservé par "a"
    Creer un espace temporaire pour faire le calcul
    Faire l'addition de "a" et "3"
    Copier le contenu de l'espace temporaire dans l'espace reservé a "a".

    (Ce n'est qu'un exemple, il y a probablement d'autres actions qui sont faite et il y a évidement des optimiations possibles, genre ne pas passer par un espace temporaire)

    Une fois que tu as ca, tu traduits en assembleur, ca va te faire une bonne tonne d'instruction. Et une fois en assembleur, tu fait du binaire.

    Lex et Yacc vont pouvoir t'aider a décomposer ton code. Mais a mon sens la premiere difficultée vient du fait ce qu'il faut vraiment maitriser les mécanismes sous-jacent a chaque action et savoir ce qui se passe "derrière".

  5. #5
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Pour un premier compilateur, je pense que vouloir traduire ton langage en binaire est tout bonnement irréel : en assembleur peut-être, mais en binaire, non. La phase du passage de l'assembleur vers le binaire doit se faire via un assembleur et un linker (NASM est bien comme assembleur, simple et efficace)... que tu peux invoquer à partir de ton programme (le compilateur).

    Comme on te l'a dit, définis bien ton langage et surtout la sémantique de celui-ci.

    Concernant les outils, tu ne pourras pas passer à côté de l'utilisation d'outils tels Yacc et Lex (si tu fais le compilateur en C), ou équivalents. Savoir faire une grammaire sans conflits, qui marche correctement, c'est tout un art en soi : en bref, il faut en avoir fait plusieurs, s'être arraché les cheveux par touffes !

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 146
    Par défaut
    Bon je suis d'accord, je vais traduire mon code source en assembleur puis en binaire, mais quels sont les outils que j'airais besoin pour ce but?
    Merci les amis, je sais ue je suis un vrai mule dans cette histoire mais personne n'est né avec un status de prof!

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 528
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 528
    Par défaut
    Citation Envoyé par InOCamlWeTrust
    La phase du passage de l'assembleur vers le binaire doit se faire via un assembleur et un linker (NASM est bien comme assembleur, simple et efficace)... que tu peux invoquer à partir de ton programme (le compilateur).
    d'accord mais comment dire à NASM de faire l'édition des liens ?
    En produisant des fichiers obj et c'est la ou la difficulté commence..

  8. #8
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 528
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 528
    Par défaut
    Citation Envoyé par @v@lon
    N.B : je veut traduire un code source d'un nouveau language de programmation en Byte pour que le PC l'execute.
    je reprends le sujet : si tu veux te lancer dans cette aventure, faut passer d'abord par l'écriture d'un assembleur c.a.d. qui traduit un fichier source en .asm en code i86 puisque c'est le plus répandu ( quitte après à faire cela pour un autre CPU)
    Sur le site d'Intel ily a toute la doc sur les codes ( mnémoniques ) du i86.
    Commencer par compiler des .com c'est les plus simples en s'aidant de debug du dos.
    Après avoir réalisé un petit assembleur tu peux faire un interpréteur /compilateur qui traduise ton langage en asm puis assemblé en code machine...

    sinon tu peux créer ton propre langage en pseudo code interprété comme Java ou .NET , chaque instruction ayant un code: exemple if=>valeur arbitraire...

  9. #9
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Disons pour être plus... diplomate, que Panda31 emets un septiscime poli, mais néamoins justifié sur cette entreprise qui peut, vu de l'exterieur en tout cas, paraitre un peu... difficile.

    Ceci dit, le premier message a été posté le 10/02, soit il y a environ un mois et demi. Ce qui m'interesserai de savoir, afin de, pourquoi pas, dissiper les doutes de Panda (et les miens ^^) sur la viabilité de ce projet, c'est ou en est le projet aujourd'hui.

    Est-ce qu'il y a eu quelque chose de commencé ? Je ne parle pas forcement de code, mais... une ébauche de grammaire ? Une vague direction ?

  10. #10
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 146
    Par défaut
    Effectivement, tous ce qui est Synthaxe (mots resérvés et structure générale du code et même du langage).... est déjà fait.
    (Notre projet à les 5 langues années avenir, alors pas la peinne de passer à la 5ème vitesse!)

  11. #11
    Membre émérite
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Par défaut
    C'est pas le plus dur de détecter des mots clés mais bravo pour cela. J'ai déjà créer un cross-compliateur basé sur GCC et je sais que cela ne suffit pas.

    un compilateur ne fait pas que détecter des mots clés mais il trace aussi un graphe de correspondances entre ces mots clés et leur dépendances.

    Certes, reconnaître un IF c'est bien mais reconnaître le ENDIF ou un block délimité par "{...}" c'est autre chose.

    Voilà pourquoi je suis sceptique. Je suis prêt à participer dans l'aide à ton projet mais il faudra d'abord que tu te renseignes sur les élements qu'un listing de code peut reconnaître: PLCS, imbrications, branchements, ...
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  12. #12
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par @v@lon
    Je me suis lancer avec des amis pour créer un nouveau language de programmation, j'ai eu de l'aide, mais maintenant j'ai besoin de vous pour m'eclairssir sur comment créer un compilateur? Quel language dois-je utiliser?
    N.B : je veut traduire un code source d'un nouveau language de programmation en Byte pour que le PC l'execute.
    Un très bonne stratégie: traduire ton programme en C, compiler le C ANSI.

    Ton problème est modifié vers un langage d'un peu plus haut niveau que l'assembleur, la traduction est simplifiée.

    Niveau performance, le C compilé est souvent bien meilleur que l'assembleur écrit à la main.

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 146
    Par défaut
    Ben merci les amis, et ça c'est du l'aide!


Discussions similaires

  1. comment créer un compilateur pour le langage C ?
    Par mooan dans le forum Choisir un environnement de développement
    Réponses: 1
    Dernier message: 02/12/2010, 12h27
  2. [Visiteur] comment utiliser le design pattern de visiteur pour créer un compilateur
    Par katimm dans le forum Design Patterns
    Réponses: 12
    Dernier message: 18/09/2008, 10h22
  3. [] [Stratégie] Comment créer un fichier log
    Par Skeezo dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 16/09/2002, 18h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo