Code Generation Tools for Free Pacal

Vorstellungen von Programmen, welche mit Lazarus erstellt worden.

Code Generation Tools for Free Pacal

Beitragvon m.fuchs » 7. Nov 2010, 21:57 Code Generation Tools for Free Pacal

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
m.fuchs
 
Beiträge: 1676
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon MAC » 8. Nov 2010, 12:53 Re: Code Generation Tools for Free Pacal

cool, gleich mal ausprobieren...
Code: Alles auswählen
Signatur := nil;
MAC
 
Beiträge: 770
Registriert: 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Patito » 12. Nov 2010, 08:28 Re: Code Generation Tools for Free Pacal

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...
Patito
 
Beiträge: 203
Registriert: 22. Sep 2009, 12:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon m.fuchs » 12. Nov 2010, 15:14 Re: Code Generation Tools for Free Pacal

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
m.fuchs
 
Beiträge: 1676
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon marcov » 12. Nov 2010, 17:14 Re: Code Generation Tools for Free Pacal

(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.
marcov
 
Beiträge: 999
Registriert: 5. Aug 2008, 08:37
Wohnort: Eindhoven (Niederlande)
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk) | 
CPU-Target: 32/64,PPC(+64), ARM
Nach oben

Beitragvon mtbf40 » 13. Sep 2014, 18:36 Re: Code Generation Tools for Free Pacal

Hi,

gibt es zu diesen Thema was neues/aktuelles??
mtbf40
 
Beiträge: 55
Registriert: 3. Nov 2011, 16:39

Beitragvon m.fuchs » 13. Sep 2014, 18:39 Re: Code Generation Tools for Free Pacal

Bisher nur kleinere Verbesserungen und Fixes. Fehlt dir etwas bestimmtes?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1676
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon Mathias » 13. Sep 2014, 19:49 Re: Code Generation Tools for Free Pacal

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3194
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 13. Sep 2014, 23:41 Re: Code Generation Tools for Free Pacal

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).
theo
 
Beiträge: 7881
Registriert: 11. Sep 2006, 18:01

Beitragvon mtbf40 » 14. Sep 2014, 10:28 Re: Code Generation Tools for Free Pacal

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:
mtbf40
 
Beiträge: 55
Registriert: 3. Nov 2011, 16:39

Beitragvon BeniBela » 14. Sep 2014, 12:13 Re: Code Generation Tools for Free Pacal

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...
BeniBela
 
Beiträge: 229
Registriert: 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4) | 
CPU-Target: 64 Bit
Nach oben

Beitragvon m.fuchs » 14. Sep 2014, 14:49 Re: Code Generation Tools for Free Pacal

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
m.fuchs
 
Beiträge: 1676
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

• Themenende •

Zurück zu Programme



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried