AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Quelltext-Parsen von Delphi-Methoden

Ein Thema von urs.liska · begonnen am 14. Sep 2003 · letzter Beitrag vom 15. Sep 2003
Antwort Antwort
Seite 1 von 2  1 2      
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#1

Quelltext-Parsen von Delphi-Methoden

  Alt 14. Sep 2003, 16:28
Hallo,

ich habe eine Frage zum Parsen von Delphi-Quelltext. Ich bin an einem Programm, das Delphi-Dateien bearbeitet. --> http://www.delphipraxis.net/internal...970&highlight=
Beim Einlesen von Methoden, die lokale Prozeduren definieren, habe ich das Problem, dass ich nicht weiß, wie ich das Ende der gesamten Methode bestimmen soll.
Ich gehe so vor, dass ich die Methode Zeile für Zeile einlese. Bevor die 'begin'-Zeile kommt, kann eine Methode nicht beendet sein. Danach betrachte ich sie als beendet, wenn entweder ein Keyword für eine neue Methode (function, procedure, constructor, destructor) oder ein Keyword für einen anderen Abschnitt kommt (const, var, type, initialization, finalization, 'end.') oder eine Zeile mit { T...} eine neue Klasse anzeigt. Das ist meine Funktion:
Delphi-Quellcode:
function TPasSorter.lineEndsMethod: boolean;
begin
  if FFirstMethodLine then
  begin
    result := false;
    FFirstMethodLine := false;
    exit;
  end;
  if not FMethodHasBegun then
  begin
    if lineStartsWith(methodStarters)
       then raise Exception.Create('local methods are not yet supported');
    result := false;
    if lineStartsWith('begin')
       then FMethodHasBegun := true;
    exit;
  end;
  result := lineStartsWith(getClassHeaders) or
            lineStartsWith(methodStarters) or
            lineStartsWith(methodEnders);
end;
Wenn aber eine Methode eine lokale Prozedur definiert, also vor dem 'begin' bereits function oder procedure steht, z.B.
Delphi-Quellcode:
function TForm1.Button1Click(Sender: TObject);
  function getSomething(offset: integer): Date;
  begin
    result := now + offset;
  end;

  procedure showSomething(Msg: string);
  var dt: Date;
  begin
    dt := getSomething(i);
    ShowMessage(DateToStr(dt);
  end;
  
var i: integer;
begin
  for i := 0 to 10 do
  ShowSomething(i);
end;
komme ich so nicht weiter.
Ich habe keine Vorstellung, wie ich damit zu Rande kommen soll. Es können ja sowohl 'procedure' und 'function' als auch 'var' auftauchen.

Es wäre klasse, wenn mir jemand einen guten Tipp geben könnte.

MFG
Urs
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Quelltext-Parsen von Delphi-Methoden

  Alt 14. Sep 2003, 16:30
Ich würde es anderes machen. Ich würde die begin's zählen und zu jedem begin muß ein end existieren. Dann muß man nur noch die Ebene beachten. Stößt man nach einem function / procedure auf ein weiteres function / procedure ist man eine Ebene tiefer und man fängt mit dem Zählen von vorne an. Richtige Parser bauen dazu einen Binärbaum auf oder so.

Was hast du denn vor?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#3

Re: Quelltext-Parsen von Delphi-Methoden

  Alt 14. Sep 2003, 16:40
Das ging aber schnell, da hatte ich gar keine Zeit, den anderen Beitrag abzuschicken und meinen eigenen Beitrag zu bearbeiten.
Jetzt ist aber im obersten Beitrag ein Link auf den Thread, in dem ich beschreibe, was ich vorhabe.

Zu Deiner Antwort, Luckie. Das geht nicht so einfach, weil es ja auch andere Konstruktionen gibt, die ein 'end' haben, wie z.B. try..except..end.

Genau genommen möchte ich nur darum herumkommen, einen richtigen Pascal-Parser zu schreiben, der mir genau sagt, in welcher Ebene der Struktur ich bin. Und auch die Frage mit dem Auslassen von Kommentaren sieht mir momentan noch etwas zu undurchsichtig aus...

Grüße
Urs
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Quelltext-Parsen von Delphi-Methoden

  Alt 14. Sep 2003, 16:43
So was muß natürlich berücksichtig werden. Eventuell solltest du mal nach Compiler bau ggogeln.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#5

Re: Quelltext-Parsen von Delphi-Methoden

  Alt 14. Sep 2003, 16:47
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Quelltext-Parsen von Delphi-Methoden

  Alt 14. Sep 2003, 16:51
Moin Urs,

was Du auch nicht vergessen darfst, sind entsprechende Begriffe innhalb von Stringkonstanten oder Kommentaren.
Die dürfen ja auch nicht mitgezählt werden.

Damit Du nicht durch Sonderfälle vom Hundersten ins Tausendste gerätst (Erfahrungswert ), wäre es vielleicht sinnvoll doch etwas grundlegender an die Sache heranzugehen.

Was auch noch wichtig zu bedenken wäre:
Soll der Sourcecode syntaktisch korrekt sein, oder muss das Programm das auch noch prüfen?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#7

Re: Quelltext-Parsen von Delphi-Methoden

  Alt 14. Sep 2003, 17:10
Naja, Syntaxprüfung macht Delphi doch schon ganz ordentlich, nicht wahr?
Das muss ich sicher nicht auch noch machen.
Vielleicht sollte ein Programm den Benutzer darauf aufmerksam machen, dass das parsen von fehlerhaftem Code die Quelltext kaputtmachen könnte...

Grüße
urs
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Quelltext-Parsen von Delphi-Methoden

  Alt 14. Sep 2003, 17:50
Moin Urs,

ich meinte das etwas anders.
Seit geraumer Zeit arbeite ich immer mal wieder an einen Tool weiter, dass die Übersetzung der C Header nach Delphi erleichtern soll, und um mir das Leben nicht unnötig schwerer zu machen, gehe ich halt davon aus, dass die Header syntaktisch korrekt sind.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#9

Re: Quelltext-Parsen von Delphi-Methoden

  Alt 14. Sep 2003, 18:27
Zitat von Christian Seehase:
Moin Urs,

ich meinte das etwas anders.
Seit geraumer Zeit arbeite ich immer mal wieder an einen Tool weiter, dass die Übersetzung der C Header nach Delphi erleichtern soll, und um mir das Leben nicht unnötig schwerer zu machen, gehe ich halt davon aus, dass die Header syntaktisch korrekt sind.
ich glaube soetwas gibt es schon und wird für das JEDI projekt eingesetzt.


und für das aktuelle thema:
ich denke, dass man um den bau eines parsers nicht drumrumkommt.
ich habe einen gebaut, und muss sagen,
dass schon das einlesen einer Klasse sehr aufwendig ist.

deshalb werde ich das selbst anders machen, indem ich einen parser schreibe, der den quelltext mittels einer Baumvorlage einließt.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Quelltext-Parsen von Delphi-Methoden

  Alt 14. Sep 2003, 18:57
Moin Dezipaitor,

Zitat von Dezipaitor:
ich glaube soetwas gibt es schon und wird für das JEDI projekt eingesetzt.
Ich denke mal, das kenne ich, und ich hab's auch schon mal ausprobiert...
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 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