7
votes

Traduisez une langue à une autre?

est-il possible de traduire une langue à une autre avec un interprète?

Entendu que Quercus puisse traduire PHP en Java? Au début, je pensais que c'était une solution moche peu coûteuse qui pourrait donner des erreurs de code, mais il semble que c'est pleinement possible de le faire.

Pourriez-vous traduire PHP dans d'autres langues, comme Python ou Ruby? C ++ à Java et ainsi de suite?


3 commentaires

Voir mon donc "Titre =" Comment traduire entre Langages de programmation "> Stackoverflow.com/Questions/3455456/... Répondez sur la traduction entre les langues


Vous pouvez avoir une solution moche bon marché qui produit des solutions de travail moche mais de travail. En règle générale, vous ne pouvez pas traduire facilement entre Langatsues et vous ne pouvez pas faire du bon travail avec des machines de fondation moche.


Une mauvaise réponse standard est: "Traduisez la langue orginale en appels sur une bibliothèque de langues cible qui simule la" sémantique "des langues d'origine; Essentialy, vous êtes en train de reculer un interprète. Vous pouvez toujours faire cela; Une machine de Turing peut toujours imiter une autre. Mais le résultat de telles traductions est généralement assez horrible à lire, n'utilise pas la languette de la cible de manière à ce que les ministères formés par la langue cible attendent et ont souvent des frais généraux élevés (tous ces appels de simulation) pour démarrer. Donc, vous pouvez toujours faire cela, mais vous ne devriez pas.


4 Réponses :


5
votes

Le problème vient lorsque vous avez des idiomes qui ne se traduisent pas, non plus de ou vers. Vous obtenez un code syntaxiquement valide, mais on dirait qu'il a été écrit par une personne sur l'acide.


2 commentaires

Ne peut pas attester de la rapidité ou de bien sûr.


Cela donne un tout nouveau sens au test de l'acide!



1
votes

Ce n'est peut-être pas ce que vous êtes après, mais il y a Swig http://fr.wikipedia.org/wiki/swig

Nous l'avons utilisé dans l'un de nos projets pour créer des liaisons / emballages de Python, Java et Ruby pour un cadre C ++. Voir l'action en action à http://marsyas.ssness.net


1 commentaires

Je ne comprends pas tout à fait ... que fait-il en anglais clair?



11
votes

Traduire une langue à une autre n'est qu'un cas particulier pour la classe de programmes appelés compilateurs, interprètes et traducteurs.

Cette classe de programme prendra un flux de symboles d'entrée ("code source") qui peut généralement être décrit par une grammaire formelle et émise un flux de symboles.

Ce flux de sortie de symboles peut être:

  • Code de montage natif, généralement pour le système d'exploitation et le matériel, la machine est activée. Si tel est le cas, le programme est appelé compilateur;
  • code d'assemblage natif pour un système d'exploitation différent et / ou d'un matériel. Cela peut être appelé un compilateur aussi mais est souvent appelé compilateur croisé;
  • à une forme intermédiaire pouvant être exécutée par une machine virtuelle de quelque sorte. Ce n'est pas un vrai compilateur mais est souvent appelé un compilateur de toute façon. Le java, c #, f #, vb.net, etc. "compilers" tombent tous dans cette catégorie;
  • à une autre langue entièrement. Ceci s'appelle un traducteur et il existe des exemples de, disons, Java à C # Traducteurs. Ils ont généralement différents degrés de succès car les idiomes ne sont souvent pas facilement traduits;
  • Les interprètes suivent le même principe mais exécutent généralement la forme traitée en place plutôt que de l'économiser quelque part. Les scripts PERL, PHP et Shell tombent tous dans cette catégorie. PHP, par exemple, stockera des opcodes dans un cache de fonctionnement sous forme de formulaire intermédiaire (si la mise en cache d'opcodage est activée) mais ce formulaire intermédiaire n'est pas stocké, il est donc toujours sûr d'appeler PHP un interprète.

1 commentaires

Y a-t-il un livre, un tutoriel ou un exemple que vous pouvez suggérer? Même un simple



2
votes

Rechercher pour obtenir un "transpilateur" pour certains pointeurs: https://stackoverflow.com/search?q=transpiler


3 commentaires

+1, jamais entendu parler du terme transpilateur avant. Sonne le ringard comme l'enfer, mais utile de savoir.


-1, je construis depuis longtemps des outils de translation et chaque fois que vous entendez un terme bestball comme "transpilateur" ou "transcodeur" plutôt que "traducteur", la réponse elle-même est une solution et n'est pas vraiment une bonne solution si fonctionne du tout. Ceux que j'ai examinés produisent réellement produisent des réponses, mais seulement si vous voulez dire que vous voulez dire "traduit et exécute et est un cauchemar pure cru à maintenir". Voir la discussion sur la NACA qui produit Jobol: Stackoverflow.com/questions/1029974/...


Désolé que ce n'était pas dans votre éducation; Mes professeurs m'ont appris ce terme.