TParser Class, Dokumentation?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mario Peters
Beiträge: 53
Registriert: Sa 26. Apr 2025, 22:41

TParser Class, Dokumentation?

Beitrag von Mario Peters »

Hallo,

ich suche aussagekräftige Dokumentation zur TParser Klasse. Ich habe mich ein wenig in Compilerbau eingelesen und weiß bereits, dass um einen Quellcode zu parsen zuerst mal eine lekikalische Analyse nötig ist um die Grammatik eine Compilers zu ermitteln bzw. zu rüfen, ob ein Parser dieser Grammatik genügt. Dann müssen die Zeichen des Quellcodes eingelesen und in der Programmiersprache gülitigen Symbolen zugeordnet werden,... bei einstelligen Symbolen mag das noch relativ einfach sein, aber ObkectPascal weist nicht nur einstelleige Symbole auf, es gibt zahlreiche reservierte Wörter, die keine Variablen sind, jedenfalls nicht parallel als Variable verwenet werden dürfen, das muss ein Parser prüfen. Weitere Analyseschritte sind nötig. So weit so gut. Aber was davon kann unsere TParser Klasse davon bereits und wo gibt es noch Programmierarbeit zu tun? Mir schwebt ein Parser vor, der erkennt, ob gerade ein Bezeixhner wie "Unit", "Interface", "Uses" .... gefundwn wurde und an welcher Position im Quellcode. Nun könnte ich ja gemäß den Ausführungen in meiner Doku zum Compilerbau eigene Routinen schreiben, die diese Aufgaben erfüllen, ich könnte aber auch die TParser Klasse nutzen, Aber was kann dieser Parser bereits und wo gibt es noch Arbeit zu tun? Soll zunächst ein reines Übungsprojekt werden um den Umgang mit der TParser Klasse zu erlenen. Syntax Highlighting ist auch ein interseeantes Feld. Dabei dürfte so ein Parser auch mein Freund sein. Um den es hier in Erster Linie gehen soll. Ich habe auch lexx und yacc gefunden in der Freepasal Distribution, ich schätze, dass ich auch dafür Dokumemtation benötige. Aber woher bekommen?
Zuletzt geändert von Mario Peters am Do 26. Feb 2026, 20:43, insgesamt 1-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7189
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TParser Class, Dokumentation?

Beitrag von af0815 »

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mario Peters
Beiträge: 53
Registriert: Sa 26. Apr 2025, 22:41

Re: TParser Class, Dokumentation?

Beitrag von Mario Peters »

Ja, genau! Danke! Supi! Aber was muss vor dem (at) Zeichen stehen...? Wenn ich warfley(at)warf als Email Adresse angebe meckert mein Mail Programm. Format stimmt angeblich nicht, warum? Habe doch das (at) durch das entsprechende Zeichen ersetzt. Will ihn nämlich kontaktieren! Und die anderen beiden Links guck ich mir auch an!
Zuletzt geändert von Mario Peters am Do 26. Feb 2026, 16:20, insgesamt 1-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7189
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TParser Class, Dokumentation?

Beitrag von af0815 »

Mario Peters hat geschrieben: Do 26. Feb 2026, 15:19 Ja, genau! Danke! Supi! Das wäre wohl dann warfley(at)...?

Werde ich machen, ihn fragen! Und die anderen beiden Links guck ich mir auch an!
Warf hier im Forum.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mario Peters
Beiträge: 53
Registriert: Sa 26. Apr 2025, 22:41

Re: TParser Class, Dokumentation?

Beitrag von Mario Peters »

Wie lautet der exakte username ich wollte gerade eine Privatnachricht an ihn absenden aber der Name wird NICHT akzeptiert, warum nicht, was muss ich tun um eine PN von meinem Account abzuschicken?

Privte Nachrichten habe ich angeklickt, dann neue Nachricht, dann kommt da eine Empfänger Zeile mit einem Button "Hinzufügen", das bewirkt aber nichts, die Nachricht wird einfach nicht gesendet wenn ich da Warf eingebe und die Nachricht senden will, meine Vorschau bleibt sichtbar aber keine Mitteiling das die Nachricht gesendet wurde! Also kann nur der Username falsch sein oder? was könnte ich noch falsch gemacht haben?


Mario Peters
Beiträge: 53
Registriert: Sa 26. Apr 2025, 22:41

Re: TParser Class, Dokumentation?

Beitrag von Mario Peters »

Danke, habe Warf bereits kontaktiert, wenn auch etwas ungewöhnlich.

PascalDragon
Beiträge: 1032
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: TParser Class, Dokumentation?

