2009-05-01 14 views
3

Wenn ich meine eigenen Erweiterungen zu C ändern oder hinzufügen und sie dem GCC C-Compiler hinzufügen möchte, was müsste ich tun? Ich möchte keine Änderungen an der Sprache vorschlagen, ich möchte wissen, wie der C-Compiler tatsächlich funktioniert.Wie kann ich eine C-basierte Sprache zu GCC hinzufügen

Ich habe mir den Quellcode von GCC angeschaut und es sieht so aus, als wäre Objective-C als einfacher Parser implementiert, der Code erzeugt, der auf eine modifizierte Laufzeitbibliothek verweist und dann auf alles, was C-basiert ist Es verwendet den regulären C-Compiler. Ich habe es nicht intensiv studiert, also bin ich wahrscheinlich nicht auf dem richtigen Weg.

Sagen Sie zum Beispiel, ich wollte mein eigenes Stichwort zu Objective-C hinzufügen, nur zum Spaß. Ich möchte etwas hinzufügen, das einfach zu implementieren scheint, wie zB @assert. Alles, was ich will, ist für @assert eine Funktion aufzurufen, die ich auf die Objective-C-Laufzeit hinzufügen wird:

objc_runtime_assert (__FILE__, __LINE__, expression, "string version of expression"); 

Offensichtlich konnte ich nur implementieren diese als Funktionsaufruf und Makro sowieso, aber ich will gewinnen ein Verständnis für die Parsing und Kompilierung von C-Quellcode, und vielleicht könnte ich meine eigenen Erweiterungen für eine eigene Sprache hinzufügen.

Der Quellcode, den ich mir angesehen habe, bezieht sich durchweg auf "Bäume" und es gibt viele, viele Makros, die Aktionen ausführen oder Informationen von diesen Bäumen erhalten.

Gibt es irgendwelche Unterlagen, die diese Art von Dingen erklären?

+0

Ich kann Ihnen nicht helfen, aber schauen Sie sich http://en.wikipedia.org/wiki/Abstract_syntax_tree –

+5

Wenn Sie einen Compiler hacken wollen, vor allem für Objective-C, sollten Sie aus LLVM überprüfen. Ein Teil des Grundes, warum Apple auf LLVM umstellt, ist, dass es viel einfacher zu modifizieren und zu erweitern ist als GCC und eine viel sauberere Code-Basis hat. – user57368

Antwort

2

Die Bäume sind am wahrscheinlichsten abstract syntax trees (AST) und irgendein Compiler-Buch wird das lehren. The dragon book ist eine sehr klassische, in der Klasse, die ich nahm, verwendeten wir The essence of compilers von Robin Hunter, ISBN 0-13-727835-7. Sie sollten auch in der Lage sein, Tonnen Material von verschiedenen Hochschulen und Universitäten mit einigen guten Suchbegriffe (Compiler-Design, AST, lexikalische Analyse, Top-down-Parsing, Bottom-up-Parsing, semantische Analyse, LL, LR) zu finden.

1

Es hängt davon ab, wie Sie es tun - aber Sie könnten nach der GCC-Implementierung der D-Programmiersprache suchen - GCD. Dies ist ein work in progress, aber es ist eine vollständige Sprache, die im Rahmen des GCC implementiert wurde, ohne (noch) viel, wenn überhaupt, Anerkennung innerhalb des GCC-Teams. Die GCD-Erfahrungen könnten heilsam sein.

2

Es hängt davon ab, ob Sie Compiler im Allgemeinen bereits kennen oder nicht. Wenn nicht, beginnen Sie mit dem Dragon Book. Wenn ja, dann schon GCC eine Dokumentation für Sie hat:

  1. The GCC Internals Manual
  2. Die GCC Wiki, insbesondere die Getting Started Seite enthält Informationen über viele Dinge, inklusive GCC Bäume.
Verwandte Themen