Benötige einen Backend-Compiler

7

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.

    
user58935 21.03.2009, 15:35
quelle

10 Antworten

13

Code Generation ist mein Geschäft: -)

Kommentare zu einigen Optionen:

  • CLR:

    • Pro: industrielle Unterstützung
    • Con: Sie müssen sich ziemlich vollständig in ihr Typsystem einkaufen; Je nachdem, was Sie mit den Typen machen möchten, spielt dies keine Rolle.
    • Con: Nur Windows-Plattform ist wirklich Prime-Time-Qualität
  • LLVM:

    • Pro: begeisterte Benutzergemeinschaft mit charismatischem Führer
    • Pro: viele interessante Leistungsverbesserungen
    • Con: etwas komplexe Schnittstelle
    • Con: Geschichte der Löcher in der Technik; Wenn LLVM reift, erwarten Sie, dass die Lücken im Engineering geschlossen werden, indem Sie die Komplexität der Schnittstelle erhöhen
  • C--

    • Pro: target ist eine geschriebene Sprache, keine API; Sie können Ihren C-Code leicht überprüfen, debuggen und editieren
    • Pro: Design ist einigermaßen ausgereift und einigermaßen sauber
    • Pro: unterstützt die genaue Speicherbereinigung
    • Pro: Die meisten Benutzer berichten, dass es sehr einfach zu benutzen ist
    • Con: sehr kleines Entwicklerteam
    • Con: Anfang 2009 unterstützt nur drei Hardware-Plattformen (x86, PPC, ARM)
    • Con: wird nicht mit einem Garbage Collector geliefert
    • Con: Zukunft des Projekts ist ungewiss
  • C als Zielsprache

    • Pro: sieht einfach aus
    • Con: fast unmöglich, anständige Leistung zu bekommen
    • Con: wird Sie auf lange Sicht verrückt machen; Fragen Sie die lange Reihe von Leuten, die versucht haben, Haskell, ML, Modula-3, Scheme und mehr mit dieser Technik zu kompilieren. Irgendwann gab jeder dieser Leute auf und baute ihren eigenen nativen Codegenerator.

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.

    
Norman Ramsey 21.03.2009 20:07
quelle
11

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.

    
froh42 21.03.2009 15:39
quelle
6

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.

    
anon 21.03.2009 15:38
quelle
3

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.

    
utku_karatas 21.03.2009 20:50
quelle
2

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.

    
Rob Walker 21.03.2009 15:39
quelle
2

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.

    
Dana the Sane 21.03.2009 16:34
quelle
1

NekoVM wurde entwickelt, um eine ähnliche High-Level-IL zu akzeptieren und dann auszuführen. Neil Butterworths Vorschlag, C zu verwenden, ist ebenfalls eine gute Wahl.

    
Paul 21.03.2009 16:57
quelle
1

Wenn Sie eine Abhängigkeit von der JVM tolerieren können, ist es ziemlich einfach, bytecode mit ASM zu generieren.

>

Wenn das nicht möglich ist, kann gnu blitz für die Code-Generierung verwendet werden (kleiner) und einfacher als LLVM, aber ohne die Optimierungen).

    
Pete Kirkham 21.03.2009 18:05
quelle
0

Da Ihr Code C -ish lautet, können Sie C-- ausprobieren. Es ist eine C ähnliche Sprache für Compiler-Backends. IIRC, wird es von einem der wichtigsten Haskell Compiler verwendet.

    
eduffy 21.03.2009 18:14
quelle
0

empfehlen llvm, eine Plattform-Cross-Infrastruktur, unterstützen Maschinencode-Generierung und viele Optimierungsdurchläufe. Das Tutorial auf llvm.org ist sehr einfach.

    
bluesea 07.06.2012 12:24
quelle

Tags und Links