Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi-Grammatik (https://www.delphipraxis.net/134984-delphi-grammatik.html)

Codewalker 2. Jun 2009 18:20


Delphi-Grammatik
 
Ich bin auf der Suche nach der Grammatik von Delphi, vorzugsweise in (E)BNF, um einen kleinen Lexer/Parser zu schreiben. Hat jemand so etwas schonmal gefunden/erstellt, weil das von vorne zu beginnen ist mehr als nur aufwändig

Die Muhkuh 2. Jun 2009 18:22

Re: Delphi-Grammatik
 
http://www.felix-colibri.com/papers/...5_grammar.html

Ist zwar Delphi 5, aber ein guter Anfang.

[edit] Unten ist noch ein Link zur Delphi 6 Grammatik inkl. Beispielprojekt (Scanner, Parser) [/edit]

Hawkeye219 2. Jun 2009 18:53

Re: Delphi-Grammatik
 
Hallo Codewalker,

Joe White hat die Delphi-Grammatik analysiert und präsentiert das Ergebnis seiner Arbeit auf dieser Seite.

Gruß Hawkeye

Florian Hämmerle 2. Jun 2009 19:46

Re: Delphi-Grammatik
 
Zitat:

Zitat von Codewalker
Ich bin auf der Suche nach der Grammatik von Delphi, vorzugsweise in (E)BNF, um einen kleinen Lexer/Parser zu schreiben. Hat jemand so etwas schonmal gefunden/erstellt, weil das von vorne zu beginnen ist mehr als nur aufwändig

klein wird der dann auf jeden Fall nicht. Selbst wenn du nur die Syntax von Delphi 1 nimmst. Aber wenns was wird :daumen hoch:

mfg Florian

Klaus01 2. Jun 2009 19:58

Re: Delphi-Grammatik
 
Guten Abend,

auch wenn es nicht gefordert war.
Die ENBF Grammatik von Pascal ,
sie ist noch so einigermaßen überschaubar.

Grüße
Klaus

Florian Hämmerle 2. Jun 2009 20:00

Re: Delphi-Grammatik
 
Zitat:

Zitat von Klaus01
Guten Abend,

auch wenn es nicht gefordert war.
Die ENBF Grammatik von Pascal ,
sie ist noch so einigermaßen überschaubar.

Grüße
Klaus

Tjo. Überschaubar kann man jetzt verschieden verstehen ;) Wenn man das alles implementiert hat man was mächtiges entstehen lassen. (so wie die Script-Engine von littleDave!)

mfg Florian

Codewalker 3. Jun 2009 11:47

Re: Delphi-Grammatik
 
Danke für die vielen Antworten. Ist alles andere als überschaubar. Im Prinzip möchte ich zu einem gegebenen Quelltext einen AST (Abstract Syntax Tree) bauen, und das scheint doch aufwändiger zu werden. Egal, dann dauerts halt :mrgreen:

schöni 11. Jun 2009 11:24

Re: Delphi-Grammatik
 
Hallo!

Ich beschäftigen mich soeben mit der EBNF der Delphi Grammatik.

Nun gibt es den Delphi Compiler Generator.


Gibt es auch irgendwo eine verständlich geschriebene Dokumentation zur Beschreibungssprace der EBNF?

Denn wenn ich eine Grammatik für eine Programmiersprache beschreiben will, brauche ich ja Wörter, die beschreiben, was ein <expression> ist. Leider hab ich den Eindruck, das hier:

http://www.felix-colibri.com/papers/...5_grammar.html

die Syntax nicht eindeutig ist. Einerseits sind Wörter wie "CASE" oder "OF" goross geschrieben. Andererseits aber ebenso Wörter wir "READ" oder "WRITEONLY". Letztere sind Anweisungen für Lexer und Parser, während "CASE" und "OF" reservierte Wörter der Programmiersprache, hier Delphi, sind.