Beitrag von PascalDragon »

Mario Peters hat geschrieben: Mi 25. Feb 2026, 21:17 ich suche aussagekräftige Dokumentation zur TParser Klasse. Ich habe mich ein wenig in Compilerbau eingelesen und weiß bereits, dass um einen Quellcode zu parsen zuerst mal eine lekikalische Analyse nötig ist um die Grammatik eine Compilers zu ermitteln bzw. zu rüfen, ob ein Parser dieser Grammatik genügt. Dann müssen die Zeichen des Quellcodes eingelesen und in der Programmiersprache gülitigen Symbolen zugeordnet werden,... bei einstelligen Symbolen mag das noch relativ einfach sein, aber ObkectPascal weist nicht nur einstelleige Symbole auf, es gibt zahlreiche reservierte Wörter, die keine Variablen sind, jedenfalls nicht parallel als Variable verwenet werden dürfen, das muss ein Parser prüfen. Weitere Analyseschritte sind nötig. So weit so gut. Aber was davon kann unsere TParser Klasse davon bereits und wo gibt es noch Programmierarbeit zu tun? Mir schwebt ein Parser vor, der erkennt, ob gerade ein Bezeixhner wie "Unit", "Interface", "Uses" .... gefundwn wurde und an welcher Position im Quellcode. Nun könnte ich ja gemäß den Ausführungen in meiner Doku zum Compilerbau eigene Routinen schreiben, die diese Aufgaben erfüllen, ich könnte aber auch die TParser Klasse nutzen, Aber was kann dieser Parser bereits und wo gibt es noch Arbeit zu tun? Soll zunächst ein reines Übungsprojekt werden um den Umgang mit der TParser Klasse zu erlenen. Syntax Highlighting ist auch ein interseeantes Feld. Dabei dürfte so ein Parser auch mein Freund sein. Um den es hier in Erster Linie gehen soll. Ich habe auch lexx und yacc gefunden in der Freepasal Distribution, ich schätze, dass ich auch dafür Dokumemtation benötige. Aber woher bekommen?
Welchen TParser meinst du? Im FPC Projekt gibt es den TPasParser als Teil von fcl-passrc, der auch für den pas2js-Compiler und für das Generieren der Dokumentation mit fpdoc genutzt wird.
FPC Compiler Entwickler

Mario Peters
Beiträge: 53
Registriert: Sa 26. Apr 2025, 22:41

Re: TParser Class, Dokumentation?

Beitrag von Mario Peters »

Nein, ich meine den, der in der Unit Classes implementiert ist. Habe ich in der Doku zur Classes Unit gefunden. Da Du aber nach den Quellcodesin fcl-passrc fragst, lass uns auf die Klasse TPasParser in der Unit PParser Bezug nehmen. Dort kann ich mir den Ablauf dank Kennnis der Programmiersprache Pascal am besten vorstellen. Mit meinem Wissen über das Thema gehe ich eh davon aus, dass ein Scanner eher die Vorarbeit für die Codeanalyse leistet.

Warf
Beiträge: 2284
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: TParser Class, Dokumentation?

Beitrag von Warf »

Ich hab dir eine PM geschickt, aber wenn du Fragen zu GOLD hast kannst du die auch direkt hier Fragen :)

Mario Peters
Beiträge: 53
Registriert: Sa 26. Apr 2025, 22:41

Re: TParser Class, Dokumentation?

Beitrag von Mario Peters »

Ok, dann lass uns das hier machen. Meine erste Frage wäre, wie ich am Besten anfange. Mein erstes Ziel ist ein Parser, der alle Uses Klauseln im Interface- wie auch im Implementationsteil plus alle {$I <xxx.inc>} Anweisungen findet und mit Codeposittion und zu meiner Kontrolle die jeweilige Datei anzeigt. Was wenn ich eine dieser Dateien aus irgendeinem Grund umbenennen will? Wie finde ich die Schlüsselwörter im Code? Wie gehe ich da vor? Vorerst soll es noch nicht um Codeerzeugung für ein Programm gehen. Welche Literatur kannst Du empfehlen, aber dabei bitte praktische Anleitungen zur Codierung von Parser, Lexer und was es da sonst noch gibt. Mit der mathmatischen Sprache wie sie an den Univeritäten gesprochen wird, bin ich nicht vertraut. Ich kann mir da mehr vorstellen wenn da eine Anleitung präsentiert wird, wie man so einen Lexer baut. Nun gibt es ja in Freepascal schon lex und yacc. Aber wie wende ich diese Tools an und wie hast Du das in Deiner GOLD Engine gemacht? Das oll zuerst genügen ich muss mich zuerst in diese Meterie einarbeiten. Aber ich weiß nicht wo ich da anfangen soll. Bitte hilf mir dabei, die ersten Schritte zu gehen. Da passt doe GOLD Rngine, weil die ein praktisch realisierter Parser und Lexer ist.

