AGB  ·  Datenschutz  ·  Impressum  







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

Quelltextformatierer programmieren

Ein Thema von Codewalker · begonnen am 7. Dez 2011 · letzter Beitrag vom 8. Dez 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#1

Quelltextformatierer programmieren

  Alt 7. Dez 2011, 07:13
Meine Frage (bewusst allgemein gehalten): Wir würdet ihr prinzipiell einen Quelltextformatierer programmieren? (Grundwissen Grammatiken und Compilerbau vorhanden)
  Mit Zitat antworten Zitat
Benutzerbild von Coder
Coder

Registriert seit: 27. Feb 2004
Ort: Bochum
203 Beiträge
 
Delphi 3 Professional
 
#2

AW: Quelltextformatierer programmieren

  Alt 7. Dez 2011, 08:02
hatte mal einen geschrieben - muß ich mal suchen.

Bin den Quelltext durchgegangen,
hab Zeichen für Zeichen und hab nach Schlagworten gesucht, Wörter in meiner bib abgeglichen.
und je nachdem, was ich gefunden hab, dann in einer Tabelle Vermerke gemacht (Klammern offen => Einrückung, Schließen => wieder nach Links, etc., und bei IF then ebenfalls)

Ahnung von Compilerbau?
Hab ich glaub ich nich.

OK, vielleicht war mein Quelltextformatierer auch nicht optimal.
Aber optisch sah es besser aus.
ICQ: 204141443
Delphi 3 Professional, Intel 2x 2,4Ghz, 3 GB-Graka, Sound-onBrd, --
außerdem D2S, D3Pro, D4S, D5S, D6S, D7S + Indy, Lazarus, VB5Std, VC++5Pro, Tasm4+5 - was braucht man mehr?
-
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Quelltextformatierer programmieren

  Alt 7. Dez 2011, 11:36
Ich würd’s auch rein auf Stringbasis (BeginFound, EndFound ect.) machen, alles andere wird ziemlich heftig.

Geändert von Bjoerk ( 7. Dez 2011 um 11:44 Uhr) Grund: (Erläuterung)
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Quelltextformatierer programmieren

  Alt 7. Dez 2011, 11:48
Es darf ruhig heftiger ausfallen. Um mal konkreter zu werden: Ich brauche einen Formatierer für SQLs mit einigen Herstellerspezifischen Spezialitäten (sowas wie (+) für Outer Joins, etc.). Da die SQLs häufig mehr als 100 Zeilen umfassen und auch an Verschachtelungen nicht gerade sparen, werde ich mit einer reinen Stringverarbeitung wohl schnell an Grenzen kommen (etwa bei zunehmender Einrückung von SubSelects, etc.).
Daher war die Frage: Angekommen ich stütze mich auf eine SQL-Grammatik o.ä. - wie komme ich von da aus (am sinnvollsten) an einen flexiblen Formatierer?
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Quelltextformatierer programmieren

  Alt 7. Dez 2011, 11:54
Meine Idee wäre es, einen Syntaxbaum aufzubauen, und jedem Knoten seinen entsprechenden Quelltextfetzen anzuhängen. Dann ließe sich der Baum abarbeiten, wobei die sematische Struktur ja recht günstig vorliegt, und man könnte so Regeln aufstellen, nach denen die Textfetzen neu zusammengesetzt würden. So als sehr allgemeinen Ansatz.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Quelltextformatierer programmieren

  Alt 7. Dez 2011, 12:02
Für den Fall, dass Du es von Hand machen willst/musst, hier mal ein Link zu meinem verwandten Ansatz: http://www.delphipraxis.net/159366-r...unktionen.html

Ich habe für einen eigenen Codegenerator ein Funktion geschrieben, die Regionen sucht und den Quelltext in Abschnitte zerlegt und diese (nach Änderungen einzelner Abschnitte) wieder zusammen baut. So kann mein Experte Änderungen in bestehenden Units vornehmen und auch auf nachträgliche Änderungen reagieren.

