![]() |
Re: Quelltext-Parsen von Delphi-Methoden
@Christian Seehase:
Nee, so sehe ich das eigentlich auch. Der Programmierer muss schon selbst sehen, dass sein Quelltext zumindest korrekt ist. Aber trotzdem wäre es wahrscheinlich korrekt (zumindest, wenn man ein Tool aus der Hand gibt), den Benutzer auf potenzielle Risiken hinzuweisen. Was ich aber berücksichtigen müsste, ist die Möglichkeit, Sourcecode sehr eigenwillig zu formatieren. Z.B. ist das folgende ja wohl korrekt:
Delphi-Quellcode:
.Oder eine Klassendeklaration wie:
function TForm1.Create(AOwner:
TComponent);var i, j; integer;{ Kommentar }begin doSomething;end;
Delphi-Quellcode:
Man würde zwar jedem, der so schreibt sagen, er soll erstmal selbst Hand anlegen, aber trotzedm: es ist korrekt, also sollte auch ein Tool nicht daran scheitern...
TExStringList { = Meine tolle neue Klasse } =
class(TStringList) private FEigenschaft: string; public property Eigenschaft: string read FEigenschaft write FEigenschaft; end; Aber, wenn es denn schon ein (teilweiser) Delphi-Parser sein muss: dazu müsste es doch Ansätze geben und Material, das verwendbar ist (Algorithmen oder sogar Klassen). Ich habe beim Googlen aber erstmal nichts gefunden...:neutral: |
Re: Quelltext-Parsen von Delphi-Methoden
Moin Urs,
einige Stichworte die mir dazu einfallen:
Ich denke mal, dass Du mit diesen Stichworten den Kern des Parsers abdecken können solltest. |
Re: Quelltext-Parsen von Delphi-Methoden
Zitat:
Zitat:
Viel schwieriger wird es sein, die vielen Möglichkeiten der Sprache Pascal/Delphi reinzubringen, weil jeder gerne auf seinen eigenwilligen Syntax besteht (ich meine damit speziellen Syntax wie default usw). schau dir das mal an:
Delphi-Quellcode:
sowas schonmal gesehen?
PVariantManager = ^TVariantManager;
{$EXTERNALSYM PVariantManager} TVariantManager = record VarClear: procedure(var V : Variant); VarCopy: procedure(var Dest: Variant; const Source: Variant); ... oder
Delphi-Quellcode:
type IStringsDisp = dispinterface ['{EE05DFE2-5549-11D0-9EA9-0020AF3D82DA}'] property ControlDefault[Index: Integer]: OleVariant dispid 0; default; function Count: Integer; dispid 1; property Item[Index: Integer]: OleVariant dispid 2; procedure Remove(Index: Integer); dispid 3; procedure Clear; dispid 4; function Add(Item: OleVariant): Integer; dispid 5; function _NewEnum: IUnknown; dispid -4; end; und.. type IAncestor = interface end; IDescendant = interface(IAncestor) procedure P1; end; TSomething = class(TInterfacedObject, IDescendant) procedure P1; procedure P2; end; ... sowas schon benutzt? TVarData = packed record case Integer of 0: (VType: TVarType; case Integer of 0: (Reserved1: Word; case Integer of 0: (Reserved2, Reserved3: Word; case Integer of varSmallInt: (VSmallInt: SmallInt); varInteger: (VInteger: Integer); varSingle: (VSingle: Single); varDouble: (VDouble: Double); varCurrency: (VCurrency: Currency); varDate: (VDate: TDateTime); varOleStr: (VOleStr: PWideChar); varDispatch: (VDispatch: Pointer); varError: (VError: HRESULT); varBoolean: (VBoolean: WordBool); varUnknown: (VUnknown: Pointer); varShortInt: (VShortInt: ShortInt); varByte: (VByte: Byte); varWord: (VWord: Word); varLongWord: (VLongWord: LongWord); varInt64: (VInt64: Int64); varString: (VString: Pointer); varAny: (VAny: Pointer); varArray: (VArray: PVarArray); varByRef: (VPointer: Pointer); ); 1: (VLongs: array[0..2] of LongInt); ); 2: (VWords: array [0..6] of Word); 3: (VBytes: array [0..13] of Byte); ); 1: (RawData: array [0..3] of LongInt); end; Zitat:
hier ein Link: The purpose of PasDoc is to document Object Pascal / Delphi source code from comments within the source code. : ![]() suche nach PasDoc und es gibt noch mehr! außerdem suche vermehrt, nach Programmen die Quelltexte scannen und daraus Hilfedateien machen - d.h. die Kommentare zu den Funktionen und so in eine Hilfe schreiben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz