Ich habe einen Compiler erstellt, der einen Zwischencode erzeugt. Ich habe keine Zeit, das Backend für mein Projekt zu schreiben.
Gibt es irgendeine Software, mit der ich den produzierten Zwischencode auswerten könnte? Wo könnte ich diese Software herunterladen?
Die Ausgabe sieht ungefähr so aus:
%Vor%Danke fürs Lesen.
Code Generation ist mein Geschäft: -)
Kommentare zu einigen Optionen:
CLR:
LLVM:
C als Zielsprache
Zusammenfassung: alles außer C ist eine vernünftige Wahl. Für die beste Kombination aus Flexibilität, Qualität und erwarteter Langlebigkeit würde ich wahrscheinlich LLVM empfehlen. Aber Ihr Beispielcode ist sehr nah an C--, das kann ein Vorteil sein.
Vollständige Offenlegung: Ich bin Mitglied des C-- Projekts.
Sehen Sie sich das llvm-Compiler-Infrastrukturprojekt an. Es wird in vielen realen Projekten verwendet. Die LLVM ist eine Low-Level-virtuelle Maschine, einfach zu Code erstellen und leicht in nativen Code zu übersetzen.
Ihr ausgegebener Code sieht C sehr ähnlich. - Lassen Sie Ihren Compiler C nicht ausgeben und verwenden Sie einen C-Compiler als Backend - so funktionierte der ursprüngliche C ++ - cfront-Compiler.
Ich würde empfehlen, Pascal-Code auszuspucken und Free Pascal zu verwenden.
Es ist nativ kompiliert, die Compilation ist blitzschnell und Sie können auf eine Vielzahl von Plattformen abzielen.
Warum zielen Sie nicht auf eine andere Hochsprache als Zwischenausgabe ab, zum Beispiel könnten Sie C-Code generieren und einen beliebigen C-Compiler verwenden, um das zu kompilieren. Dies wurde in der Vergangenheit von einer Reihe von Hochsprachen verwendet.
Eine weitere etwas niedrigere Option wäre, IL-Code zu generieren und die .NET-Laufzeit zu verwenden. Wenn der Compiler in .NET geschrieben ist, können Sie den Namespace Reflection.Emit verwenden, um eine .NET-Assembly zu generieren, die dann in einer beliebigen .NET-Umgebung ausgeführt werden kann.
Vielleicht haben Sie mehr Glück, wenn Sie einen Compiler-Stack auswählen und den von diesem Stack unterstützten Zwischencode verwenden. Zum Beispiel verwendet gcc RTL , registriert die Übertragungssprache als gemeinsamen Nenner für alle Sprachen, die von gcc unterstützt werden. Ich vermute, dass .net etwas Ähnliches hat, das für Dinge wie IronPython verwendet wird.
Wenn Sie etwas verwenden möchten, das eine virtuelle Maschine zum Auswerten von Code bereitstellt, verwenden Sie SPIM MIPS vm unterstützt die Motorola 68000 Architektur und ist sehr einfach zu bedienen.
Tags und Links compiler-construction