2010-11-10 3 views
4

Supposons que j'ai conçu un nouveau langage de programmation pour l'un des environnements de code managé (.NET/JVM). Puis-je maintenant l'implémenter en écrivant simplement un traducteur qui traduit le code source de cette nouvelle langue dans la langue principale de la plateforme (C#/Java) puis en laissant les compilateurs de la plateforme et d'autres outils gérer le reste du processus? Y a-t-il des exemples simples de preuve de concept, des exemples de cette approche?implémentation d'un nouveau langage de programmation

+0

Ressources pour l'effort (lexing, analyse syntaxique, la construction d'un AST si vous le désirez, etc ...): [Apprendre à écrire un compilateur] (http://stackoverflow.com/q/1669/2509). – dmckee

Répondre

6

Oui, vous pouvez le faire aussi longtemps que la sémantique est mappée correctement (par exemple, vous devez prendre soin de mapper le code JavaScript sur un langage tel que C# car les règles de portée sont différentes).

Ce n'est pas sur une plate-forme gérée, mais vous pouvez regarder Vala. C'est un langage de type C qui compile en C. Eiffel compile aussi en C (et supporte la compilation en Java).

Si vous êtes sur une plate-forme gérée, vous voudrez peut-être regarder directement le bytecode émetteur. Le bytecode Java n'est pas difficile à émettre, car la machine virtuelle prend en charge et fournit des instructions pour les opérations de compilation les plus complexes (telles que la gestion des trames de pile) et la VM élimine d'autres coins difficiles comme l'allocation de registres.

1

Oui, vous pouvez certainement le faire. Le principal problème que vous allez rencontrer est qu'il est difficile de fournir un diagnostic/débogage au niveau de la source pour votre langue.

+1

Ce n'est pas aussi dur que ça en a l'air au début. Juste avoir une compilation en mode "debug" qui stocke le numéro de ligne d'origine que le nouveau code est en cours d'exécution. Ensuite, il vous suffit d'écrire un débogueur simple qui intercepte une exception de premier niveau et affiche le dernier marqueur de ligne passé. Ensuite, vous pouvez obtenir fantaisie et permettre de marcher à travers les marqueurs ou de les tracer dans un fichier journal. Je pense que c'est relativement facile par rapport à la tâche principale de développer une nouvelle langue. – JOTN

1

Bien sûr, le premier compilateur C++ que j'ai utilisé a traduit le code en C et a ensuite utilisé le compilateur et l'assembleur système pour créer l'exécutable. Je crois que c'était de Sun, mais ça fait longtemps. Vraiment le C à l'assemblage fait la même chose.

0

Je propose 2 étapes:

Tout d'abord, faire un traducteur ou compilateur de votre langue à C# ou Java. Deuxièmement, faites un traducteur au code .NET (CIL ou MSIL) ou au bytecode Java.

(un autre compilateur & programmation conception du langage hobbyst)

Questions connexes