Object Grammars Compositional & Bidirectional Mapping Between - - PowerPoint PPT Presentation

object grammars
SMART_READER_LITE
LIVE PREVIEW

Object Grammars Compositional & Bidirectional Mapping Between - - PowerPoint PPT Presentation

Object Grammars Compositional & Bidirectional Mapping Between Text and Graphs Tijs van der Storm , William R. Cook, Alex Loh Monday, October 1, 12 http://www.enso-lang.org/ Monday, October 1, 12 Models Monday, October 1, 12 Text to


slide-1
SLIDE 1

Object Grammars

Compositional & Bidirectional Mapping Between Text and Graphs Tijs van der Storm, William R. Cook, Alex Loh

Monday, October 1, 12

slide-2
SLIDE 2

http://www.enso-lang.org/

Monday, October 1, 12

slide-3
SLIDE 3

Models

Monday, October 1, 12

slide-4
SLIDE 4

Text to objects and back

Opened Closed Locked close

  • pen

unlock lock

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Object Grammar

Monday, October 1, 12

slide-5
SLIDE 5

Object Grammars

  • Interleave grammar with data binding
  • object construction
  • field assignment
  • predicates
  • Bind to paths in to create cross references
  • Formatting hints to guide pretty printing

Monday, October 1, 12

slide-6
SLIDE 6

Points

P ::= [Point] "(" x:int "," y:int ")"

Monday, October 1, 12

slide-7
SLIDE 7

Points

P ::= [Point] "(" x:int "," y:int ")"

Constructor

Monday, October 1, 12

slide-8
SLIDE 8

Points

P ::= [Point] "(" x:int "," y:int ")"

Constructor Field binding

Monday, October 1, 12

slide-9
SLIDE 9

Points

P ::= [Point] "(" x:int "," y:int ")"

Constructor Field binding Built-in primitives

Monday, October 1, 12

slide-10
SLIDE 10

Points

P ::= [Point] "(" x:int "," y:int ")"

Constructor Field binding Built-in primitives

class Point x: int y: int

The schema

Monday, October 1, 12

slide-11
SLIDE 11

Points

P ::= [Point] "(" x:int "," y:int ")"

Constructor Field binding Built-in primitives

class Point x: int y: int

The schema

Monday, October 1, 12

slide-12
SLIDE 12

Points

P ::= [Point] "(" x:int "," y:int ")"

Constructor Field binding Built-in primitives

class Point x: int y: int

The schema

Monday, October 1, 12

slide-13
SLIDE 13

Points

P ::= [Point] "(" x:int "," y:int ")"

Constructor Field binding Built-in primitives

class Point x: int y: int

The schema

Monday, October 1, 12

slide-14
SLIDE 14

Expressions

Exp ::= [Binary] lhs:Exp op:"+" rhs:Exp | [Binary] lhs:Exp op:"*" rhs:Exp | [Const] value:int | "(" Exp ")"

class Exp class Binary < Exp

  • p: str

lhs: Exp rhs: Exp class Const < Exp value: int

Monday, October 1, 12

slide-15
SLIDE 15

Expressions

Exp ::= [Binary] lhs:Exp op:"+" rhs:Exp | [Binary] lhs:Exp op:"*" rhs:Exp | [Const] value:int | "(" Exp ")"

Both + and * become Binary objects

class Exp class Binary < Exp

  • p: str

lhs: Exp rhs: Exp class Const < Exp value: int

Monday, October 1, 12

slide-16
SLIDE 16

Expressions

Exp ::= [Binary] lhs:Exp op:"+" rhs:Exp | [Binary] lhs:Exp op:"*" rhs:Exp | [Const] value:int | "(" Exp ")"

Both + and * become Binary objects Parentheses don’t introduce objects

class Exp class Binary < Exp

  • p: str

lhs: Exp rhs: Exp class Const < Exp value: int

Monday, October 1, 12

slide-17
SLIDE 17

class Exp class Binary < Exp

  • p: str

lhs: Exp rhs: Exp class Const < Exp value: int

Term ::= [Binary] lhs:Term op:"+" rhs:Fact | Fact Fact ::= [Binary] lhs:Fact op:"*" rhs:Prim | Prim Prim ::= [Const] value:int | "(" Term ")"

Refactored grammar for disambiguation

Expressions

Monday, October 1, 12

slide-18
SLIDE 18

State machines

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Opened Closed Locked close

  • pen

unlock lock

Monday, October 1, 12

slide-19
SLIDE 19

The object grammar

M ::= [Machine] "start" \start:</states[it]> states:S* S ::= [State] "state" name:sym out:T* T ::= [Transition] "on" event:sym "go" to:</states[it]>

Monday, October 1, 12

slide-20
SLIDE 20

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Creating the spine

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

Monday, October 1, 12

slide-21
SLIDE 21

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Creating the spine

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

Monday, October 1, 12

slide-22
SLIDE 22

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Creating the spine

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

Monday, October 1, 12

slide-23
SLIDE 23

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Creating the spine

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

Monday, October 1, 12

slide-24
SLIDE 24

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Creating the spine

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

Monday, October 1, 12

slide-25
SLIDE 25

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Creating the spine

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

Monday, October 1, 12

slide-26
SLIDE 26

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Creating the spine

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

Monday, October 1, 12

slide-27
SLIDE 27

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Creating the spine

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

Monday, October 1, 12

slide-28
SLIDE 28

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Creating the spine

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

Monday, October 1, 12

