Hallo,
ich bin grad so am Nachprogrammieren der Codevervollständigung aus Delphi.
Zunächst geht es mir um die Codelisten bei den Klassenbezeichnern. Heißt, wenn ich in Delphi einen Klassenbezeichner schreibe und den Punkt setze, um nun einen Member dieser Klasse anzusprechen, dann sehe ich eine Liste mit den möglichen Members der Klasse, aus denen ich nur noch auswählen muss.
Bei den Synedit Komponenten gibt es ein DEmo für das TSynCompletionProposal, wo die Liste jedoch in einer Stringliste fest Kodiert ist.
Da Delphi diese Liste nicht anzeigen kann, wenn der Quelltext fehlerhaft ist, gehe ich davon aus, das Delphi den Quelltext ständig parst und die Liste neu aufbaut.
Nun gibt es den Delphi Comppiler Generator, mit dem ich mittels regulärer Ausdrücke die Pascal Grammatik beschreiben kann. Die weiteren Schritte sind äquivalent zu Lex und yacc.
Wo gibt es eine aussagekräftige Doku zu regulären Ausdrücken, möglichst mit Beispielen?
Muss ich überhaupt einen Parser bauen oder tut es der
VCL eigene Klasse TParser vielleicht schon?
Im DCG (Delphi Compiler Generator) ist ein Beispiel für einen SyntaHighlighter. Das bringt mich auf die Idee, evtl. so einen Highlighter für den Aufbau dieser Listen zu "missbrauchen".
Welchen dieser Ansätze würdet Ihr vorziehen.
Ich muss die Spache der regulären Ausdrücke zuerst erlernen.
Ich muss des Highlighters Quelltext studieren und dann diesen an den entscheidenden Stellen anzapfen.
Ich muss den in der
VCL integrierten Parser im Quelltext studieren, mich in Compilerbau einlesen, es gibt auch praxisorientierte Bücher dazu, die mit sehr wenig Theorie auskommen....
Und ich brauche womöglich eine Doku des Delphi Unitformates. Dazu habe ich bereits einen weiteren Thread aufgemacht.
http://www.delphipraxis.net/167812-w...umentiert.html
Bei einem OpenSource Projekt könnte ich dagegen einfach den Quellcode parsen.
Wie schätzt Ihr also den AUfwand für die jeweilige Vorgehensweise ein, wenn ich:
- einen neuen Parser schreibe
- mir von DCG einen erzeugen lasse
- den Delphi eigenen verwende
- einen Synhighlighter anpasse
Ich will später auch die Funktion "Klasse vervollständigen" realisieren, am liebsten gleich auch die Prozedur und Funktionsrümpfe von prozeduralen Routinen im Implementationsteil vollständig als leere Routinen mit Begin End; Blöcken versehen.
.