| 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. 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.
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.
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.
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 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.
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: 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)
Konzept: Gesamtkonzept des Editors und Projektverwaltung Codeeditor-Fenster: Codeeingabe mit Highlighter- und Syntaxprüfungs-Funktion, später Anbindung an Interpreter und Dialogeditor erstellen 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). Projekt Management: Um alle Projekte und Dateien zu verwalten.
(Dazu sind größtenteils keine Programmierkenntnisse erforderlich) Texte: Menütexte Nachrichten Warnungen Fehlermeldungen Hilfen und Beispiele Übersetzungen: englisch zuerst, und die Basiswörter zB. für Menüs Multilingual Grafiken: Funktionssymbole (für Menü Symbolleisten) Iconen und weitere Ressourcen
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.
|