slide-29
SLIDE 29

Cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

O p e n e d C l

  • s

e d L

  • c

k e d c l

  • s

e

  • p

e n u n l

  • c

k l

  • c

k

( a )

Monday, October 1, 12

slide-30
SLIDE 30

Cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

O p e n e d C l

  • s

e d L

  • c

k e d c l

  • s

e

  • p

e n u n l

  • c

k l

  • c

k

( a )

Monday, October 1, 12

slide-31
SLIDE 31

Cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

O p e n e d C l

  • s

e d L

  • c

k e d c l

  • s

e

  • p

e n u n l

  • c

k l

  • c

k

( a )

Monday, October 1, 12

slide-32
SLIDE 32

Cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

O p e n e d C l

  • s

e d L

  • c

k e d c l

  • s

e

  • p

e n u n l

  • c

k l

  • c

k

( a )

Monday, October 1, 12

slide-33
SLIDE 33

Cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

O p e n e d C l

  • s

e d L

  • c

k e d c l

  • s

e

  • p

e n u n l

  • c

k l

  • c

k

( a )

Monday, October 1, 12

slide-34
SLIDE 34

Cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

O p e n e d C l

  • s

e d L

  • c

k e d c l

  • s

e

  • p

e n u n l

  • c

k l

  • c

k

( a )

Monday, October 1, 12

slide-35
SLIDE 35

Object path to find the start state with name it

M ::= [Machine] "start" \start:</states[it]> states:S* S ::= [State] "state" name:sym out:T* T ::= [Transition] "on" event:sym "go" to:</states[it]>

Monday, October 1, 12

slide-36
SLIDE 36

Paths

  • Navigate the resulting model along
  • Fields
  • Collections (keyed, positional)
  • NB: model may not be finished yet
  • Paths may traverse cross links too
  • Iterative fix point

Monday, October 1, 12

slide-37
SLIDE 37

A path

</states[it]>

start at the root navigate into states use the parsed identifier as key

Paths can also start at current object (.) or parent (..)

Monday, October 1, 12

slide-38
SLIDE 38

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Monday, October 1, 12

slide-39
SLIDE 39

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

Monday, October 1, 12

slide-40
SLIDE 40

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]>

Monday, October 1, 12

slide-41
SLIDE 41

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]>

Monday, October 1, 12

slide-42
SLIDE 42

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]>

Monday, October 1, 12

slide-43
SLIDE 43

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]>

Monday, October 1, 12

slide-44
SLIDE 44

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]>

Monday, October 1, 12

slide-45
SLIDE 45

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]>

Monday, October 1, 12

slide-46
SLIDE 46

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]>

Monday, October 1, 12

slide-47
SLIDE 47

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]>

Monday, October 1, 12

slide-48
SLIDE 48

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]>

Monday, October 1, 12

slide-49
SLIDE 49

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]>

Monday, October 1, 12

slide-50
SLIDE 50

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]>

Monday, October 1, 12

slide-51
SLIDE 51

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]>

Monday, October 1, 12

slide-52
SLIDE 52

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]>

Monday, October 1, 12

slide-53
SLIDE 53

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]>

Monday, October 1, 12

slide-54
SLIDE 54

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]>

Monday, October 1, 12

slide-55
SLIDE 55

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]> to:</states[“Locked”]>

Monday, October 1, 12

slide-56
SLIDE 56

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]> to:</states[“Locked”]>

Monday, October 1, 12

slide-57
SLIDE 57

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]> to:</states[“Locked”]>

Monday, October 1, 12

slide-58
SLIDE 58

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]> to:</states[“Locked”]>

Monday, October 1, 12

slide-59
SLIDE 59

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]> to:</states[“Locked”]>

Monday, October 1, 12

slide-60
SLIDE 60

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]> to:</states[“Locked”]> to:</states[“Closed”]>

Monday, October 1, 12

slide-61
SLIDE 61

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]> to:</states[“Locked”]> to:</states[“Closed”]>

Monday, October 1, 12

slide-62
SLIDE 62

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]> to:</states[“Locked”]> to:</states[“Closed”]>

Monday, October 1, 12

slide-63
SLIDE 63

Creating cross links

start Opened state Opened

  • n close go Closed

state Closed

  • n open go Opened
  • n lock go Locked

state Locked

  • n unlock go Closed

:Machine name: "Opened" :State name: "Closed" :State name: "Locked" :State event: "close" : Transition event: "open" :Transition event: "lock" : Transition event: "unlock" :Transition from

  • ut

in to in to in from

  • ut

from states states

  • ut

from to states machine

  • ut

in to start

start:</states[“Opened”]> to:</states[“Closed”]> to:</states[“Opened”]> to:</states[“Locked”]> to:</states[“Closed”]>

Monday, October 1, 12

slide-64
SLIDE 64

Assessment

  • Bi-directional & compositional
  • Flexible:
  • interleaved data binding
  • path-based references & predicates
  • formatting hints
  • Self-described

Monday, October 1, 12

slide-65
SLIDE 65

Composition in Ensō

Grammar Schema Stencil Auth Command Expr Web XML Path Controller

Monday, October 1, 12

slide-66
SLIDE 66

Conclusion

  • Object grammars: mapping text to objects

and vice versa

  • Declarative paths for resolving cross-

references

  • Flexible, bi-directional and compositional
  • Foundation of Ensō

Monday, October 1, 12

slide-67
SLIDE 67

http://www.enso-lang.org/

Monday, October 1, 12