Création d’un langage objet

Bonjour,

Je me suis lancé dans la conception d’un langage objet qui sera ensuite compilé dans d’autres langages au même titre que Dart et CoffeeScript qui sont compilés en Javascript.

Plusieurs problèmes se posent à la création d’un langage :

L’outil de compilation :

Plusieurs choix s’offrent à moi. Je pourrais tout simplement créer un compilateur avec le couple lex/yacc qui me donnerai un langage cible connu et en rester là. Cependant cela ne me satisfait pas tellement car j’aimerais fournir plusieurs langages cibles afin d’être utilisable par une jvm, un moteur javascript ou un interpréteur PHP. Créer plusieurs compilateurs pour ces différents outils semble difficile, et c’est d’ailleurs le cas. Mon choix s’oriente vers une compilation en deux temps. D’abord un lexxer/parser sera écrit (je ne sais pas encore avec quel outil mais surement un existant), pour produire une série de fichiers xml pré-compilés. Un peu comme le bytecode de Java. Par la suite, une transformation XSL permettra de générer un code dans le langage cible.
Cette compilation en deux temps a quelques avantages. Il permet à un nouveau langage de voir le jour, de générer des fichiers XML validé par les mêmes outils de validations (je pense à des Schémas XSD) pour réutiliser les mêmes transformations XSL afin de produire le code souhaité.

L’environnement :

Mon objectif est de compiler le même langage vers du javascript, java (ou bytecode) ou même PHP. Mais ces derniers langages n’ont que peu de choses en commun. Il n’existe pas de Socket avec IE7 pour être utilisé en Javascript, PHP ne sais pas afficher d’éléments graphiques, l’accessibilité des bases de données est très limitée en javascript (un peu moins en ce moment grâce à Node.js). Aussi il faut prévoir les outils nécessaires afin d’accéder à ces éléments graphiques et prendre en compte leur inaccessibilité.

Le langage :

Le langage lui même est un problème. Il faut prévoir une grammaire suffisamment robuste pour implémenter toutes les fonctionnalités. On notera par exemple qu’il est impossible en javascript de s’assurer du typage des paramètres d’une fonction de façon native.

Laisser un commentaire