So brauche ich also eine Sprachdefinition, wenn möglich mit Beispielen, für die Beschtreibungssprache der EBNF, der Sprachgrammatik.

Habe mir die Dokumentation zum Delphi Compiler Generator durchgelesen. Da ist die Syntax für die Beschreibung der zu parsenden Programmiersprache wiederum anders, als auf der genannten Internet - Seite. Leider ist Dokumentation der Beschreibungssprache des Delphi Compiler Generators für mich zu kurz. Gibt es da ausführlichere Beschreibungen? Evtl. Bücher?

Leider meldert der Delphi Compiler Generator auch bei den mitgelieferten Beispielprojekten Fehler, deren Ursache ich wohl erst dann erkennen werde, wenn mir die Beschreibungssprache geläufig ist. im DCG gibt es keine Hilfefunktion.

Die Syntax der Beschreibungssprache unterscheidet sich leider auch von derjenigen im oben genannten Link, obwohl mit der PC Tastatur die eben da verwendete Syntax mit englichher oder deutscher Tastatur realisierbar wäre. reservierte Wörter müssen ja dabei nicht unterstrichen sein. Unterstrichene Darstellung könnte der Syntaxeditor beim Highlighting für die reservierten Wörter übernehmen.

himitsu 11. Jun 2009 11:41

Re: Delphi-Grammatik
 
Schonmal bei Embarcadero angefragt?

Es wäre ja auch für die praktisch, wenn sie zumindestens intern soetwas in der Art hätte, damit sie selber wüßten, was da so alles abläuft :stupid:


Ansonsten klingt es interessant und würde bestimmt auch hierfür gut zu gebrauchen sein
> Unit-Abhängigkeiten visualisieren

mjustin 11. Jun 2009 11:58

Re: Delphi-Grammatik
 
Zitat:

Zitat von himitsu
Ansonsten klingt es interessant und würde bestimmt auch hierfür gut zu gebrauchen sein
> Unit-Abhängigkeiten visualisieren

Ja, das wäre wirklich eine grosse Erleichterung, wenn man alle effektiv in einem Projekt verwendeten Units ermitteln könnte. Aber da gibt es so viele Stolpersteine:

- die globalen IDE Bibliotheks- und Suchpfade (die auch Variablen enthalten können)
- die Build-Konfiguration des Projekts (die auch hierarchisch sein kann), mit weiteren Source-Pfaden
- {$IFDEF} und {$IF} & Co.
- explizit angegebene Units in der DPR Datei
- Unit-Aliase
- Namespaces (!), siehe DCC32 Option -NS

Bis man davon auch nur zehn Prozent abdecken kann, ist man schon fast in Rente ;)

Für die Entwicklung von Qualitätsanalyse-Tools wie Pascal Analyzer, CodeHealer, EyeBol oder cnWizards wäre es wirklich eine grosse Erleichterung, wenn CodeGear für Delphi eine Möglichkeit anbieten würde, alle 'effektiven' Units eines Projekts zu ermitteln.

