Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création d'un langage de programmation

from scratch

Anonyme
    2 janvier 2015 à 3:08:48

    Salut,
    Avant toute réflexion, je sais pertinemment que créer un langage de programmation est bien trop ambitieux avec mes compétences actuelles mais j'aimerais tout de même tenter ma chance dans ce projet, un échec même cuisant ne peut être que bénéfique pour mon apprentissage :)
    Mes compétences sont en effet faibles, en tout cas trop pour créer un langage, j'ai fait un an de Python, du JAVA, un peu de C++ et ai touché à quelques langages mais que je maîtrise moins (Ruby, Lua, Haskell et JS).
    J'ai déjà effectué quelques recherches sur le procédé de création d'un langage, j'ai réfléchi aux concepts et paradigmes principaux que je voudrais implémenter dans mon langage mais, au moment de coder, je bloque, je ne sait pas par où commencer. J'aimerais programmer ce langage en CPython car je suis à l'aise en Python et le C est plus rapide.
    Mon problème réside dans le fait que je ne sais pas comment un compilateur marche ! Malgré mes recherches je n'arrive pas à comprendre, je cherche une bonne âme qui saurait m'expliquer comment un compilateur fonctionne. Le tokenizer/lexer je sais déjà comment faire.
    Merci d'avance,
    AZ

    • Partager sur Facebook
    • Partager sur Twitter
      2 janvier 2015 à 5:03:03

      Salut,

      étant moi aussi dans la création de mon langage, je crois bien pouvoir t'aider.

      Le compilateur n'est juste qu'un programme qui traduit le code source d'un langage à un autre de plus bas niveau. Exemple : pour mon langage, le code était traduit en C++ maintenant j'opte pour le C.

      La traduction du code se fait en différentes étapes : 

      Nous allons traduire :

      var x as int en C en partant des procédés utilisés par mon compilateur.

      1. Tokenisation
      C'est le fait de diviser le code en lexèmes, parties et de les reconnaitre ( de préférence grâce au regex ).

      Pour le code plus haut, ça donnera :
      var -> mot-clé var
      x -> identifiant
      as -> mot-clé as
      int -> mot-clé int

      2. Analyse syntaxique
      C'est le fait de vérifier l'exactitude des instructions. A partir du code otenu plus haut, mon compilateur va savoir qu'avec le mot-clé var en début d'instruction, c'est une initialisation donc, on va vérifier que le reste de l'expression est correcte :
      Y'a t'il un nom pour la variable ? Son type est-il précédé de as ? ect...

      3. [ Optionnel ] Production d'un arbre XML avec la structure du programme.

      Ex : < init name='x' type='int'/>

      4. Analyse sémantique

      C'est la phase qui permet de comprendre le code source :
      On déclare une variable x ; l'avait on déjà déclaré ?? 

      Cette partie détecte les erreurs de logique .

      5. Production de l'Arbre Syntaxique Abstrait ( Abstract Syntaxic Tree [ AST ] )
      C'est la représentation du programme, de son squelette sur lequel on effectuera d'éventuels optimisations . Perso j'utilise XML mais on parle de BNF.

      6. Production des sources du langage cible selon l'AST puis

      7. Utilisation d'un compilateur existant comme GGC.

      J'espère avoir été assez clair :)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        2 janvier 2015 à 5:17:26

        Salut Orlson (j'ai vu ton langage d'ailleurs, super :D ),
        Le procédé de tokenisation ne me pose pas vraiment de problème, mais merci quand même. C'est vraiment la compilation en elle même qui demeure un mystère. Je ne comprend pas, GCC compile quoi exactement ? Si j'ai bien compris, grossièrement, un compilateur c'est juste le google traduction des langages: tu appelle le parseur avec en argument du code de ton langage et il te retourne du code dans un langage qui existe déjà, c'est ça ?

        Merci de la réponse rapide ;)

        • Partager sur Facebook
        • Partager sur Twitter
          2 janvier 2015 à 5:28:01

          Il y a quelques differences avec une traduction parce que le compilateur doit comprendre ( ouais je sais ) le code.

          GGC compile du C. Ca vient avec MinGW dans la plupart des IDE pour C/C++. On peut aussi télécharger à part.

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            2 janvier 2015 à 5:49:28

            GGC compile du C.

            Erf oui, je me suis mal exprimé... Je voulais dire, le code C, il le trouve où ? C'est bien nous qui devons traduire le code de notre langage en C, non ? (Remarque avec CPython ça devrait pas être trop compliqué).
            Merci pour les précisions en tout cas :)

            -
            Edité par Anonyme 2 janvier 2015 à 5:49:49

            • Partager sur Facebook
            • Partager sur Twitter
              2 janvier 2015 à 5:53:52

              Oui nous allons écrire le code C du moins le compilateur. Attention à ne pas être tenter de sauter une étape, faut essayer de bugger le compilateur et n'oublies pas de produire le code C à partir de l'AST. 

              Bonne chance et si t'as besoin d'aide, MP moi ;)

              -
              Edité par Orlson 2 janvier 2015 à 5:54:35

              • Partager sur Facebook
              • Partager sur Twitter
                2 janvier 2015 à 11:59:07

                Le principe de la compilation est effectivement de traduire un langage en un autre. Dans le cadre de GCC, il s'agit de traduction de C ou C++ vers du langage machine (instructions comprises par ta machine pour pouvoir exécuter le programme).

                Cependant, pour se simplifier la tâche, la traduction est souvent faite en plusieurs passes, en manipulant des représentations intermédiaires de ton programme (comme l'AST évoqué plus haut, les quadruples), avec des optimisations pouvant survenir à chaque étape.

                Je t'invite à lire la documentation de clang pour plus d'informations sur le fonctionnement d'un compilateur.

                • Partager sur Facebook
                • Partager sur Twitter

                Création d'un langage de programmation

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown