Code Generation Tools for Free Pacal

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
Antworten
Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Code Generation Tools for Free Pacal

Beitrag von m.fuchs »

Hallo,

seit geraumer Zeit liegt ein kleines Tool auf meiner Platte herum, welches ich zur Codeerzeugung für bestimmte wiederkehrende Fälle benutze. Möglicherweise hat auch noch jemand anderes Bedarf/Interesse daran, also gibt es das Ganze auch als Download (Lizenz: GPL).
Getestet habe ich es unter Gentoo-Linux (mit Gnome) und WindowsXP. Prinzipiell sollte es aber auf allen Plattformen laufen die Lazarus unterstützt.

Momentan kann es nur zwei Dinge:
1.) Erzeugung von mehrzeiligen Stringkonstanten. Recht nützlich wenn kürzere Texte direkt in das Programm integriert werden sollen.

Aus

Code: Alles auswählen

Hallo.
Ein einfacher Test.
Mit drei Zeilen.

wird dann zum Beispiel:

Code: Alles auswählen

const
  Blafasel = 'Hallo.' + LineEnding
    + 'Ein einfacher Test.' + LineEnding
    + 'Mit drei Zeilen.' + LineEnding;


2.) Erzeugung von abgeleiteten Listenklassen. Wer zum Beispiel eine typensichere TFPObjectList braucht, also eine die nur einen speziellen Typ und nicht alles was von TObject abgeleitet wird entgegen nimmt, der kann diese Funktion dafür benutzen. Einfach den Namen des zu benutzenden Typs angeben und es wird automatisch ein Nachfahre von TFPObjectList erstellt der entsprechende Methoden besitzt.
Ein Beispiel ist auf dem Screenshot zu sehen.


Keine Ahnung ob es jemand braucht, aber eh der Code vergammelt... :wink:

Wenn ich wieder ein bisschen Zeit finde, möchte ich auch noch ein paar Funktionen verfügbar machen:
  • automatisches Erzeugen von Klassen die in einem UML-Diagramm (*.dia) vorliegen
  • Erzeugen von Mockupklassen für Unittests
  • Erzeugen von Datenklassen mit Persistenzmethoden (Load/Save) für alle Properties (Speicherung als XML, JSON, CSV, ...)
Weitere Vorschläge sind gern gesehen.
Ebenso natürlich Kritik und Fehler die euch auffallen. Da ich es ursprünglich nur für eigene Zwecke geschrieben hatte, kann durchaus noch eine Ungereimtheit darin sein.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Code Generation Tools for Free Pacal

Beitrag von MAC »

cool, gleich mal ausprobieren...

Code: Alles auswählen

Signatur := nil;

Patito
Beiträge: 203
Registriert: Di 22. Sep 2009, 13:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Code Generation Tools for Free Pacal

Beitrag von Patito »

Sowas gefält mir natürlich :-)

Ein paar Ideen:
i) Optionale Maps für die Objektliste, mit der man auf Elemente schneller zugreifen kann (red-black-tree oder hash).
Sowas hat sich in meinem Code-Generator als sehr nützlich erwiesen.

ii) Generator für Enums samt Funktionen, die den Enum optional in String/Float/Int/etc. umwandeln und umgekehrt.
Eingabe: Liste mit
a) Enum-Name
b) optional Int-Wert
c) optional Float-Wert
d) optional String-Wert - eventuell mehrere für GetName(), GetNameLong(), ...
Ausgabe:
I) Enum-Definition
II) Funktionen zum umwandeln (Enum->Wert und optional Wert->Enum)

Zur Krönung wäre dazu noch ein Parser interessant, mit dem man bestehenden Code zum Enum einlesen und modifizieren kann...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Code Generation Tools for Free Pacal

Beitrag von m.fuchs »

Patito hat geschrieben: i) Optionale Maps für die Objektliste, mit der man auf Elemente schneller zugreifen kann (red-black-tree oder hash).
Sowas hat sich in meinem Code-Generator als sehr nützlich erwiesen.

Ich werde den ListGenerator mal um ein paar Listenarten erweitern: TFPHashObjectList und/oder TFPObjectHashTable kommen dann dazu. Inwiefern unterscheiden sich eigentlich beide?

