Wie kann ich meine eigenen C ++ Compiler verstehen, Vorlagen, verschachtelte Klassen usw. starke Features von C ++?

StackOverflow https://stackoverflow.com/questions/618859

Frage

Es ist eine Universität Aufgabe in meiner Gruppe einen Compiler von C-ähnlicher Sprache zu schreiben. Natürlich werde ich einen kleinen Teil unseres geliebten C ++ implementieren.
Die genaue Aufgabe ist absolut dumm, und der Vortragende sagte uns, es selbst übersetzbar sein müssen (sollten selbst in der Lage zu kompilieren) - so, er meinte nicht Bibliotheken zu verwenden, wie Boost und STL.
Er will auch nicht, uns Vorlagen verwenden, weil es schwer ist, zu implementieren.
Die Frage ist - ist es wirklich für mich, als I`m dieses Projekt auf eigener Faust los zu schreiben, mit der Frist am Ende Mai - Mitte Juni (in diesem Jahr), nicht nur Vorlagen zu implementieren, sondern auch verschachtelt Klassen, Namensräume, auf der Ebene der Syntaxanalyse virtuelle Funktionen Tabellen?
PS Ich bin nicht noobie in C ++

War es hilfreich?

Lösung

Halten Sie sich an einen C-Compiler zu tun.

Glauben Sie mir, es ist schwer genug Arbeit einen anständigen C-Compiler bauen, insbesondere , wenn seine erwartete selbst zu kompilieren. Versuchen, alle C ++ Features wie verschachtelte Klassen und Vorlagen unterstützen Sie den Wahnsinn treiben. Vielleicht eine Gruppe könnte es tun, aber auf eigene Faust, ich glaube, ein C-Compiler ist mehr als genug zu tun.

Wenn Sie tot Satz auf diese sind, zumindest eine C-ähnliche Sprache zuerst implementieren (so haben Sie etwas abliefern). Dann Fokus auf vorführt.

Andere Tipps

„Die genaue Aufgabe ist absolut dumm“ - Ich glaube nicht, dass Sie in der Lage, ziemlich dieses Urteil zu machen. Besser diese Ansicht fallen zu lassen.

„I`m dieses Projekt auf eigene Faust schreiben gehen“ - sagte man, es ist ein Gruppenprojekt. Wollen Sie damit sagen, dass Ihre Gruppe nicht mit Ihrer Ansicht mitgehen will, dass es in C ++ morphen sollte, so dass Sie starten und arbeiten auf eigene Faust? Es gibt ein anderes Bit Ich empfehle zu ändern würde.

Es ist egal, wie kenntnisreich Sie sind etwa C ++. Ihre Fähigkeit, mit Grammatiken, Parsern, lexers, Ast und Codegenerierung scheint weit mehr relevant.

Ohne mehr über Sie oder die Zuordnung zu wissen, würde ich sagen, dass Sie gut tun würde die ursprüngliche Zuordnung von Ende Mai getan zu haben. Das sind drei Monate entfernt. Halten Sie sich an die Aufgabe. Es könnte Sie mit seiner Schwierigkeit überraschen.

Wenn Sie früh zu beenden, und Ihre Verpflichtung, um Ihr Team zu erfüllen, würde ich sagen, man sollte sich frei fühlen zu ändern, was produziert wird C ++ Funktionen hinzuzufügen.

Ich wette es Bjarne Stroustrup dauerte mehr als drei Monate Objekte C. hinzufügen Sie sich nicht überschätzen oder die ursprüngliche Zuordnung unterschätzen.

Kein Problem. Und während Sie gerade dabei sind, warum nicht ein Betriebssystem implementieren für sie auf laufen.

Folgen Sie der Zuordnung. Schreiben Sie einen Compiler für eine C-like Sprache! Was ich tun würde, ist wählen Sie eine Untergruppe von C. Remove-Gleitkomma-Datentypen und jede andere Funktion, die in den Aufbau Ihrer Compiler nicht notwendig ist.

einen C-Compiler zu schreiben, ist eine Menge Arbeit. Sie werden das nicht von Monaten in ein paar in der Lage zu tun. einen C ++ Compiler zu schreiben, ist geradezu verrückt. Sie würden das nicht in der Lage sein, innerhalb von 5 Jahren zu tun.

