30. Model Synchronisation, Code Generation and Round-Trip Engineering for the Consistency of Macromodels Code Generation As Apps for RAG

30. Model Synchronisation, Code Generation and Round-Trip Engineering for the Consistency of Macromodels Code Generation As Apps for RAG

Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie – Prof. Aßmann – Model-Driven Softwrae Development in Technical Spaces 30. Model Synchronisation, Code Generation and Round-Trip Engineering for the Consistency of Macromodels Code Generation as Apps for RAG 1) Single-source principle and macromodel Prof. Dr. U. Aßmann principle Technische Universität Dresden 2) Code generation techniques Institut für Software- und ● Template-based Code generation Multimediatechnik 3) Re-parsing http://st.inf.tu-dresden.de/ teaching/most Version 20-1.1, 02.01.21 OO Q10: The House of a Technical Space 2 Model-Driven Software Development in Technical Spaces (MOST) TechnicalTechnical Space Space Model synchronisation ToolTool Engineering Engineering Composition, Extension Composition, Extension Mega-Mega- and and Macromodels Macromodels Technical Tracing, Regeneration, Synchronization Code Generation Technical Tracing, Regeneration, Synchronization Meta- Space Meta- Space modeling Bridges modeling Bridges ModelModel Management Management Composition, Mapping, Transformation Composition, Mapping, Transformation Model Analysis n n Model Analysis a Querying, Attribution, Analysis, Interpretation m Querying, Attribution, Analysis, Interpretation ß A . U . f o r P © Metapyramid (Metahierarchy) Metapyramid (Metahierarchy) Literature 3 Model-Driven Software Development in Technical Spaces (MOST) ► http://www.codegeneration.net/ ► www.programtransformation.org ► http://www.codegeneration.net/tiki-read_article.php?articleId=65 ► Paul Bassett. Frame-based software engineering. IEEE Software, 4(4):9-16, 1987. ■ http://doi.ieeecomputersociety.org/10.1109/MS.1987.231057 ► Chris Holmes, Andy Evans. A review of frame technology. University of York, Dept. of Computer Science, 2003 ftp://www-users.cs.york.ac.uk/reports/2003/YCS/369/YCS-2003-369.pdf ► Daniel Weise and Roger Crew. Programmable syntax macros. In Proceedings of the ACM SIGPLAN '93 Conference on Programming Language Design and Implementation, pages 156-165, Albuquerque, New Mexico, June 23-25, 1993. ► Optional ■ Völter, Stahl: Model-Driven Software Development, AWL 2005. n n a ■ Falk Hartmann. Safe Template Processing of XML Documents. PhD thesis, m ß A . Technische Universität Dresden, Fakultät Informatik, July 2011. U . f o r . P http://nbn-resolving.de/urn:nbn:de:bsz:14-qucosa-75342 © 4 Model-Driven Software Development in Technical Spaces (MOST) n n a m ß A . U . f o r P © Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie – Prof. Aßmann – Model-Driven Softwrae Development in Technical Spaces 30.1 Model2Code Transformation (Code Generation) Transforming models into code (Programmüberführung) MDSD-Code-Generators 6 Model-Driven Software Development in Technical Spaces (MOST) Source artefacts Specification of the Target program Source artefacts target language Target program (RTG, String grammar, RAG) Graph-based Models UML-Diagrams File with Textual specifications Generator Target Code (Code, Scripts, Templates) Specification of the transformation n n a m Templates in the ß A . target language U . f o r P © MDSD-Code-Generators as Attributors of Syntax Trees 7 Model-Driven Software Development in Technical Spaces (MOST) SourceSource artefacts artefacts TargetTarget tree tree attribute attribute RAG Specification of the Link Tree-based Models target language UML-Diagrams Syntax Tree Textual Higher-order Tree with target specifications Syntax RAG with code in higher-order (Code, Scripts) Tree synthesized attribute code attribute Syntax Tree RAG Specification Templates in the n of the transformation n a target language m ß A . (as template syntax U . f o trees, or partially parsed r P © from snippets in the template language) Different Kinds of Code Generators 8 Model-Driven Software Development in Technical Spaces (MOST) ► A code selector is a transformation system (term, link trees, graphs) covering the input models with rules (code coverage) transforming the model elements once ► A code scheduler orders instructions in an optimized manner Code scheduling runs after code selection ► Metaprogramming code generators: A template expander generates code by filling code templates withinset snippets An invasive fragment composer (invasive software composition) composes templates in a typed and wellformed way (→ CBSE) n n a m ß A . U . f o r P © MDSD-Code-Generators as Template Expanders 9 Model-Driven Software Development in Technical Spaces (MOST) ► A template engine hides the tree construction, attribution with code attributes, and pretty-printing under a simple interface. It provides functions ■ templparse(): String in TemplateLanguage → Tree ■ pparse(): String in BaseLanguage → Tree ► Template engines are apps of higher-order RAGs Binding rules of templates Target code SourceSource artefacts artefacts Target code Graph-based Models Syntax Tree with UML-Diagrams Attribution Tree expanded code Target Textual specifications Syntax code (OCL, Scripts) Tree Template engine Syntax (template expander) Tree n Templates in the n a m target language ß A . (as template syntax U . f o trees, or partially parsed Parser of template language r P © from snippets in the template language) Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie - Model-Driven Software Development in Technical Spaces (MOST) 30.1.2 Code Generation in RAGs ► With higher-order (tree-generation) attributes and special functions ■ partial parsing ■ template expansion Model-Driven Software Development in Technical Spaces (MOST) © Prof. U. Aßmann Code Generation with RAGs 11 Model-Driven Software Development in Technical Spaces (MOST) ► Attribution functions may generate code syntax trees ► Suppose a partial parse function pparse(): String->LinkTree eqeq Constant.Code()Constant.Code() {{ ifif (AsBoolean())(AsBoolean()) ifif (AsValue()(AsValue() ==== 1)1) returnreturn pparse(“pparse(“(boolean)1(boolean)1”);”); elseelse ifif (AsValue()(AsValue() ==== 0)0) returnreturn pparse(“pparse(“(boolean)0(boolean)0”);”); else return EmptyTree; else return EmptyTree; else { else { if (AsValue() == 1) if (AsValue() == 1) return pparse(„new Integer(1)“); return pparse(„new Integer(1)“); else if (AsValue() == 0) else if (AsValue() == 0) n return pparse(„new Integer(0)“); n a return pparse(„new Integer(0)“); m ß else A else . U . return pparse(„new Integer(“+AsValue()+„)“); f o return pparse(„new Integer(“+AsValue()+„)“); r P } © } }} Template-Based Code Generation with RAGs 12 Model-Driven Software Development in Technical Spaces (MOST) ► Attribution functions may expand code templates to code trees ► Done with the template processing function templparse(): String, List(ID)->LinkTree that expands variable names into attribution functions, e.g., TypeParameterName → TypeParameterName() ► templparse() is called a template processor, String is of a template language eq GenericClassInstantiation.Code() { eq GenericClassInstantiation.Code() { return templparse( return templparse( “public class GenClass$TypeParameterName$ extends Object { “public class GenClass$TypeParameterName$ extends Object { private int myId; private int myId; public GenClass$TypeParameterName$() { // constructor public GenClass$TypeParameterName$() { // constructor } } public int getId() { return myId; } public int getId() { return myId; } }“ }“ , List(pparse(„Person“)) , List(pparse(„Person“)) n ); n a ); m } ß A } . U . f o r P © Template-Based Code Generation with RAGs 13 Model-Driven Software Development in Technical Spaces (MOST) ► The template processing function can be made generic in terms of grammars: templparseGeneric(): CSGrammar, RTG, String,List(ID)->LinkTree that expands variable names into attribution functions, e.g., TypeParameterName → TypeParameterName() ► templparse() is called a template processor, String is of a template language eq GenericClassInstantiation.Code() { eq GenericClassInstantiation.Code() { CSGrammar CSAceleo; CSGrammar CSAceleo; RTGrammar RTGAceleo; RTGrammar RTGAceleo; return templparseGeneric(CSAceleo, RTGAceleo, return templparseGeneric(CSAceleo, RTGAceleo, “public class GenClass$TypeParameterName$ extends Object { “public class GenClass$TypeParameterName$ extends Object { private int myId; private int myId; public GenClass$TypeParameterName$() { // constructor public GenClass$TypeParameterName$() { // constructor } } public int getId() { return myId; } public int getId() { return myId; } }“ n n }“ a , List(pparse(„Person“)) m ß , List(pparse(„Person“)) A . ); U ); . f o } r P } © Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie 30.1.3 Single-Source Principle and Macromodels Model-Driven Software Development in Technical Spaces (MOST) © Prof. U. Aßmann Single-Source-Principle, Major-Source, Code Addition, and Round-Trip Engineering 15 Model-Driven Software Development in Technical Spaces (MOST) Document Major Source generation Documen- Source Models tation Program/Code- Code- TreeWare Generation) Parsing ModelWare Optimized and <<dependent>> Generated extended Code Target code n n a m ß Manual addition (code addition, A . Hand-written U . code „patching“), code composition f o r Source code P © Major Source GrammarWare Macromodel Principle and Round-Trip Engineering Multiple Consistent 16 Model-Driven Software Development in Technical Spaces (MOST) Sources Source Model Document B generation Documen- Source Model A tation Source Model C Program/Code- Code- TreeWare Generation) Parsing ModelWare Optimized and Generated

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    38 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us