Laden...

Codegenerierung basierend auf existierenden Code

Erstellt von altertoby vor 15 Jahren Letzter Beitrag vor 15 Jahren 912 Views
A
altertoby Themenstarter:in
61 Beiträge seit 2005
vor 15 Jahren
Codegenerierung basierend auf existierenden Code

Hi,

ich hab mich jetzt schon die Tage totgesucht zu dem Thema, aber find irgendwie nichts (weiß auch nicht wie ich die Suche außer "Codegenerierung" einschrenken soll...).

Also die meisten Code-Generatoren laufen auf Basis von Datenbanken, aus denen dann vielfältiger Code (DAL, BLL, ...) generiert wird. Oder eben basierend auf Meta-Daten.
Ich möchte aber, dass bestehender Code analysiert wird und daraus weiterer Code generiert wird (einmalig reicht). Beispiele sind z.B. VS´s "Extract Interface" oder Dokumentation aus Kommentaren (im meinem konkreten Fall, soll erstmal zu jeder Methode in einer Klasse eine neue Methode in einer anderen Klasse mit einem rudimentärer Methoden-Body erstellt werden)

Wenns keine fertigen Generatoren gibt, gibts dann vllt. schon Code-Parser mit denen ich mir dann einfach einen kleinen Generator basteln kann?
Ich dachte zuerst an das Nutzen von Reflection (bekomm ich ja einfach alle Methoden einer Klasse), aber da auch die Kommentare übernommen werden sollen nicht machbar.

Ich hab gefunden, dass man solche Generatoren auch "Code Munger" nennt, aber auch da hab ich nichts weiter gefunden.

Hoffe jemand kann mir damit weiterhelfen.

P.s: Funktionieren sollte es mit c#-Code

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo altertoby,

wenn die Kommentare erhalten bleiben sollen, dann bleibt dir m.E. nicht viel anderes übrig als die Ersetzungen auf Quellcode-Ebene, also textuell vorzunehmen.

Code Munger

Leo sagt mir "to munge [coll.]" ==> "Dateien auf einer Festplatte beschädigen" 🙂

herbivore

X
38 Beiträge seit 2008
vor 15 Jahren

Ich glaub was du vielleicht machen Könntest wäre da ja die Meisten Code von anfang an verschlüsselt werden könnteste ja mal ein REKOMPILIEREN versuchen.
Dazu müsstest du dich aber auch mit Kompilern und deren arbeitsweise ausseinander setzen
und dann so ne Art Virtuelle maschine bauen bei der du einfach dein eigenes Programm vor den übergang zum MAschinen Code setzt und dann vom Recompiler den Maschinen Code wieder in orriginal code übersetzen dafür musste einfach eine Liste von Strings in dein Programm schreiben
die vom ASCII wert eines Buchstabens oder einer Zahl den entwedere Octalen oder Hexadezimallen oder Binären wert hat drum wrappen in dem er ne sich vorn RAM legt oder so und bums aus fertig

Da musst du dich aber noch mal dann nach Kompiler schreiben suchen

ein Code ist nur so lange Spaghetti wie du keine Ahnung von ihm hast

A
altertoby Themenstarter:in
61 Beiträge seit 2005
vor 15 Jahren

ich hatte Code-Munger auch noch nie gehöhrt und find es eig. auch nur auf einer (und paar verlinkenden) Seite wieder:
http://www.codegeneration.net/tiki-index.php?page=CodeMungerModel
demnach soll es das am besten verbreitete Code-Generation Model sein.

@herbivore: ja Codeebene wird wohl nötig sein, gibt es da ein paar Tools die mir das erleichtern? Am besten wäre ja auch VS-Integration, wäre aber auch nicht so das Problem.
Ich finds lustig, dass es so viele Generatoren für Datenbank u./o. Meta-Daten gibt, aber irgendwie keiner der auf Code basiert?!

@Xx tja xX: ich glaub du hast mich etwas falsch verstanden, ich habe volle Kontrolle über den Code!

Ich möchte eben so ähnlich wie das VS mit "Extract-Interface" (kenne die deutsche Bezeichnung nicht) macht, also aus bestehendem Code (einer Klasse mit Methoden), eine neue Klasse (anstatt des Interfaces bei VS) mit den gleichen Methoden-Signaturen + Kommentaren und einem rudimentären Body erstellen.
Stellt also eig. nur eine kleine Erweiterung des "Extract-Interface" dar, zumindest reicht mir das fürs Erste!

Evt. werd ich mich mal mit VS-Macros beschäftigen, vllt. muss ich dann nicht den Code selber parsen!

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo altertoby,

zur VS-Integration kann ich nichts sagen.

Ansonsten ist halte die Frage, wie aufwändig die Änderungen sind und wie leicht die Stellen zu finden sind, an denen sie erfolgen sollen.

Ich habe z.B. einen "CodeMunger" geschrieben, der aus «MethodenName» innerhalb von XML-Kommentaren <see cref="MethodenName">MethodenName</see> macht. Das ist natürlich auch eine sehr simple Änderung. Die Ersetzung wird entsprechend einfach mit Regex durchgeführt.

herbivore