Vor Jahren hattre ich aus der Bibiliothek mal ein Buch zum Thema wo ein einfacher Pascal Compiler enwickelt wurde, dort allerdings inklusive Codeerzeugung, dieser Compiler konnte am Ende Turbo Pascal ohne Include Dateien und ohne Units und die Datentypen Intger Char, Byte und Boolean und hat Pseudocode erzeugt. WEnn ich bloß den Buchtitel noch wüsste. Aber füe mein Ziel, die Uses Klauseln in Impementations und Inerfaceteil zu finden und Include Dateien ebenso, brauche ich ja die Codeerzeugung noch gar nicht.

Spontan habe ich im Netzjetzt schon mal das hier gefunden: https://www.cs.hs-rm.de/~panitz/compiler/skript.pdf
Darauf könntest Du Dich bei Deinen Erklärungen beziehen.
Zuletzt geändert von Mario Peters am Fr 27. Feb 2026, 19:41, insgesamt 1-mal geändert.

Warf
Beiträge: 2284
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: TParser Class, Dokumentation?

Beitrag von Warf »

Wenns um Pascal code geht, benutzt du am besten dafür die Code-Tools die Teil von Lazarus sind. Du kannst die auch relativ einfach in deinem eigenen Code benutzen: https://wiki.lazarus.freepascal.org/Codetools

Ansonsten musst du einen eigenen Pascal Parser bauen. Das kannst du zwar mit GOLD machen, allerdings ist das sehr viel Aufwand. Wenn du das mit GOLD machen willst musst du zu erst eine Pascal Grammatik definieren, die ziemlich exakt mit der FPC Grammatik übereinstimmen muss, wo ich aktuell nicht ganz sicher bin ob das genau so funktioniert (der FPC hat einiges an internem state weshalb es an manchen stellen kein strikter LL(1) parser ist). Plus, als LALR Parser ist GOLD auch nur ein "ganz oder gar nicht" und man kann kein wirkliches error-recovery machen.

Mario Peters
Beiträge: 53
Registriert: Sa 26. Apr 2025, 22:41

Re: TParser Class, Dokumentation?

Beitrag von Mario Peters »

Ok, für mein Anliegen kann ich ja wenigstens davon aus gehen dass die Pascal Unit syntakich bereits korrekt ist. Ich will dann alle Units und Include Dateien finden, aber hier https://www.cs.hs-rm.de/~panitz/compiler/skript.pdf könnte ich mich in die Thamatik einarbeiten.

In Freepascal gibt es ja einen Pascal Parser. Was kann der bereits? Eie finde ich unter benutzung der Methoden des Parsers die Uses Klausel unter dem Bezeichner "Unit" und "Program" Bei letzterem Wort gibt es ja kein "Interface" wie in einer Unit. Hinter "Program" beginnt die Uses Klausel, sofer es die im Hauptprogramm gibt. Wäre also interessant was hier der in Freepascal eingebaute Pascal Parser bereits kann und wie man ihn verwendet.

Die CodeTools guck ich mir auf jeden Fall auch an.

PascalDragon
Beiträge: 1032
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: TParser Class, Dokumentation?

Beitrag von PascalDragon »

Mario Peters hat geschrieben: Fr 27. Feb 2026, 09:23 Nein, ich meine den, der in der Unit Classes implementiert ist. Habe ich in der Doku zur Classes Unit gefunden. Da Du aber nach den Quellcodesin fcl-passrc fragst, lass uns auf die Klasse TPasParser in der Unit PParser Bezug nehmen. Dort kann ich mir den Ablauf dank Kennnis der Programmiersprache Pascal am besten vorstellen. Mit meinem Wissen über das Thema gehe ich eh davon aus, dass ein Scanner eher die Vorarbeit für die Codeanalyse leistet.
Die Classes.TParser-Klasse ist für die DFM und LFM Dateien gedacht, wie Lazarus und Delphi sie verwenden. Oder für andere Serialisierungen von Klassen mit Hilfe der RTTI.

Wenn du dir also einen Pascal Parser anschauen möchtest, dann würde ich dir tatsächlich fcl-passrc empfehlen, vor allem da der eigentlich alle Sprachfeatures von FPC unterstützt.
FPC Compiler Entwickler

Antworten