Ich werde wie ein paar Punkte bereits erwähnt und gibt ein paar Hinweise betonen.

1) kleben an den 1989 ANSI C STANDARD OHNE OPTIMIERUNG.

2) Keine Sorge, mit der richtigen Anleitung, gute Organisation und eine angemessene Menge harter Arbeit dieses machbar ist.

3) Lesen Sie die The C Programming Language Deckung Deckung.

4) Verstehen wichtige Konzepte der Compiler Entwicklung aus dem Drachen Buch .

5) Schauen Sie sich auf lcc den Code sowohl als auch die < a href = "https://rads.stackoverflow.com/amzn/click/com/0805316701" rel = "noreferrer"> Buch .

6) Schauen Sie sich auf Lex und Yacc (oder Flex und Bison)

7) einen C-Compiler Schreiben (bis zu dem Punkt, kann es selbst kompiliert) ist ein rite de passage Ritual unter Programmierern. Genießen Sie es.

Für eine Klasse Projekt, denke ich, dass der Compiler benötigt der Lage sein, selbst zu kompilieren ist ein bisschen viel verlangt. Ich gehe davon aus, dass das ist, was von dumm in der Frage gemeint war. Es bedeutet, dass Sie im Voraus brauchen, um herauszufinden, wie viel von C Sie implementieren wollen, und halten Sie sich an, dass in den Compiler zu bauen. Also, den Aufbau einer Symboltabelle eher mit Primitiven als nur eine STL-Karte. Dies könnte für eine Datenstruktur natürlich nützlich sein, aber trifft nicht den Punkt für einen Compiler Kurs. Es sollte über das Verständnis der Probleme mit dem Compiler beteiligt sein, und chosing die Datenstrukturen zu verwenden, nicht die Datenstrukturen Codierung.

Der Aufbau eines Compilers ist ein wunderbarer Weg, um wirklich zu verstehen, was mit Ihrem Code geschieht, wenn der Compiler einen halten es. Was ist die Zielsprache? Als ich Compiler nahm, dauerte es drei von uns alle Semester einen Compiler bauen von sorta-pascal bis zur Montage zu gehen. Es ist keine triviale Aufgabe. Es ist eines jener Dinge, die auf den ersten scheint einfach, aber je mehr man in sie zu erhalten, die komplizierteren Dinge.

Es soll möglich sein, c-ähnliche Sprache innerhalb des Zeitrahmens abzuschließen. Vorausgesetzt, dass Sie mehr als 1 Kurs nehmen, das ist genau das, was Sie vielleicht in der Lage sein, in der Zeit zu tun. C ++ ist auch machbar, aber mit viel mehr Überstunden es zu setzen. Expecing c ++ templates / virtuelle Funktionen zu tun ist overexpecting sich selbst und Sie könnten bei der Zuordnung alle zusammen fehlschlagen. Also ist es besser Stick mit einer c Subset Compiler und es in der Zeit nicht beenden. Sie sollten auch die Zeit, die für QA dauert. Wenn Sie gründliche QA sein wollen wird sich auch eine gute Zeit in Anspruch nehmen.

oder verschachtelte Namespaces clases, entweder virtuelle Funktionen sind auf Syntaxebene ganz einfach, es ist nur ein oder zwei weitere Regeln zu Parser. Es ist viel mehr auf den höheren Ebenen kompliziert, zu entscheiden, welche Funktion / Klasse (Name Abschattung, mehrdeutigen Namen zwischen Namensräumen, etc.) wählen, oder bei der Kompilierung zu Bytecode / AST läuft. So -. Sie können in der Lage sein, diese zu schreiben, aber wenn nicht sogar notwendig ist, lassen Sie es und schreiben nur nacktes Funktionsmodell

Wenn Sie über einen kompletten Compiler sprechen, mit Code-Generierung, dann vergessen Sie es. Wenn Sie nur beabsichtigen, die lexikalische und syntaktische Analyse Seite der Dinge zu tun, dann irgendeine Form von Templat nur etwa kann in dem Zeitrahmen machbar sein, je nachdem, welche Compiler-Werkzeuge Sie verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top