eine Sprache in eine andere übersetzen?

7

ist es möglich, mit einem Interpreter eine Sprache in eine andere zu übersetzen?

gehört, dass Quercus könnte PHP in Java übersetzen? Zuerst dachte ich, es wäre eine billige, lausige Lösung, die Code-Fehler geben könnte, aber es scheint, dass es vollständig möglich ist.

Könnten Sie PHP in andere Sprachen wie Python oder Ruby übersetzen? C ++ zu Java und so weiter?

    
ajsie 13.01.2010, 07:54
quelle

4 Antworten

11

Das Übersetzen von einer Sprache in eine andere ist nur ein Spezialfall für die Klasse von Programmen, die Compiler, Interpreter und Übersetzer heißen.

Diese Klasse von Programmen wird einen Strom von Eingabesymbolen ("Quellcode") aufnehmen, der normalerweise durch eine formale Grammatik beschrieben werden kann und einen Strom von Symbolen ausgeben wird.

Dieser Ausgabestrom von Symbolen kann sein:

  • Nativer Assemblercode, normalerweise für das Betriebssystem und die Hardware, auf der der Computer läuft. Wenn ja, wird das Programm als Compiler bezeichnet;
  • Nativer Assemblercode für ein anderes Betriebssystem und / oder eine andere Hardware. Dies kann auch Compiler genannt werden, wird aber oft als Cross-Compiler bezeichnet;
  • Zu einem Zwischenformular, das von einer virtuellen Maschine irgendeiner Art ausgeführt werden kann. Dies ist kein echter Compiler, wird aber oft Compiler genannt. Die Java-, C # -, F # -, VB.NET-, usw. "Compiler" fallen alle in diese Kategorie;
  • Zu einer anderen Sprache ganz. Dies wird als Übersetzer bezeichnet und es gibt Beispiele für, sagen wir, Java zu C # Übersetzer. Sie haben typischerweise unterschiedliche Grade von Erfolg, weil Idiome oft nicht leicht übersetzbar sind;
  • Interpreter folgen demselben Prinzip, führen aber die bearbeitete Form in der Regel in-place aus, anstatt sie irgendwo zu speichern. Perl, PHP und Shell-Skripte fallen alle in diese Kategorie. PHP zum Beispiel speichert Opcodes in einem Opcode-Cache als Zwischenform (wenn das Opcoding-Caching aktiviert ist), aber dieses Zwischenformular wird nicht gespeichert, so dass es immer noch sicher ist, PHP als Interpreter zu bezeichnen.
cletus 13.01.2010, 08:02
quelle
5

Das Problem kommt, wenn Sie Idiome haben, die nicht gut übersetzen, entweder von oder nach. Sie erhalten Code, der syntaktisch gültig ist, aber aussieht, als wäre er von jemandem auf Säure geschrieben worden.

    
Ignacio Vazquez-Abrams 13.01.2010 07:56
quelle
2

Suchen Sie SO nach "transpiler" für einige Zeiger: Ссылка

    
Aaron Digulla 13.01.2010 08:03
quelle
1

Dies ist vielleicht nicht das, wonach Sie suchen, aber es gibt SWIG Ссылка

Wir haben es in einem unserer Projekte verwendet, um Python-, Java- und Ruby-Bindings / Wrapper für ein C ++ - Framework zu erstellen. Sehen Sie es in Aktion bei Ссылка

    
D.C. 13.01.2010 07:58
quelle