Planung

Entwicklungsplan

Um eine grobe Vorstellung zu haben wie ein solches Projekt geführt werden soll hier eine kleine Übersicht über die Entwicklungsstufen.
Im Moment ist allerdings zu sagen das dies weitgehend Wunschvorstellungen sind und unklar ist ob sie sich realisieren lassen. Jede Entwicklungsstufe stellt gleichzeitig auch eine Erhöhung des Aufwandes und Komplexität wie nötigen Fachwissens dar. Im Moment erscheint die Entwicklung bis Stufe 2. teilweise 3. für möglich und machbar.

1.
  • Scanner: Lexikalische Analyse und Tokeniser.
  • Parser: Syntaxanalyse.
  • Symboltable: Erstellen von Listen aller bekannter Namen und Namspaces.


2.
  • Codeanalyse: Erstellen von Code-Bäumen um Codehierarchie zu erkennen.
  • Zwischencode: Generieren von Zwischencode, der wie ein Script erst simuliert und dann interpretiert werden kann.


3.
  • Array: Unterstützung für Arrays und Listen.
  • String: Unterstützung für Strings.
  • Prozeduren: Unterstützung für Subroutinen.
  • Typen: Unterstützung für Typen oder Struct.
  • Editor: Der Text-Editor soll ausgebaut werden und auch Codeanalysen oder Textformatierung unterstützen.


4.
  • Endcode: Generieren von ASM-Code der von FASM NASM oder vergleichbaren Programmen compilert werden kann.
  • Bestriebssystem integrationen: Der Compiler wird fähig gemacht unter Windows Programme mit Benutzeroberfläche zu generieren.
  • Dialog-Editor: Im Editor soll es möglich werden wie in Visual-Basic Dialog-Formulare zu erstellen.
  • (ASM-Compiler): Zuerst wird ASM über ein externen Compiler übersetzt, später soll ein eigener ASM-Compiler folgen.
  • (Linker): Mit der Entwicklung eines eigenen Linkers wird noch gewartet.


5.
  • Codeoptimierung: Verschiedene Techniken der Codeoptimierung werden weiterentwickelt.
  • Funktionsumfang: Der Funktionsumfang wird in vielen Bereichen weiterentwickelt.
  • ASM-Compiler: ASM zu OBJ Compilierung soll unterstützt werden.


6.
  • Objektorientiertheit: Objektorientierte Eigenschaften und Klassen werden entwickelt.


7.
  • Diverses: Diverse Weiterentwicklungen die nicht essentiell sind werden erst am Ende durchgeführt.
  • Usercontrol: Unterstützung für User-Control und Entwicklung eigener Standardformulare.
  • Externe Einbindungen: Das einbinden externer Dateien wie DLL OCX usw. ermöglichen.
  • Debugg-Interpreter: Interpretieren des Codes im Editor wie aus Visual-Basic bekannt.
  • Linker: Wenn sinnvoll wird ein eigener Linker entwickelt.

Aufgaben

Alle die hier gelisteten Themengebiete und Aufgaben müssen bei der Entwicklung eines Compilers irgend wann gelöst werden.
Je nach Anzahl Personen in einem Team so wie deren Kenntnisse und Erfahrungen sollten die Aufgaben verteilt werden.
Werden diese auf Personen oder Gruppen verteilt, könne einige Berieche ihre Aufgaben Planen und absprechen und dann unabhängig voneinander erledigen. Andernfalls müssen schrittweise die Eigenschaften erstellen werden welche die höchste Priorität und zentrale Bedeutung haben. (die Liste ist nach dieser Priorität sortiert.)

Grundsätzlich lassen sich folgende Hauptgruppen unterscheiden

Compilerkern

  • Textanalyse: Der eingegebene Text erkennen und prüfen (Scanner Parser Daten-Manager Namespace-Management usw.)
    • Scanner: Lexikalische Analyse schneidet die Textcode in Worte/Tokens auf.
    • Parser: Erkennt die Worte und ihren Syntax.
    • SyntaxChecker: wird an verschiedenen stellen beim scannen und parsen durchgeführt und kann Warnungen oder Fehlermeldungen ausgeben oder falsche Wörter markieren.
    • Namensmanager: Alle verwendeten Namen und Schlüsselwörter so wie deren Eigenschaften (Var/Const/Sub/Klass/Type/usw.) und Gültikeitsbereiche/Sichtbarkeit/Namespace müssen in einem sogenannten Symboltable verwaltet werden.
    • Tree Strukturen: Analysiert die aufbereiteten Daten und erstellten ein Codetree.
  • Codegenerator: Aus den aufbereiteten Daten werden diese in Zwischencode und ASM umgewandelt
  • Optimierung: Es gibt diverse Optimierungsmöglichkeiten für ein Compiler der ASM ausgeben kann. Eine Liste aller möglichen Optimierungen erstellen, und diese später im Codegenerator einbauen.
  • Compiler-Tools: Routinen die ein Compiler unbedingt braucht, also Routinen die der Compilerkern und Codegenerator benötigen, aber unabhängig vom Kern selbst entwickelt werden können.
    • Zahlenwandler: Dieser muß fähig sein Dec/Hex/Oct/Bin in die Binärform für Long und Float umzuwandeln und umgekehrt
    • Sortieralgos: Für Arrays/Listen und später auch Trees
    • Tree-System: Da VB kein Tree-Type kennt muß einer geschaffen werden
  • Interpreter: Dieser soll fähig sein den Zwischencode zu interpretieren und auch Debugging ermöglichen.
  • Debugger: Strukturen die das Debugging sowohl im Intepreter wie auch im kompilierten Code ermöglicht. Also eine Umgebung die es ermöglicht Schritt für Schritt den Code und auch dessen Assembler durchzugehen und die Variablenwerte und Prozessorregister-Inhalte anzuzeigen, so wie eine Tabelle die den Binyrcode mit dem Quellcode verbindet.
  • Assembler Compiler: Dieser erstellt aus den ASM ein Binärcode OBJ.
    • Liste aller verfügbaren ASM-Funktionen deren Opcodes und weiteren Informationen zusammenstellen.
    • ASM > BIN Compiler entwickeln der aus dem Opcode aus der Liste den Binärcode erstellen kann.
  • Linker: Dieser Verbindet die Binären-Maschinencodes der OBJ zu EXE/DLL/OCX.
    • Erzeugen einer Korrekten PE-EXE Datei, so wie anderer Formate wie DLL und OCX.
    • Lesen und verbinden der OBJ Dateien

