0

j'ai prévu de développer un outil qui convertit un programme écrit dans un langage de programmation (par exemple: Java) à un langage de balisage commun (par exemple: XML) et que le code de balisage est converti en une autre langue (par exemple: C#). En d'autres termes, c'est un convertisseur de langage de programmation qui convertit un programme écrit dans une langue vers une autre langue. Je pense que c'est possible mais je ne sais pas par où commencer. Je veux connaître les possibilités de le faire et des informations sur un système existant.est-il possible de baliser tous les langages de programmation sous un paradigme orienté objet en utilisant un schéma de balisage commun?

+1

J'espère qu'il peut traduire Whitespace à Ook .. – BoltClock

+3

C'est ce que nous appelons un compilateur - l'écriture d'un n'est pas facile, mais voir ici http://stackoverflow.com/questions/1669/learning-to-write-a -compiler pour les ressources. –

+0

Non. Ce n'est pas possible (mathématiquement et pratiquement). Vraiment, ce n'est pas, de manière utile et pratique, spécialement si vous essayez d'utiliser XML. Si vous en doutez, essayez de convertir cette instruction C ('void * p = 1; p ++ ') ou une instruction d'assemblage (' mov ax, 1234h') en BASIC ou en JavaScript. –

Répondre

3

Ce que vous essayez de faire est extrêmement difficile, mais si vous voulez savoir ce que vous êtes pour que j'ai énuméré les étapes que vous devez suivre ci-dessous:

D'abord le peu dur:

  1. Vous devez d'abord obtenir ou dériver une sémantique opérationnelle pour vos langues source et cible. Puis, vous améliorez la sémantique pour capturer vos modèles de mémoire source et cible. Ensuite, vous devez unifier les deux sémantiques améliorées dans un modèle opérationnel commun. Ensuite, vous devez définir un mappage à partir de vos langues source sur le modèle opérationnel commun.

  2. Ensuite, vous devez définir une cartographie de votre modèle opérationnel à votre langue cible

étape 4, comme vous l'avez souligné dans votre question, est trivial.
L'étape 1 est difficile, car la plupart des langages n'ont pas une sémantique suffisamment formelle spécifiée; mais je recommande de vérifier http://lucacardelli.name/TheoryOfObjects.html car c'est le meilleur point de départ pour construire une sémantique OO traditionnelle.
Étape 2 est presque certainement impossible en général, mais peut être simplement obscène difficile si vous êtes prêt à sacrifier une certaine efficacité.
L'étape 3 dépendra de la propreté du résultat de l'étape 1, mais elle sera délicate et délicate à impossible.
L'étape 5 ne va pas être triviale, elle écrit effectivement un compilateur. En fin de compte, ce que vous proposez de faire est impossible en général, en raison des difficultés héritées aux étapes 1 et 2. Cependant, cela devrait être difficile, mais faisable, si vous voulez: sévèrement restreindre les constructions de langage source supportées; à peu près oublier de gérer les threads correctement; et choisissez deux langages avec des sémantiques suffisamment similaires (c'est-à-dire que Java et C# sont corrects, mais que C++ et tout le reste-else ne le sont pas).

3

Cela dépend de la langue que vous voulez prendre en charge, mais en général c'est une énorme tâche difficile à moins que vous ne prévoyiez de prendre en charge qu'un très petit sous-ensemble de chaque langue. Le vrai problème est que chaque langage de programmation a des caractéristiques différentes (avec certaines zones qui se chevauchent et d'autres qui ne se chevauchent pas) et différentes façons de résoudre les mêmes problèmes - et il est assez difficile de détecter le problème que le programmeur essaie pour résoudre et convertir cela en un nouvel idiome. :) Et pensez aux différences entre les interfaces graphiques créées dans différentes langues ....

Voir http://xmlvm.org/ à titre d'exemple (un projet visant à convertir entre le code source de nombreuses langues différentes, avec un point milieu XML) - le Le site couvre en profondeur les défis auxquels ils s'attaquent et les compromis qu'ils prennent, et (si vous avez toujours un intérêt dans ce genre de projet ...) posez des questions de suivi plus spécifiques.

Avis précisément ce que le code source de sortie ressemble - ce n'est pas du tout lisible, maintenable, efficace, etc ..

+0

merci rob, j'ai commencé à modéliser le système .. je vais vous faire savoir la progression du projet. :-) – brainless

+0

Vous remarquerez que la représentation "XMLVM" est * différente * pour chaque cible. –

2

Il est « techniquement facile » pour produire XML pour une seule langauge: construire un analyseur, Construire et résumer l'arborescence de syntaxe, et vider cette arborescence en tant que XML. (Je construis des outils qui le font sur étagère pour de nombreuses langues). Par techniquement facile, je veux dire que la communauté sait comment faire ceci (voir n'importe quel manuel de compilateur, par exemple, Aho & Ullman Dragon livre). Je ne dis pas que c'est un exercice trivial en termes d'effort, parce que les vraies langues sont compliquées et désordonnées; il y a eu beaucoup de tentatives pour construire des parseurs C++ et peu de succès. (J'ai l'un des succès, et c'était cher de se débrouiller). Ce qui est vraiment difficile (et je n'essaie pas de le faire) est de produire du XML selon un schéma unique dans lequel la sémantique du langage est exposée. Et sans cela, il sera essentiellement impossible d'écrire un traducteur à partir d'un XML générique XML vers une langue cible arbitraire. Ceci est connu comme le problème UNCOL et les gens ont cherché depuis 1958 pour la réponse. Je note que l'article de Wikipédia semble indiquer que le problème est résolu, mais vous ne pouvez pas trouver beaucoup de références à UNCOL dans la littérature depuis 1961.

La tentative la plus proche que j'ai vue à ceci est le modèle "ASTM" de l'OMG (http://www.omg.org/spec/ASTM/1.0/Beta1/); il exporte XMI qui est XML. Mais le modèle ASTM a beaucoup d'échappements intégrés pour permettre aux langauges qu'il ne modélise pas parfaitement (AFAIK, cela signifie chaque langue) pour étendre le XMI de manière arbitraire afin que les informations spécifiques au langage puissent être codées.Par conséquent, chaque analyseur de langage produit une version personnalisée du XMI, et chaque lecteur doit donc connaître à peu près les extensions et la généralité complète disparaît.

Questions connexes