Eine Möglichkeit, dies zu tun, ist die Verwendung von Infrastruktur zum Erstellen von Übersetzern.
Viele Leute denken, dies bedeutet "ein Parser-Generator"; das ist eigentlich naiv. Ein guter Übersetzer muss die Sprache parsen, klar, aber die Übersetzung muss auch verfolgen, welche Symbole bedeuten, dass das, was gesagt wird, kein Quatsch ist, der Code generiert und optimiert. Sie brauchen viel mehr Maschinen als nur einen Parser (Generator), um das gut zu machen. Siehe Life After Parsing.
Unsere DMS Software Reengineering Toolkit ist eine Reihe von Tools zum Erstellen von Programmanalysatoren und -übersetzer, einschließlich als nur ein Element ein sehr starker Parser-Generator.
DMS enthält auch eine program transformation engine, die es ermöglicht, Übersetzungsregeln in Bezug auf die zu übersetzenden Sprachen zu schreiben, if you see this, transform it to that. Das Schreiben von Übersetzungsregeln direkt in die Oberflächensyntax der Sprachen von Interesse macht es einfacher zu schreiben, zu inspizieren, zu debuggen und zu warten.
Das heißt, das Schreiben eines solchen Übersetzers ist keine leichte Aufgabe; Sie müssen den vollständigen Satz von Syntaxkonstrukten mit impliziter Semantik aufzählen und herausfinden, wie Sie dies einer Kombination aus Zielsprachesyntax und zusätzlichen Bibliotheken zuordnen können, die Sie möglicherweise auf der Zielseite erstellen. Dies dauert mehrere Monate, sogar für Experten, pro Übersetzer.
DMS ist agnostisch über welche Programmiersprachen es sich handelt. Sie müssen die Sprachen definieren, die für Sie interessant sind. Es hat eine große Anzahl von Sprachdefinitionen (nützlich als Quellen oder Ziele, Ihre Wahl) für Standardsprachen wie Java und JavaScript. Dieser verfügbare stabile Wert hilft, den Entwicklungszyklus zu verkürzen, aber es sind im Allgemeinen nicht die dominierenden Kosten.
Es gibt einen heiligen Gral des Aufbaus eines "Universalübersetzers", in dem man einen Satz Regeln schreibt und alles danach Pfirsich ist. Diese Idee ist eine Fantasie. Es lohnt sich zu verstehen, dass ein Satz von Übersetzungsregeln von Sprache A nach B nicht wirklich nützlich ist, um Sprache C in D zu übersetzen, weil die Regeln Wissen über spezifische Syntax und implizierte Semantik kombinieren. Nichtsdestoweniger, wenn Sie mehrere "transpilers" bauen, ist es ein enormer Gewinn in Bezug auf Lernkurve und langfristige Wartbarkeit, dies auf einer gemeinsamen Grundlage zu tun.
Mit Tools wie DMS kann man extremely accurate translators. schreiben.
Sie schreiben einen transpiler, indem Sie einen Parser für die Ausgangssprache erstellen, einen Syntaxbaum erstellen und ihn dann in Code in der Zielsprache konvertieren. Abhängig von Ihrer Aufgabe kann es einfacher sein, einen transpiler nicht zu schreiben, sondern einfach die Vorlagen-basierte Code-Generierung zu verwenden, um Code für mehrere Plattformen zu erstellen. – yole
Hi yole, könnten Sie bitte einen Link zu einem Arbeitsbeispiel für eine Sprache bereitstellen? –
[CoffeeScript] (http://coffeescript.org/) ist ein TransPiler, der JavaScript generiert. Sieh dir seine kommentierte Quelle an. Das sollte ziemlich einfach zu verstehen sein. – yole