Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software...

71
Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica Technische Universiteit Eindhoven
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    221
  • download

    1

Transcript of Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software...

Page 1: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Generic Language Technology andModel Driven SW Engineering

Prof. Dr. Mark van den Brand

Software Engineering and TechnologyFaculteit Wiskunde en InformaticaTechnische Universiteit Eindhoven

Page 2: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

GLT and MDE

• Generic Language Technology• Program Generators• ATerms• ApiGen• Model Driven SW Engineering

Page 3: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Generic Language Technology

Compilers Code generators Static checkers Refactoring Outlines Cross-linking Decompilers etc, etc, ...

Compiler construction Model Driven Eng. Formal methods Reverse engineering Re-engineering Domain Specific Lang. Aspect Oriented Prog. Software Maintenance

Tools Fields

Page 4: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Generic Language Technology

Source code juggling tools all instances of meta programming

Three main levels of representation Tools are all mappings between representations

GLT uses this similarity representations have languages mappings between languages share functionality

Page 5: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Generic Language Technology

Meta programming is complex Many different (legacy) languages “Devil in the details” of syntax and (static) semantics Tools are (company/application/domain) specific

GLT goal: facilitate meta programming generic tools (reusable across languages) generated tools (language and task parametric)

Page 6: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Generic Language Technology

Parsers Pretty printers Tree transformers Tree fact extractors Fact analyzers

Syntax highlighters Structure editors Source browsers Fact visualizers Debugging interfaces Un-parsers

Generated tools Generic tools

Examples of tools

Page 7: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Generic Language Technology

ASF+SDF Meta-Environment Since early 90's: generation of IDE components Generated and generic meta programming tools Today: focus on generated tools Parsing Transformation Formatting Reasoning

Page 8: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ASF+SDF Meta-Environment A domain specific language for each task SDF: parser generation context-free grammars ASF: tree transformation term rewriting BOX: formatting box 2D layout RScript: reasoning relational calculus Meta-environment: generic (parameterized) IDE

Generic Language Technology

Page 9: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Generic Language Technology

Challenges: Meta programming is not compiler construction

Why? Different quality attributes! Language and task independent