Patito hat geschrieben: ii) Generator für Enums samt Funktionen, die den Enum optional in String/Float/Int/etc. umwandeln und umgekehrt.
Eingabe: Liste mit
a) Enum-Name
b) optional Int-Wert
c) optional Float-Wert
d) optional String-Wert - eventuell mehrere für GetName(), GetNameLong(), ...
Ausgabe:
I) Enum-Definition
II) Funktionen zum umwandeln (Enum->Wert und optional Wert->Enum)

Klingt interessant, ich notiere es mir mal und würde bei Gelegenheit nochmal auf Dich zurückkommen ob ich mir da das Richtige überlegt habe.

Patito hat geschrieben:Zur Krönung wäre dazu noch ein Parser interessant, mit dem man bestehenden Code zum Enum einlesen und modifizieren kann...

Öhm, das wird sicher so schnell nix.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Code Generation Tools for Free Pacal

Beitrag von marcov »

(Mehrzeilige Stringkonstanten)
Ich habe so etwas auch mal geschrieben. Es liegt FPC bei als "data2inc" (fpc/utils Verzeichnis)


Und 2.4.0+ verstehen Generics. Siehe unit fgl.

mtbf40
Beiträge: 72
Registriert: Do 3. Nov 2011, 16:39

Re: Code Generation Tools for Free Pacal

Beitrag von mtbf40 »

Hi,

gibt es zu diesen Thema was neues/aktuelles??

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Code Generation Tools for Free Pacal

Beitrag von m.fuchs »

Bisher nur kleinere Verbesserungen und Fixes. Fehlt dir etwas bestimmtes?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Code Generation Tools for Free Pacal

Beitrag von Mathias »

Für diesen Zweck habe ich auch ein kleines Kommandozeilen-Tool geschrieben.

Als Parameter gibt man die Text-Datei mit und erzeugt wird eine *.inc.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Code Generation Tools for Free Pacal

Beitrag von theo »

Mit Stringkonstanten habe ich auch mal was gemacht.
Hier noch mein alter Senf dazu: http://www.theo.ch/lazarus/EncodeforUnit.pas
Ist aber eher für Binärdaten gedacht, die man so als const in die Unit schreiben kann (z.B. Bilder).

mtbf40
Beiträge: 72
Registriert: Do 3. Nov 2011, 16:39

Re: Code Generation Tools for Free Pacal

Beitrag von mtbf40 »

m.fuchs hat geschrieben:Bisher nur kleinere Verbesserungen und Fixes. Fehlt dir etwas bestimmtes?


das wäre ein weiteres Thema für das beschriebene Projekt aus dem Thread ... Jankins mit Lazarus
Ich würde gern ein Skript erstellen, was dann über Parameter gesteuert, ein initiales Skript erstellt. Das wird aber erst in der laufenden Projektphase angefangen. Im Moment weis ich sowie so nicht wie es überhaupt aussehen müsste. Da muss erst einmal das Gesamtkonzept stehen - was wir in Funktionen, Units, Klassen u.s.w. ausgelagert

ich werde auf jedan Fall hier wieder posten - was man vielleicht jetzt schon machen könnte, grundlegende Konzepte erstellen

Was mein größten Problem ist, ich komme aus dem Bereich System -und Applikationsadministration/Skripting Perl/TCL/bash - also Sequentielle Abarbeitung - so ist auch mein Progammierstil in Freepascal - OO war für mich bisher böhmische Dörfer - ich tue mich unheimlich schwer mit Klassen/Objekten u.s.w - deshalb ist das jetzt für mich die Möglichkeit :!: :!: :idea:

BeniBela
Beiträge: 308
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: Code Generation Tools for Free Pacal

Beitrag von BeniBela »

Für Stringkonstanten habe ich auch ein Tool:

Code: Alles auswählen

 
echo "const varname = "; (cat input.txt | tr -d '\r' | sed -e "s/'/''/g"  | awk 'NR > 1 { printf(" + ") } {print "\047"$0"\047 + LineEnding "}'; echo ";" )
 


Einfach in bash eingeben...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Code Generation Tools for Free Pacal

Beitrag von m.fuchs »

Bevor ich sowas eingebe, schreibe ich mir lieber ein 200-Zeilen-Programm in Pascal. :wink:
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten