[quote=“Cluxter”]]
Je vois…
Toutefois il ne s’agit pas de concevoir quelque chose qui puisse convertir du C en Caml, mais de programmer directement en pseudo-code et ensuite de convertir ce code en code compilable.
Autrement dit, si j’ai la chose suivante :
<code>
<print>
<factorielle val="6"/>
</print>
</code>
et bien si on veut le convertir en C, on va générer l’algo qui va bien (et qui sera toujours le même pour la balise ), et en Caml on va générer un autre code qui permettra également d’obtenir le résultat souhaité. Mais à aucun moment on ne va tenter de convertir du Caml en C.
[/quote]
J’avoue que je n’ai pas bien compris. Si tu veux faire du passage XML vers langage de programmation, tôt ou tard, il te faudra fabriquer le code, donc te heurter à cette difficulté: tu vas devoir mettre une sémantique sur ton XML et je doute fort que tu puisses trouver une sémantique commune convenant à ces deux langages, sauf à te restreindre à deux sous ensembles qui enlèveront tout intérêt aux dits langages; en gros par exemple tu peux faire du C en Caml mais ça n’a pas de sens.
[quote]
Je ne souhaite pas faire en sorte que l’on puisse utiliser toutes les subtilités de chaque langage en XML, mais l’inverse : ce qui est écrit en XML devient compilable en un autre langage.
[/quote]Certes mais dans ce cas, ça perd énormément d’intérêt. Le mieux est de prendre un sous ensemble du C, un compilateur, tu récupères le parseur et tu modifies juste la génération de code. Ça a été fait pour transposer du Pascal en C par exemple.[quote]
En fait l’idée est un peu comme ce que l’on fait aujourd’hui par rapport à l’assembleur. Tous les langages compilés sont en fait compilés en assembleur au final. Et on est loin d’obtenir un code assembleur toujours très optimisé. Mais écrire en C ou en Python (OK ce dernier est interprété mais ça ne change pas grand chose) facilite énormément la tâche des développeurs. Pourtant ces langages ne permettent pas d’obtenir toutes les subtilités de l’assembleur (même si le C permet beaucoup de choses). On délaisse quelque peu l’optimisation au profit de plus de flexibilité et de clarté du code, pour gagner en temps et en fiabilité.[/quote]
Par ler de subtilité sur l’assembleur est osé, c’est quand même très primaire par définition. Par ailleurs tu es rude avec le code fabriqué par gcc par exemple, jette un oeil dessus, c’est possible de l’améliorer à la marge mais ça n’est pas simple loin de là.
[quote]
Et bien là ça serait la même chose. On ne cherche pas à donner la possibilité d’utiliser toutes les subtilités du C ou du Python, mais à avoir un code facile à maintenir et à transcrire dans un langage ou un autre.
[/quote]Franchement, j’ai du mal à en voir l’intérêt, l’assembleur est lié à une machine, c’est son inconvénient majeur et ça justifie l’existence des compilateurs. Après les langages ont un intérêt propre du fait de leur spécificité: tu choisis le C pour l’efficacité du code, son interface avec le noyau et la possibilité de gérer facilement du matériel, le Caml pour la puissance de ses structures de données, le Cobol pour la compatibilité avec l’existant dans ta boite, etc. Autant un outil permettant de passer d’un langage à un autre se comprend et est intéressant, autant un meta langage te donne l’inconvénient de tous les langages et aucun des avantages. La question est qui s’en servirait et surtout dans quel but?
Mais si tu veux le faire, la marche est assez simple:
Tu fabriques un parseur (avec le XML, c’est rapide) et tu organises l’arbre du programme.
Puis pour chaque langage, tu fabriques un traducteur fabriquant un code générique pour tes primitives. Bref c’est un compilateur avec juste un choix de sortie pour le code final. Je pense d’ailleurs que très rapidement, tu seras tenté de faire un interpréteur, c’est presque plus simple, puis un compilateur complet.
Ce sera très formateur mais je pense que tu seras déçu au final.