Symboltabelle für .Net-Assemblies in C#


Im Rahmen des Mono-Projekts wurden die Sourcen eines C#-Compiler öffentlich zugänglich gemacht. Ziel dieser Bakkalaureatsarbeit ist es, die Symbollistenverwaltung in diesen Quellprogrammen zu studieren und so weit vom C#-Compiler zu isolieren, daß man sie für eigene Compiler-Frontends verwenden kann.

In diesem Projekt sollen die Sysmbolinformationen aus .Net-Assemblies herausgezogen und in einem geeigneten Format (XML) abgelegt werden.

Folgende Aufgaben sind zu erledigen

  • Studieren Sie die Quellprogramme des C#-Compilers, finden Sie diejenigen Teile, die für die Symbollistenverwaltung zuständig sind und kommentieren Sie sie nötigenfalls im Quellcode ausführlicher.
  • Erstellen Sie eine kommentierte Liste aller Typen und Methoden der Symbollistenverwaltung.
  • Zeichnen Sie ein oder mehrere UML-Diagramme aller beteiligten Klassen.
  • Zeichnen Sie Schnappschüsse der Datenstrukturen der Symbolliste für einige typische Deklarationen (Klassen mit Oberklasse und Interfaces, Structs, Arrays, Enumerationen, Delegates, ...).
  • Isolieren sie die beteiligten Klassen so weit, daß man sie für Coco unabhängig vom Rest des C#-Compilers verwenden kann.
  • Eventuell kann die Symbolliste dabei vereinfacht werden.

Versuchen Sie unter anderem, Antworten auf folgende Fragen zu finden

  • Wie werden Objekte und Typen gespeichert?
  • Wie werden Sichtbarkeitsattribute verwaltet?
  • Welche Methoden werden verwendet, um Namen einzutragen und zu suchen
  • Wie wird das Überladen von Namen gelöst?
  • Wie werden verschiedene Scopes (Namespaces, Klassen, Interfaces, Structs, Methoden, Enumerationen, Delegates, Blöcke) verwaltet?
  • Wie werden geschachtelte Typen behandelt?
  • Wie werden Informationen aus externen Assemblies importiert?
  • Wie erfolgt die Suche in unterschiedlichen Scopes? Bei Methoden muß die Suche eines nicht gefundenen Namens im Klassenscope fortgesetzt werden, bei Klassen auch im Scope der Oberklasse.

Hinweise: Das Projekt soll in einzelnen Stufen bearbeitet werden:

  • Die Problemanalyse soll mit einem kurzen Pflichtenheft (2-4 Seiten) abgeschlossen werden.
  • An die Analyse soll sich die Implementierung anschließen.
  • Als Abschluss des Bakkalaureatsprojekts ist ein schriftlicher Bericht von 30-40 Seiten abzugeben, der zumindest die folgenden Kapitel enthalten soll: Beschreibung der Aufgabe und ihres Umfeldes (d.h. wichtige Begriffe, bestehende Lösungen, etc.), Benutzerdokumentation, Implementierungsbeschreibung, Kritische Beurteilung und Ausblick.

Betreuung: Nach der intensiveren Anfangsphase (kurze Besprechungen im Wochenabstand), die zur Absteckung des Problemfeldes und zur Klärung von Problemen dient, sollen im Zweiwochen-Rhythmus kurze Besprechungen stattfinden, um einen zügigen Fortgang des Projekts zu gewährleisten.

Programmiersprache: C#
Betreuer: Prof. Dr. H. Mössenböck / Dipl.-Ing. Markus Löberbauer
Bearbeiter: David Lösch