Runtime

  • Funktionssammlungen: Für Mathe String Array Konvertierung Variabeltypen Struct und die anderen Basisfunktionen schreiben.
  • Speichermanagement: Alles planen was mit der Verwaltung des Speichers und der Daten zutun hat.
  • Dateihandling: Funktionen zusammenstellen die Dateiverwaltung (Erstellen/Löschen/Lesen/Schrieben) ermöglichen.
  • Objektorientierte Klassenstrukturen: Management Problemlösungen zusammenstellen planen und dann die Codes erstellen.
  • Erweiterung und Extras: Die Runtime kann beliebig mit neuen Fähigkeiten und Funktionen ausgestattet werden und so den Funktionsumfang vergrößern.

Betriebssystem Anbindung

  • Betriebssystem: Kommunikation mit dem Betriebssystem ermöglichen. Kapselung der API-Funktionen und Konstanten. zuerst müssen alle Basisfunktionen im Betriebssystem angesprochen und verwendet werden können. (Kapselung der Funktionen um auf diese Weise zB. sicherzustellen das die Strings korrekt zur Verfügung stehen und um die Funktionen bei bedarf ausbauen zu können. Der Compiler kann die Funktionen durch Inline Codes optimieren.)
  • Windows-API: Danach können die zur Verfügung stehenden API-Funktionen erweitert werden. Forzugsweise nicht dadurch das sie einfach deklariert werden, sondern durch eigene Funktionen welche dann die API-Funktionen aufrufen (Kapselung)
    • Formulare und Dialoge
    • Nachrichten
    • Ereignisse (zB. der Eingabegeräte wie Tastatur und Maus)
    • Dateihandling
    • Registry

Codeeditor IDE

  • Konzept: Gesamtkonzept des Editors und Projektverwaltung
  • Codeeditor-Fenster: Codeeingabe mit Highlighter- und Syntaxprüfungs-Funktion, später Anbindung an Interpreter und Dialogeditor erstellen
    • Dabei bereits darauf achten das ein später Interpretieren und Debugging im Editor möglich wird.
    • Eigenschaften Editor: ermöglicht für alle Elemente deren Eigenschaften zu listen und zu verändern.
  • Dialogeditor: Um alle Elemente eines Formulars erstellen und editieren, und um die Ereignisse die sie auslösen können im Code editieren zu können. Die erstellten Formulare sollten auch gleich in der Codedatei selbst gespeichert werden können (wie aus VB bekannt).
    • Zu allen zur Verfügung stehenden Formularelemente müssen die Eigenschaften ebenfalls editierbar sein.
  • Projekt Management: Um alle Projekte und Dateien zu verwalten.
    • ToDo Listen: Ein Lister sollte alle ToDo im Code anzeigen können damit sie leichter gefunden werden.

Weitere Eigenschaften

(Dazu sind größtenteils keine Programmierkenntnisse erforderlich)

  • Texte: Menütexte Nachrichten Warnungen Fehlermeldungen Hilfen und Beispiele
    • Zusammenstellen aller Fehlermeldungen Warnungen und Nachrichten die der Compiler erzeugen kann.
    • Zusammenstellen aller Fehlermeldungen und Nachrichten die im Programmlauf auftauchen können.
    • Hilfetexte Kurz/Lang Syntax und Beispiele für alle Funktionen und Compiler-Eigenschaften zusammenstellen.
  • Übersetzungen: englisch zuerst, und die Basiswörter zB. für Menüs Multilingual
    • Texteditor Multilingual: Ein Editor sollte die Möglichkeit bieten alle vom Programmierer erstellten Texte zu Editieren und das für mehrere sprachen gleichzeitig.
  • Grafiken: Funktionssymbole (für Menü Symbolleisten) Iconen und weitere Ressourcen

Zu lösende Probleme

  • Speichermanagement: Wie werden Strings Arrays und andere potentiell großen Elemente im Speicher verwaltet. Auch zB. bei Stringkombination oder Redim Preserve.
  • Speicherdefragmentierung: Durch Löschen von Elementen im Speicher die nicht mehr gebraucht werden kann der Speicher mit der Zeit fragmentieren. Dieses sollte möglichst vermieden werden und gleichzeitig sollte ein Garbage-Collector den Speicher aufräumen können ohne die Integrität der Daten zu zerstören. Alle Vor- und Nachteile der möglichen Strategien zusammentragen, und dann automatische und vom Programmcode ausgelöste Varianten erstellen.
  • Klassen Realisierung: Alles zusammentragen was an Wissen notwendig ist um objektorientierte Klassenstrukturen zu ermöglichen.

Compiler/Planung.txt · Zuletzt geändert: 2009/02/15 16:03 (Externe Bearbeitung)