Oder kann man dcc32.exe unter msbuild so aufrufen, dass die Unit-Abhängigkeiten aufgelistet werden? Wie man die Pfade ermittelt, ist relativ einfach (siehe http://stackoverflow.com/questions/970994). Aber schon das simple Verwenden der in - Klausel in der Projektdatei (Unit1 in '..\ganz\weit\weg\Unit1.pas') würde einen DPR oder DPROJ Parser erfordern.

jbg 11. Jun 2009 12:24

Re: Delphi-Grammatik
 
Zitat:

Zitat von mjustin
Oder kann man dcc32.exe unter msbuild so aufrufen, dass die Unit-Abhängigkeiten aufgelistet werden?

Es gibt zwar den --depends Kommandozeilenparameter, nur macht der irgendwie nichts. Eine Alternative wäre sich in der IDE in die OpenFile Funktion die der Compiler aufruft, einzuklinken (hooking). Man bekommt dann alle vom Compiler aus geöffneten Dateien mit. (So arbeitet z.B. mein DDevExtensions Plugin um den Fortschrittsbanken im Compile-Dialog anzeigen zu können).

himitsu 11. Jun 2009 12:27

Re: Delphi-Grammatik
 
Zitat:

Zitat von mjustin
- die globalen IDE Bibliotheks- und Suchpfade (die auch Variablen enthalten können)
1- die Build-Konfiguration des Projekts (die auch hierarchisch sein kann), mit weiteren Source-Pfaden
2- {$IFDEF} und {$IF} & Co.
3- explizit angegebene Units in der DPR Datei
4- Unit-Aliase
5- Namespaces (!), siehe DCC32 Option -NS

1: die kann man ja aus der Registry aus lesen und bei mehreren Compilern/IDEs eine Auswahlbox anbieten
2: das würde sich im geparsten Baum "leicht finden und auswerten lassen (wenn sowas vorm/beim Parsen nicht entfernt würde)
3/4: da ja eh alle nötigen Units/Projektdateien ausgelesen würden, wäre das auch kein Problem

Aber ohne die Datei "qualifiziert" zu parsen, ist es nahezu unmöglich auch nur die Uses-Abschnitte in einer Datei sicher zu finden.

[add]
CreateFile zu hooken bring jetzt in "meinem" Fall nicht viel,
da ich so zwar die Reinfolge der Dateien bekomm, wie sie geöffnet werden, aber eine "optimale" Reinfolge läßt sich dann dennoch nicht bestimmen, da man ja immernoch nicht weiß wer wann was aufruft.

Wenn die Dateien komplett geparst sind, könnte man eventuell sogar bestimmen ob eine Datei wirklich benötigt wird ... man müßte ja theoretisch dann nur die geparsten Dateibäume durchgehen und schauen was von wo verwendet wird. :stupid:

also im Prinzip muß man nur das nachmachen, was der COmpiler auch macht ... wobei es dann natürlich viel schöner wäre, wenn man dafür den Compiler direkt ansprechen könnte :(

schöni 11. Jun 2009 16:33

Re: Delphi-Grammatik
 
Zitat:

Zitat von himitsu
Schonmal bei Embarcadero angefragt?

Hab ich nicht, weil der Compiler Generator, den ich mir runter geladen habe, nicht von Embarcadero stammt. Ist denn die Beschreibungssprache so standardisiert, das dieser Aspekt egal ist? Programmiersprachen, um den Rechner eine Aufgabe der Praxis ausführen zu lassen, gibt es schließlich auch viele verschiedene.

Zitat:

Zitat von himitsu
Es wäre ja auch für die praktisch, wenn sie zumindestens intern soetwas in der Art hätte, damit sie selber wüßten, was da so alles abläuft :stupid:

Das werden die schon wissen. Wie soll der Compiler sonst weiter entwickelt werden? Wie sollte der dann gewartet werden?

Zitat:

Zitat von himitsu
Ansonsten klingt es interessant und würde bestimmt auch hierfür gut zu gebrauchen sein
> Unit-Abhängigkeiten visualisieren

Auch ne Anwendung. Mich interessiert dann noch ein Übersetzer von C++ Code nach Pascal (Delphi), falle eine Bibliothek, die ich einsetzen will nur in C++ vorliegt, ich aber diese Bibliothek lieber in Delphi geschrieben hätte. Denkbar wäre auch ein Übersetzer von Delphi nach Freepascal derart, das der Code danach 100% portabel ist. Ohne Änderung, versteht sich. h2Pas.exe, mit Freepascal ausgeliefert, leistet das nur für die Headerdateien und dort auch noch unvollständig, falls ich mich richtig erinnere. Kann natürlich sein, das h2Pas inzwischen alle Konstrukte übersetzen kann. Aber dann auch nur für die Headerdateien. Die *.c Dateien müssen aber auch noch übersetzt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz