Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Code formatieren (https://www.delphipraxis.net/74606-code-formatieren.html)

colder 6. Aug 2006 07:23


Code formatieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

wir setzen in unserer Firma eine eigene Scripting-Language ein.
Für diese Scripting-Language habe ich eine IDE geschrieben. Was
mir jetzt noch fehlt ist ein Code-Fomatter in Form von DelForEx
oder Jedi Code Formatter.

Leider habe ich keine Ahnung wo ich da ansetzen soll. Hat jemand
eine Idee oder Erfahrung wie man so etwas angeht.

hier mal so ein Code-Auszug aus der Language

Delphi-Quellcode:
Uses ("..\Lib\Util.csl")
[b]Vorher:[/b]
/*-----------------------------------------------------------------------------------------*\
Detect ()
Result : Detect Access
\*-----------------------------------------------------------------------------------------*/
Function Main (bValidate As Bool, uText As DynStruct) As Bool
Dim bRet As Bool = CheckDetect ()
Dim lsInfo As List Of String = RestoreMessage ()

// Version und Application konnten nicht initialisiert werden Util-Function
// Meldung wird in Util generiert (RestoreMessage). Detect im Restore-Modus
// sind die Version differnt so benötigt das Module ein Mapfile. Ist dieses
// nicht vorhanden so ist kein Restore möglich.

If ((Not cpStoring) And (Not bRet))
uText.Title = lsInfo [1]
uText.Description = lsInfo [2]
EndIf


Return (bRet)

EndFunction


[b]Nachher:[/b]

Uses ("..\Lib\Util.csl")
/*-----------------------------------------------------------------------------------------*\
   Detect ()
   Result : Detect Access
\*-----------------------------------------------------------------------------------------*/
Function Main (bValidate As Bool, uText As DynStruct) As Bool
  Dim bRet As Bool = CheckDetect ()
  Dim lsInfo As List Of String = RestoreMessage ()

  // Version und Application konnten nicht initialisiert werden Util-Function
  // Meldung wird in Util generiert (RestoreMessage). Detect im Restore-Modus
  // sind die Version differnt so benötigt das Module ein Mapfile. Ist dieses
  // nicht vorhanden so ist kein Restore möglich.

  If ((Not cpStoring) And (Not bRet))
   uText.Title = lsInfo [1]
   uText.Description = lsInfo [2]
  EndIf

  Return (bRet)

EndFunction

arbu man 6. Aug 2006 08:36

Re: Code formatieren
 
Ihr werdet da doch sicher einen Tokenzieher haben. da einfach nach bestimmten Tokens alle Token wie Zeilenumbrüche entfernen und durch die gewünschten ersetzen und fertig

Der_Unwissende 6. Aug 2006 09:59

Re: Code formatieren
 
Hi,
i.d.R. geht man das in mehreren Stufen an.
Die erste besteht im scannen des Dokuments durch einen Scanner. Das ist das, was arbu man schon sagte, du erzeugst hier einfach Token.
Dies Token kannst du dann einfach weiter reichen an einen Parser. Dieser erkennt dann einfach die Art der Token und kann die dann schon mal interpretieren (also wann beginnt etwas und wo wird es beendet).
In der nächsten Stufe wird häufig ein Erbauer-Muster verwendet. Es bietet sich an, dass du hier einfache ein Baumartige Struktur erzeugst. Diese musst du dann nur noch (den Bedürfnissen der Formatierung) als String wieder ausgeben. Hier kannst du dann den Benutzer seine Einstellungen wählen lassen.

Gruß Der Unwissende


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