Letztlich zerlege ich den Code in mehrere Stringlisten, formatiere diese und setze das dann wieder zusammen.

Zu einem Codeformatter fehlt natürlich noch einiges, aber vielleicht kannst Du Teile wiederverwenden.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Quelltextformatierer programmieren

  Alt 7. Dez 2011, 12:05
Es darf ruhig heftiger ausfallen. Um mal konkreter zu werden: Ich brauche einen Formatierer für SQLs mit einigen Herstellerspezifischen Spezialitäten (sowas wie (+) für Outer Joins, etc.). Da die SQLs häufig mehr als 100 Zeilen umfassen und auch an Verschachtelungen nicht gerade sparen, werde ich mit einer reinen Stringverarbeitung wohl schnell an Grenzen kommen (etwa bei zunehmender Einrückung von SubSelects, etc.).
Daher war die Frage: Angekommen ich stütze mich auf eine SQL-Grammatik o.ä. - wie komme ich von da aus (am sinnvollsten) an einen flexiblen Formatierer?
Dann würde ich einen Scanner programmieren.

http://wiki.delphigl.com/index.php/T...prachen_Teil_1
Dieser Code ist nicht besonders schön, aber so geht's im Prinzip.

Geändert von Bjoerk ( 7. Dez 2011 um 12:10 Uhr) Grund: Link eingefügt
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: Quelltextformatierer programmieren

  Alt 7. Dez 2011, 13:30
Sollte man da nicht beim Erstellen der SQL-Statements direkt ansetzen? Wir bauen die uns immer als Stringfunktkion mithilfe einer Extra (auf einer TStringList basierenden) Klasse zusammen. Beispiel:

SQL-Code:
function SQL_Main:String;
var s:TSQL;
begin
  s:=TSQL.Create;
  s.Add:='Select';
  s.Add:=' *';
  s.Add:='From';
  s.Add:=' ('+SQL_Subselect+')';
  s.Add:='Where';
  s.Add:=' myVarCharFeld=' + s.OracleString(IrgendeineStringVariable);
  Result:=s.Text;
  s.Free;
end;

function SQL_Subselect:String;
var s:TSQL;
begin
  s:=TSQL.Create;
  s.Add:='Select';
  s.Add:=' T1.*, T2.MyFeld';
  s.Add:='From';
  s.Add:=' Tabelle1 T1';
  s.Add:='Left Join';
  s.Add:=' Tabelle2 T2';
  s.Add:='On'
  s.Add:=' T1.FID=T2.ID';
  Result:=s.Text;
  s.Free;
end;
Mmn kann man 100+ zeileige SQL-Statements mit vielen Verschachttelungen eh kaum noch verstehen, auch wenn sie noch so gut formatiert sind. Da ist es leichter jede Verschachtelungsebene selber in der entsprechenden Unterfunktion prüfen zu können.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Quelltextformatierer programmieren

  Alt 7. Dez 2011, 13:37
Das ganze läuft schon über einen QueryBuilder und wird über Methoden dynamisch erzeugt. Nur dem übergebe ich nicht direkt einen String sondern etwas in der Art (Pseudocode):

AddBedingung(Operator (AND,OR), Datentyp, Feld, Vergleichsoperator, Variable) Und der QueryBuilder rückt nicht ein sondern haut einfach die entsprechenden Zeilen darunter.
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#10

AW: Quelltextformatierer programmieren

  Alt 7. Dez 2011, 13:42
1. Du suchst Dir einen Compiler Compiler (LEX & YACC, COCO oder so hießen die früher) und baust dir deine Regeln zusammen.
2. Du suchst Dir einen Parser, der den Quelltext in einen Syntaxbaum überführt und aus dem Syntaxbaum erstellst du wieder den Code, aber so, wie Du in willst.
3. Du schreibst Dir einen Parser.

In jedem Falle benötigst Du die BNF und ein paar Kisten Bier.

Verfahren, die sich irgendwie durchwuseln, gehen vielleicht auch. Aber das ist nix für mich.
  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 09:53 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