98 Stimmen

Welche Arten von Mustern könnte ich dem Code aufzwingen, um ihn leichter in eine andere Programmiersprache übersetzen zu können?

Ich bin dabei, ein Nebenprojekt zu starten, dessen Ziel es ist, Code von einer Programmiersprache in eine andere zu übersetzen. Die Sprachen, mit denen ich anfange, sind PHP und Python (Python zu PHP sollte am Anfang einfacher sein), aber idealerweise wäre ich in der Lage, andere Sprachen mit (relativer) Leichtigkeit hinzuzufügen. Der Plan ist:

  • Dies ist auf die Webentwicklung ausgerichtet. Der ursprüngliche und der Zielcode werden auf Frameworks aufsetzen (die ich ebenfalls schreiben muss). Diese Frameworks werden ein MVC-Entwurfsmuster verwenden und strengen Kodierungskonventionen folgen. Das sollte die Übersetzung etwas einfacher machen.

  • Ich beschäftige mich auch mit IOC und Dependency Injection, da sie den Übersetzungsprozess einfacher und weniger fehleranfällig machen könnten.

  • Ich benutze Pythons Parser-Modul die es mir ermöglicht, mit dem abstrakten Syntaxbaum zu spielen. Das, was ich mit PHP am ehesten erreichen kann, ist anscheinend token_get_all() Das ist ein Anfang.

  • Von da an kann ich die AST, die Symboltabellen und den Kontrollfluss erstellen.

Dann glaube ich, dass ich mit der Ausgabe von Code beginnen kann. Ich brauche keine perfekte Übersetzung . Ich werde den generierten Code noch überprüfen und Probleme beheben müssen. Idealerweise sollte der Übersetzer problematische Übersetzungen kennzeichnen.

Bevor Sie fragen: "Was zum Teufel soll das?" Die Antwort ist... Es wird eine interessante Lernerfahrung sein. Wenn Sie wissen, wie man das Ganze weniger entmutigend gestalten kann, lassen Sie es mich bitte wissen.


EDITAR:

Ich bin mehr daran interessiert zu wissen, welche Arten von Mustern ich dem Code aufzwingen könnte, um die Übersetzung zu erleichtern (z. B. IoC, SOA ?), als daran, wie ich die Übersetzung durchführe.

6 Stimmen

Haben Sie sich Systeme wie die .NET CLR oder Parrot von Perl6 angesehen? Sie kompilieren eine Reihe von Sprachen in eine Zwischendarstellung, die von einem gemeinsamen Interpreter ausgeführt werden kann. Wenn man von der Zwischendarstellung zurück zu einer Sprache gehen kann, hat man einen Übersetzer.

1 Stimmen

@Borealid AFAIK ist die .NET CIL (relativ) einfach zu kompilieren in aber viel Glück dabei, lesbaren Code zurückzubekommen. Ich schaue mir jetzt Parrot an.

0 Stimmen

Es gibt ähnliche Projekte für andere Sprachen; ich bin nicht sicher, wie reich deren Autoren sind. Und ich schränke mich hier tatsächlich sehr ein, indem ich ein Gerüst brauche und mich an strenge Programmierkonventionen halte.

0voto

ptomato Punkte 53719

Sie könnten einen Blick auf die Vala-Kompilierer , das Vala (eine C#-ähnliche Sprache) in C übersetzt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X