No heuristics (example: `longest match' in scanners) No abstraction (example: keep layout and comments)

More flexible Modular (example: embeddings, dialects) Reusable (example: several tasks share a parser)

And so the challenges are Finding the appropriate level of abstraction Getting enough efficiency without heuristics or abstraction

Page 10: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

GLT and MDE

• Generic Language Technology• Program Generators• ATerms• ApiGen• Model Driven SW Engineering

Page 11: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

• “State-of-the-art” technology: component based software development• Model Driven Architectures

• Code Generation

• Aspect Oriented Programming

• Coordination Architectures

• Design Patterns

Page 12: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

• Automatic production of programs by means of other programs• A program generator reads meta-data and produces

well-formed source code

− Grammars

− Database model

− UML diagrams

• A program generators makes your project “agile”

Page 13: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

Advantages• Increase in productivity:

• generating tedious and boring parts of the code

• code generators produce thousands of lines of code in seconds

• changes are quickly propagated

• Agile development

Page 14: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

Advantages• Increase of Quality:

• bulky handwritten code tend to have inconsistent quality because increase of knowledge during development

• bug fixes and code improvements can be consistently roled out using a generator

• Increase of Consistency: • in API design and naming convention

• Single point of definition• More design time• Explicit design decisions

Page 15: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

Advantages• Architectural consistency:

• Programmers work within the architecture

• Well-documented and -maintained code generator provides a consistent structure and approach

• Abstraction: language-independent definition• Lifting problem description to a higher level

• Easier porting to different languages and platforms

• Design can be validate on an abstract level

Page 16: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

Disadvantages• Code generator has to be written first• Not always applicable• There will always be some code that has to be

hand written• Generality can be a drawback, e.g.:

• Databases must be well-designed and normalized

• Grammars must be member of a specific class

Page 17: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

• 10 code-generation rules1.Give proper respect to hand-coding

2.Handwrite the code first

3.Control the source code, e.g., CVS

4.Make a considered decision about the implementation language

5. Integrate the generator into the development process

Page 18: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

• 10 code-generation rules (continued)6. Include warnings wrt modifying the generated code

7.Make it friendly

8. Include documentation

9.Keep in mind that generation is a cultural issue

10.Maintain the generator

Page 19: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

Models of program generators:

1. Code munging: given information in some input code, one or more output files are generated, e.g., scanner or parser

2. Inline-code expander: take source code with special mark-up code as input and creates production code in separate output file, e.g., imbedded SQL is replaced by C

3. Mixed-code generation: take source code with special mark-up code as input and replace this inline

Page 20: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

Examples of program generators:• Programming environment generators• API generators• UML based generators• Domain Specific Languages

Page 21: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

• Template based program generators• Legal code clones

• Focus on code templates• Template validation: syntax

Page 22: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Program Generators

Software templates:• Object code with holes• Holes contain instructions for an evaluator

• meta code

• Separate treatment of object code and evaluator code• interpretation meta language construct is invisible

• Meta-Programming in concrete object code (WYSIWYG)• template is skeleton of resulting code

Page 23: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

public class <%class/name%>{ <%foreach class/attribute do%> private <%type%> <%name%>; public <%type%> <%”get”||name%>(){

return <%name%> } public void <%”set”||name%>

(<%type%> <%name%>){ this.<%name%>=<%name%>; } <%od%>}

class( name(“Customer”), attribute( name( “address” ), type( “String” ) ), attribute( name( “age” ), type( “int” ) ))

Template Input data

Page 24: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

public class Customer{ private String address; public String getaddress(){

return address } public void setaddress

(String address){ this.address=address; } private int age; public int getage(){

return age } public void setage

(int age){ this.age=age; }}

Page 25: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

public class <%class/name%>{ <%foreach class/attribute do%> private <%type%> <%name%>; public <%type%> <%”get”||name%>(){

return <%name%> } public void <%”set”||name%>

(<%type%> <%name%>){ this.<%name%>=<%name%>; } <%od%>}

Template validation

Page 26: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

• Better than using the compiler errors• detection of syntax errors in branches

• more accurate error message

• Generation of code not necessary• syntax checking without input data

• However, can this technology be applied to other languages?

Page 27: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html> <head> <title><%class/name || " form"%></title> </head> <body> <form action="/commit" method="post"> <%foreach class/attribute do%> <p> <%name%> <br> < input type="text" name=<%"\""||name||"\""%> size="20"> </p> <%od%> <p> <input type="submit" value="Submit"> <input type="reset" value="Reset"> </p> </form> </body></html>

class( name(“Customer”), attribute( name( “address” ), type( “String” ) ), attribute( name( “age” ), type( “int” ) ))

Page 28: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html> <head> <title>Customer form</title> </head> <body> <form action="/commit" method="post"> <p> address <br> < input type="text" name=“address" size="20"> </p><p> age <br> < input type="text" name=“age" size="20"> </p> <p> <input type="submit" value="Submit"> <input type="reset" value="Reset"> </p> </form> </body></html>

Page 29: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html> <head> <title>Customer form</title> </head> <body> <form action="/commit" method="post"> <p> address <br> <input type="text" name=“address" size="20"> </p><p> age <br> <input type="text" name=“age" size="20"> </p> <p> <input type="submit" value="Submit"> <input type="reset" value="Reset"> </p> </form> </body></html>

Page 30: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html> <head> <title><%class/name || " form"%></title> </head> <body> <form action="/commit" method="post"> <%foreach class/attribute do%> <p> <%name%> <br> < input type="text" name=<%"\""||name||"\""%> size="20"> </p> <%od%> <p> <input type="submit" value="Submit"> <input type="reset" value="Reset"> </p> </form> </body></html>

Page 31: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

• First parse the template and obtain the parse tree

public class <%class/name%>{ <%foreach class/attribute do%> private <%type%> <%name%>; public <%type%> <%”get”||name%>(){

return <%name%>; } public void <%”set”||name%>

(<%type%> <%name%>){ this.<%name%>=<%name%>; } <%od%>}

Page 32: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

• Next find placeholders in parse tree• A tree traversal configured to match on the placeholder

nodes is used

Page 33: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

• Finding the placeholders in the parse tree

Page 34: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

• Evaluation of placeholders

public class <%class/name%>{• Evaluate expression class/name

− lookup in data specification

− return value: “Customer” class( name(“Customer”), attribute( name( “address” ), type( “String” ) ), attribute( name( “age” ), type( “int” ) ))

Page 35: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

• Replace placeholder

• Parse result of expression as ID• If parse error return error message

• Otherwise, replace placeholder with parse tree of the result of the expression

Page 36: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

• Parse template• Combining Object Language with Meta Language• Combination of grammars

• Generic• Different Object Languages• Parameterize the Meta Language grammar and evaluator with

Object Language

• More Grammar, More Checking• More detailed Object Language grammar implies more

syntax safety

Page 37: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Template validation

Combination

Meta grammar

Java grammar

Page 38: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Literature on Program Generators

• “Code Generation in Action” by Jach Herrington• First and fourth chapter available at:

http://www.codegeneration.net/cgia/download.html

• Arnoldus, J., Bijpost, J., Brand, M.G.J. van den (2007). Repleo: a syntax-safe template engine. Proceedings of the 6th International Conference on Generative Programming and Component Engineering (GPCE 2007) 1-3 October 2007, Salzburg, Austria. (pp. 25-32). New York, New York: ACM.

Page 39: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

GLT and MDE

• Generic Language Technology• Program Generators• ATerms• ApiGen• Model Driven SW Engineering

Page 40: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ATerms

• Generic Term representation• Applicative, prefix terms• Maximal subterm sharing

− Cheap equality test− Automatic generational garbage collection− Annotations (text coordinates, dataflow information, ...)− Concise and sharing preserving encoding for shipping:

− yextual− binary

Page 41: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ATerms

• ATerms are used to represent and exchange (tree-like) data structures:• parse trees

• abstract syntax trees

• parse tables

• ATerm-library:• C version

• JAVA version

Page 42: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ATerms

• The ATerm data type is defined as:• INT: (32-bits) integers• REAL: (64-bits) reals• APPL: function application, function symbol with zero

or more ATerms as arguments• LIST: a list of zero or more ATerms• PLACEHOLDER: an ATerm representing the type of the

placeholder, used for matching and constructing

Page 43: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ATerms

• The ATerm data type is defined as (continued):• BLOB: Binary Large data Objects, a length indication

and a byte array of arbitrary (very large) binary data

• a list of ATerm pairs (label, annotation)may be associated with an ATerm

Page 44: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ATerms

• Examples of ATerms:• Unquoted and quoted function application: a, f(a), “x'”, f(“Hello World\n”)

• Integers and Reals: 1, 2, 3.14, 1E-10• Lists: [1,2.2,f(“greetings”)],[]• Placeholders: <int>, <f(1,2)>• Annotations: or(true,false){[color,white]}

Page 45: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ATerms

• Simple match-and-make paradigm:• make a new ATerm by providing a pattern, “and(<int>,<appl>)”, and filling in the holes

• match an existing ATerm by comparing it with a pattern and decompose it according to the pattern

• most important operations:− ATerm ATmake(String p, ATerm a1,..., ATerm an)− ATerm ATmatch(ATerm t, String p, ATerm *a1,..., ATerm

*an)− ATbool ATisEqual(ATerm t1, Aterm t2)− Integer ATgetType(ATerm t)

Page 46: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ATerms

• Previous operations level one operations:• simple to use

• high-level

• inefficient

• Efficient level-two operations:• advanced usage

• efficient• ATgetArgument, ATmakeAppl, ATmakeInt, etc.

Page 47: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ATerms

• Applications:• ASF+SDF Meta-Environment: an IDE for developing

programming language definitions

• mCRL2: a protocol verification tool uses ATerms to represent the state space.

• Stratego compiler uses ATerms to represent abstract syntax trees.

• TOM, a pattern matching compiler.

• Semantic web ontology

Page 48: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ATerms

• More information:• www.aterm.org

• More reading:• M.G.J. van den Brand, H.A. de Jong, P. Klint, and P.A.

Olivier (2000). "Efficient Annotated Terms" Software -- Practice & Experience 30:259--291

Page 49: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

GLT and MDE

• Generic Language Technology• Program Generators• ATerms• ApiGen• Model Driven SW Engineering

Page 50: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• Good properties of ATerms:• Simple concept

• Simple and complete API

− make and match

− read and write• Efficient

• Bad properties of ATerms• not typed (APPL, LIST, INT, REAL, BLOB)

Application Programmers

Interface (Library)

Page 51: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• Bad ATerm programming:ATerm bool1,bool2,bool3,int4;

bool1=ATparse(“and(true,false)”);

bool2=ATparse(“and(true,<term>)”);

bool3=ATparse(“and(false,<int>)”);

if (ATmatchTerm(bool2,bool1,&int4)){ ATprintf(“%t”,int4);} else { if (ATmatchTerm(bool3,bool1,&int4)) { ATprintf(“%t”,int4); }}

Page 52: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• Problems are recognized:• All ATerms are alike

− no static well-formedness checks possible

− debugging extremely hard

− maintenance (changing something) is tedious

• Most applications work on a specific signature of terms (or signature of term patterns)

• Problems can be solved by generating an API on top of ATerms

Page 53: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• ADT (abstact data type): ATerm signature:

[

[Bool, true , true],

[Bool, false, false],

[Bool, and , and(<lhs(Bool)>,<rhs(Bool)>)],

[Bool, or , or(<lhs(Bool)>,<rhs(Bool)>)]

]

Sort Name Pattern

<fieldName(fieldType)>

Page 54: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• adt-to-{c,java}• Generate an API from an ADT

• ATerm library “under the hood”

• Typed access functions in the API

− constructors

− getters and setters

− predicates

Page 55: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• Example:

• • this generates a Bool.h file containing:

adt-to-c -i Bool.adt -o Bool

...Bool makeBoolFalse();Bool makeBoolAnd(Bool lhs, Bool rhs);...ATbool isValidBool(Bool arg);inline ATbool isBoolTrue(Bool arg);...ATbool hasBoolLhs(Bool arg);Bool getBoolLhs(Bool arg);Bool setBoolLhs(Bool arg, Bool lhs);...

Constructors

Checkers

Getters and Setters

Page 56: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• The file Bool.c is also generated:

Bool BoolFromTerm(ATerm t){ return (Bool)t;}ATerm BoolToTerm(Bool arg){ return (Aterm)arg;}...Bool makeBoolTrue(){ return (Bool)(ATerm)ATmakeAppl0(afun0);}...ATbool hasBoolLhs(Bool arg){ if (isBoolAnd(arg)) { return ATtrue;} else if (isBoolOr(arg)) { return ATtrue;} return ATfalse;}...

Conversion

functions

afun0 = true

Page 57: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• Example:

• generates among others a Bool_AndImpl.java file:

adt-to-java -i Bool.adt -o Bool

...public Bool getLhs(){ return (Bool)this.getArgument(index_lhs);}

public Bool setLhs(Bool _lhs){ return (Bool)super.setArgument(_lhs, index_lhs);}...

Page 58: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

Programming against the C API yields:

Executing this program yields:

#include <bool.h>

Bool bool, lhs, rhs;

bool = makeBoolAnd(makeBoolTrue(),makeBoolFalse());

lhs = getBoolLhs(bool);

rhs = getBoolRhs(bool);

ATprintf(“%t”, (ATerm) bool);

and(true,false)

Page 59: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• Generated C code “uses” C ATerm library• Maximal subterm sharing via ATerm library

• Automatic generational garbage collection

• Fully type-safe via opaque types

Page 60: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• Generated Java code “uses” Java ATerm library• Maximal subterm sharing via a Shared Object

Factory:• Efficient hashing

• Extra functionality:• Reading and writing of linearized representations

• Generic tree traversal

• Pattern matching

Page 61: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

My C/Java Program

APIadt-to-{c,java}

Input ATerm

Outputadt

{c,java}

ADT file

(Compiled with

gcc or javac)

ATerms

Page 62: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• Using adt-to-c we generated a C library to manipulated parse trees:

[[ParseTree, top, parsetree(<top(Tree)>,<amb-cnt(int)>)],

[Tree, appl, appl(<prod(Production)>, <args(Args)>)], [Tree, char, <character(int)>], [Tree, lit, lit(<string(str)>)], [Tree, amb, amb(<args(Args)>)],

[Production, default, prod(<lhs(Symbols)>,<rhs(Symbol)>, <attributes(Attributes)>)], [Production, list, list(<rhs(Symbol)>)],

[Attributes, no-attrs, no-attrs], [Attributes, attrs, attrs(<attrs(Attrs)>)], ...]

Page 63: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• Given this parse tree ADT:• ± 500 lines header-code is generated

• ± 5300 lines c-code is generated

ATbool PT_isTreeOpt(PT_Tree tree){ if (PT_hasTreeProd(tree)) { PT_Symbol rhs = PT_getProductionRhs(PT_getTreeProd(tree)); if (PT_isSymbolCf(rhs) || PT_isSymbolLex(rhs)) { rhs = PT_getSymbolSymbol(rhs); } if (PT_isSymbolOpt(rhs)) { return ATtrue; } } return ATfalse;}

Hand-written

function

API generated

functions

Page 64: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• Except for the parse tree API we generated given ADTs APIs for:• The structure editors, graphs, parse tables, etc.

• On top of the parse tree API a number of language specific API are developed

Page 65: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• ApiGen allows us type-safe ATerm programming

• Less bugs during development • static well-formedness of terms

• Maintenance becomes more easy• Change the ADT and the API changes along

• If you program against the ATerm library use ApiGen

Page 66: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

ApiGen

• Further reading: • H.A. de Jong and P.A Olivier. "Generation of abstract

programming interfaces from syntax definitions" Journal of Logic and Algebraic Programming, 2003

• M.G.J. van den Brand, P.E. Moreau, and J.J. Vinju. A generator of efficient strongly typed abstract syntax trees in Java. IEE Proceedings - Software, 2005

Page 67: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

GLT and MDE

• Generic Language Technology• Program Generators• ATerms• ApiGen• Model Driven SW Engineering

Page 68: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

Model driven software engineering

• Today's Software Environment:• Worldwide distributed systems

• Heterogeneous platforms, languages, and applications

• Increasing interconnectivity within and between companies

• New technologies: XML, .NET and web services

Page 69: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

/ Faculteit Wiskunde en Informatica PAGE 6918-04-23

Model driven software engineering

• Models• often used for both hardware and software design• probably manually translated into design documents and code• no guarantee of consistency between model, design and resulting code

• Solution• automatic transformation of domain specific models into software

models• automatic translation from software models into executable code• ingredients:

− syntax and semantics of modeling formalisms should be described− correctness preserving transformation steps should be defined− code generators should be developed

Page 70: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

/ Faculteit Wiskunde en Informatica PAGE 7018-04-23

Model driven software engineering

Research @ SET:• Source code analyses (from code to model)

• Generic language technology• Model extraction (e.g. for model checking)• Size and complexity metrics

• Software generation (from model to code)• Combination of modelware and grammarware technology• Quality of model transformations (e.g. maintainability)• Correctness of model transformations• Versioning of models and/or model transformations• High fidelity software generation

Page 71: Generic Language Technology and Model Driven SW Engineering Prof. Dr. Mark van den Brand Software Engineering and Technology Faculteit Wiskunde en Informatica.

/ Faculteit Wiskunde en Informatica PAGE 7118-04-23

Model driven software engineering

Assignments @ SET:• ASML: meta model of TRECS/VMSL

• NXP: reimplementation of code generator based on M2M transformations and Repleo

• CWI: parse table generation and Unicode