Codegenerator
Ein Codegenerator ist ein Computerprogramm für die Softwareentwicklung. Er übersetzt Modelle, die in UML, XML, Struktogrammen, Entscheidungstabellen oder einer anderen formalen Sprache erstellt wurden, in eine Programmiersprache (C, C++, Assembler, …) der gewählten Zielplattform. Er erzeugt schnell und fehlerfrei Quellcode (Codegenerierung), der danach mit anderen Programmteilen zu einem Programm verbunden wird.
Das Erzeugnis eines Codegenerators wird (wenn auch selten) als Generat bezeichnet.
Im Compilerbau ist der Codegenerator der Teil eines Compilers, der während des Kompiliervorgangs Maschinencode erzeugt.
Die Steuerung eines Codegenerators erfolgt dabei entweder manuell, also direkt durch den Programmierer, oder automatisiert über eine spezielle formale Sprache, die die Formulierung des Problems im Vergleich zur Zielsprache stark vereinfacht.
Automatisierte Codegeneratoren
Einfache Varianten arbeiten auf der Basis der Quelldateien und ersetzen so genannte Makroaufrufe mit vorgefertigten Textbausteinen. Der Präprozessor ist hierfür ein Beispiel. Andere Varianten generieren vollständig neue Quelldateien, indem sie Metainformationen verarbeiten. Metainformationen beschreiben den Vorgang der Codeerzeugung sowie Eigenschaften des zu erstellenden Programmcodes auf einer höheren Ebene (siehe auch modellgetriebene Architektur) und liegen entweder in separaten Dateien (wie beispielsweise beim Parsergenerator) oder in Form von Anmerkungen (auch: Attribute, Annotationen) innerhalb des bestehenden Programmcodes vor. Der generierte Code wird, anders als bei manuell gesteuerten Codegeneratoren, vor oder während des Kompiliervorgangs automatisch erzeugt. Die Programmiersprachen C# und Java bieten eigene Sprachkonstrukte dafür an (sogenannte Annotationen).
Manuell gesteuerte Codegeneratoren
Manuell gesteuerte Codegeneratoren sind Teil einer integrierten Entwicklungsumgebung (IDE) oder eines CASE-Werkzeugs. Häufig sind sie über eine grafische Benutzeroberfläche (GUI) bedienbar. Der Programmierer kann dabei seinen Programmcode interaktiv, und zwar entweder ausschließlich durch Nutzung des Codegenerators oder ergänzt durch manuelle Programmierung, zusammensetzen. Neben der reinen Codegenerierung bieten manche Codegeneratoren Round-Trip-Engineering-Funktionen d.h. das Einlesen und eine zusammengefasste grafische Darstellung des manuell erstellten sowie des generierten Programmcodes an.
Werkzeuge
- Actifsource
- ASCET-SE (auf Basis der automotive ASCET-Toolfamilie zur Funktionsentwicklung und Software Engineering)
- CAMeL-View TestRig (Entwurfsumgebung zum modellbasierten Entwurf mechatronischer Systeme)
- Eclipse Modeling Framework
- openArchitectureWare
- Simulink HDL Coder (erzeugt VHDL/Verilog aus Basis von MATLAB/Simulink/Stateflow)
- sinelaboreRT Zur Erzeugung von C-Code aus UML Zustandsdiagrammen
- TargetLink (auf Basis von MATLAB/Simulink)
- Scriptcase, PHP/MySQL basierender Codegenerator
- Innovator
Siehe auch
- Generative Programmierung
- Modellgetriebene Softwareentwicklung
- Domänenspezifische Sprache
- Normierte Programmierung
- Makro
- UML-Werkzeug, manche UML-Werkzeuge besitzen Codegenerator-Funktionalität
Literatur
- Krzysztof Czarnecki and Ulrich W. Eisenecker: Generative Programming: Methods, Tools, and Applications. Addison-Wesley, 2000.
- Thomas Stahl, Markus Völter, Sven Efftinge: Modellgetriebene Softwareentwicklung. Techniken, Engineering, Management. 2. Auflage. Dpunkt Verlag, 2007, ISBN 978-3-89864-448-8.
- Georg Pietrek, Jens Trompeter (Hrsg.), Modellgetriebene Softwareentwicklung. MDA und MDSD in der Praxis, Entwickler-Press, gebundene Ausgabe, ISBN 978-3939084112.