Model-Driven Language Engineering Example of the ThingML language Franck Fleurey SINTEF Research Scientist (franck.fleurey@sintef.no) http://www.fleurey.com/franck INF5120 - April 2012
Language Engineering Programming languages Domain specific languages Modelling languages Who is the user? What is the purpose? INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 2
Outline Abstract syntax Concrete syntax Editor(s) Static semantics Dynamic semantics Interpreter Compiler Debugger … INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 3
Model-driven language engineering Traditionally: Grammar / Compilers approaches Modelling – Focus on the abstract syntax – More flexible concrete syntaxes – Better modularity – More maintainable INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 4
Example of the ThingML language What is ThingML – Name comes from Internet of Things (IoT) Who are the target users? What is the purpose? What are the alternatives? INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 5
What is the Internet of Things (IoT)? INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 6
Example applications Health domain and ambient assisted living Energy domain and smart grids Environmental monitoring and oil and gas Safety in hazardous environments Automotive industry ... INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 7
Programming IoT systems Distributed Asynchronous Parallel Event based Imperative programing is not well suited INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 8
ThingML: Architecture Model Distance Robot control Sensor Collision Sensor Movement control Left Wheel Right Wheel control control INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 9
ThingML: Component Reusable unit component type (Thing) (Black box) Messages Port Wheel Controller <= forward(speed:int) <= backward(speed:int) <= stop() => wheel_position(position: int) instances Left Wheel Right Wheel control control INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 10
ThingML: State Machines Wheel Controller !wheel_position ?forward Forward Control Port ?stop Stopped ?stop backward ?backward !wheel_position INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 11
ThingML: Action Language ?forward Forward on entry do reset_wheel_position() motor_start() end ... action do motor_set_speed(speed) motor_set_direction(FW) end INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 12
ThingML – Abstract syntax What are the concepts of the language? – Components – Instances – States – Transitions – … What are the relations between these concepts Tools: EMF, MOF, etc. INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 13
Comparing Abstract Syntax Systems Technology #1 Technology #4 Technology #2 Technology #3 (formal grammars (Ontology engineering) (MOF + OCL) (XML Meta-Language) attribute grammars, etc.) M 3 A XML DTD EBNF Upper Level MOF Or Schema Ontologies M 2 Pascal Language The UML A XML A XML DTD KIF Grammar meta-Model document or Schema Theories +Description M 1 A specific A XML A Specific Logics Pascal Program document UML Model +Conceptual + Xlink, Xpath, XSLT Graphs + RDF, OIL, DAML +etc. A specific A Specific + etc. execution phenomenon [XMI=MOF+XML+OCL] of a Pascal corresponding to program a UML Model (From J. Bézivin) INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 14
ThingML Abstract Syntax INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 15
Abstract syntax – State Machines Model x/y a /b S1 S2 S3 y/x b/a INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 16
Abstract syntax – State Machines Model x/y a /b S1 S2 S3 y/x b/a Meta-Model ow ningFSM 1 Transition * ow nedState currentState source outgoingTransition FSM input: EString State 0..1 output: EString 1 * name: EString run() initialState incomingTransition target fire() reset() step() 1 1 0..1 INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 17
What do we get? Model x/y a /b S1 S2 S3 y/x b/a Meta-Model ow ningFSM 1 Transition * ow nedState currentState source outgoingTransition FSM input: EString State 0..1 output: EString 1 * name: EString run() initialState incomingTransition target fire() reset() step() 1 1 0..1 INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 18
Outline Abstract syntax Concrete syntax Editor(s) Static semantics Dynamic semantics Interpreter Compiler Debugger … INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 19
Concrete syntax Textual vs. Graphical Intermediate Wizards Important: use standard and/or existing notations for the target users Tools: EMFText, GMF, etc. INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 20
ThingML Concrete syntax Made a attempt at graphical Made an attempt with UML Endded-up with a text-based syntax Built with EMFText INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 21
Blink example state machine Blink thing Blink includes LedMsgs, TimerMsgs on entry { !timer_start(1000) required port HW { sends led_toggle, timer_start receives timer_timeout Stopped } statechart BlinkImpl init Blinking { ?timer_timeout state Blinking !led_toggle() { on entry HW ! timer_start ( 1000 ) HW transition -> Blinking event HW ? timer_timeout <= timer_timeout() action HW ! led_toggle () } => led_toggle() } => timer_start(delay:int) } INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 22
Blink example and instance groups led group app: BlinkApplication HW led: Led Led HW timer io group Timer:Timer do: DigitalOutput configuration BlinkArduino pin: IOPin { group led : LedArduino set led . io . digital_output . pin = DigitalPin : PIN_13 // The timer instance timer : TimerArduino // The blink application Arduino Board instance app : Blink connector app . HW => led . led . Led connector app . HW => timer . timer } INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 23
Tooling the concrete syntax Parser to the abstract syntax Serialization (pretty-printer) Editor Good editor features – Highlighting – Outline – Completion – Navigation EMFText generates an eclipse editor INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 24
ThingML Editor INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 25
Outline Abstract syntax Concrete syntax Editor(s) Static semantics Dynamic semantics Interpreter Compiler Debugger … INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 26
Static Semantics with OCL Complementing a meta-model with Well- Formedness Rules, aka Contracts e.g.; – A procedure is called with the same number of arguments as specified in its declaration Expressed with the OCL (Object Constraint Language) – The OCL is a language of typed expressions. – A constraint is a valid OCL expression of type Boolean. – A constraint is a restriction on one or more values of (part of) an object-oriented model or system. INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 27
Contracts in OO languages Inspired by the notion of Abstract Data Type Specification = Signature + – Preconditions – Postconditions – Class Invariants Behavioral contracts are inherited in subclasses INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 28
OCL for static semantics Can be used at both – M1 level (constraints on Models) » aka Design-by-Contract (Meyer) – M2 level (constraints on Meta-Models) » aka Static semantics Tools: EMF Validation Framework – Static constraints can be written in OCL or Java – Well integrated with EMFText INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 29
Static semantics example ow ningFSM 1 Transition * ow nedState currentState source FSM outgoingTransition input: EString State 0..1 output: EString 1 * name: EString run() initialState incomingTransition target fire() reset() step() 1 1 0..1 Context FSM inv: ownedState->forAll(s1,s2| s1.name=s2.name implies s1=s2) INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 30
Outline Abstract syntax Concrete syntax Editor(s) Static semantics Dynamic semantics Interpreter Compiler Debugger … INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 31
Dynamic semantics Depends on the purpose of the language ow ningFSM 1 Transition * ow nedState currentState source FSM outgoingTransition input: EString State 0..1 output: EString 1 * name: EString run() initialState incomingTransition target fire() reset() step() 1 1 0..1 What is the meaning of the model? INF5120 – 2013 – Franck Fleurey (franck.fleurey@sintef.no) 32
Recommend
More recommend