Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [RegEx] Wie Code parsen? (https://www.delphipraxis.net/103871-%5Bregex%5D-wie-code-parsen.html)

Matze 23. Nov 2007 09:00


[RegEx] Wie Code parsen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

ich möchte einen kleinen (vorerst simplen) Code-Parser schreiben, der mit regulären Ausdrücken arbeitet. Der soll später Funktionen (Name, Parameter, Rückgabewert, ...), Typen und ähnliches auswerten können.

Ich dachte mir, ich fange mal an, nur "begin" und "end" zu parsen, damit ich mal ein simples Code-Folding damit realisieren kann. Ich dachte mir, das müsste ja einfach sein, doch selbst damit habe ich Probleme. Mein regulärer Ausdruck, den ich zusammengetippt habe, ist dieser:

Code:
\s{1,}begin(.*?)\s{1,}end
Das ergibt am Ende jedoch das, was im Anhang zu sehen ist und ist daher nicht richtig.

Gibt es irgendwo ein Tutorial, das sich genau mit der Problematik, dem Auswerten von Source-Code, befasst?
Wie ihr seht, helfen mir diese Standard-Tutorials nicht weiter und diese Herumprobiererei ist langsam wirklich frustrierend, denn nicht mal ein minimaler Erfolg ist in Sicht.

PS: Ich habe mir auch bereits Davids PHP Inspection Unit angesehen, doch da verstehe ich nur Bahnhof. ;)

Grüße, Matze

generic 23. Nov 2007 09:10

Re: [RegEx] Wie Code parsen?
 
Ich glaube nicht das ein Regex das lösen kann.
Der Code kann ja beliebig viele Verschachtlungen haben.

Du solltest dir sowas wie ein Stackbasierten Parsen bauen.
Bei jedes Begin auf dem Stack schmeissen, bei jedem End vom Stack popen.
So hast du immer die Schachteltiefe.

Matze 23. Nov 2007 09:13

Re: [RegEx] Wie Code parsen?
 
Hi Bernd,

ohje, das wurde mir auch bereits empfohlen, doch davon habe ich noch weniger Ahnung. Das müsste ich vermutlich auch mit regulären Ausdrücken verbinden, um an Dinge wie Parameter von Funktionen zu kommen.

Gibt's da etwas fertiges, das man anpassen kann?

Grüße

mirage228 23. Nov 2007 13:59

Re: [RegEx] Wie Code parsen?
 
Hi Matze,

ich habe das mit dem Rekursions-Parameter (?R) Parameter von PCRE gelöst.
Kannst Dir ja nochmal meinen Ausdruck damit ("ClassBodyRegEx") oder sonst das Beispiel auf der PCRE-Seite ("Suchmuster-Syntax") auf PHP.net anschauen.

mfG
mirage228

Matze 23. Nov 2007 14:07

Re: [RegEx] Wie Code parsen?
 
Hallo David,

da ich das mit .NET machen möchte, denke ich, ist PCRE nichts für mich. Ich befürchte, um einen eigenen Parser komme ich wirklich nicht herum. :?

Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 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