formalizing homogeneous language embeddings

Post on 23-Feb-2016

14 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Formalizing Homogeneous Language Embeddings. Tony Clark Centre for Model Driven Software Engineering, School of Computing, Thames Valley University tony.clark@tvu.ac.uk http://itcentre.tvu.ac.uk/~clark/ Laurence Tratt School of Design Engineering and Computing, Bournemouth University - PowerPoint PPT Presentation

TRANSCRIPT

1

Formalizing Homogeneous Language Embeddings

Tony Clark Centre for Model Driven Software Engineering, School of Computing, Thames Valley University

tony.clark@tvu.ac.ukhttp://itcentre.tvu.ac.uk/~clark/

Laurence TrattSchool of Design Engineering and Computing, Bournemouth University

laurie@tratt.nethttp://tratt.net/laurie/

2

Overview

• Language Factories and DSLs• An example and some properties• A language model for DSLs• The mu-calculus for DSLs• Some examples• Further work.

3

Language Factories

The ability to construct new languages by combining precisely defined, reusable, language components and templates.

4

Language Component

A

B

C D

E

σ σ σ σ σ

Abstract Syntax Tree

Execution Trace

program A block B do C do D end do Eend

parse

5

Problem Addressed

ParametricLanguage Component

ReusableLanguage Component

Questions:• how can syntax be merged?• how can semantics be merged?• how can we specify the combination?

6

An Application of DSLslet results = lang sql:SQL[ select name,age from Customer where age > 18]in lang html:HTML[ <TABLE> for name,age in results do <TR> <TD> name </TD> <TD> age </TD> </TR> </TABLE> ]

7

A

B

C

E

V

W

X Y

Z

σ σ σ σ σ

w w w w w

σ

load unload

host language(G)

embedded language(H)

A Model for DSL Embedding

evalH

evalG

8

The mu-Calculus

E ::= V variables | fun(V) E functions | E E applications | (E,E,E) language def | lang E:T[C] language embed | ...

9

Abstract Syntax

type Exp(T) = Var(String) | Lambda(String,Exp(T)) | Apply(Exp(T),Exp(T)) | (Exp(T),Exp(T),Exp(T)) | Lang(T) | ...

10

Semantics

evalExp(eval)(s) = case s of ... standard SECD except for... (R:():s,e,App:c,d) -> eval((s,e,c,d):s,e,c,d) (I:v:s,e,App:c,d) -> eval(v) end

11

Loading and Unloadinglang(eval,load,unload):t[c]

is equivalent to:

I(newState) where newState = unload(termState,initialState) where termState = eval(startState) where startState = load(initialState,parse(t)(c)) where initialState = R()

reify the host state

translate hoststate to embedded

initial state

produce embeddedterminal state

translate terminal embedded to

host state

install the hoststate

12

mu-calculus Embedded in ItselfMu = Y(Exp)evalMu = Y(evalExp)loadMu((s,e,c,d),x) = (s,e,x:s,d)unloadMu(s,_) = smuL = (evalMu,loadMu,unloadMu)

fun(x) lang muL:Mu[ fun(y) lang muL:Mu[x + y]]

13

Let Binding: Semanticstype LetExp(T) = Let(String,Let(T),Let(T)) | Exp(T)

type Let = Y(LetExp)

evalLetExp(eval)(s) = case s of (s,e,Let(n,x,b):c,d) -> eval(s,e,x:Let(n,b):c,d) (v:s,e,Let(n,b):c,d) -> eval([],e[n->v],[b],(s,e,c,d)) else evalExp(eval)(s) end

14

Let-Binding: Language Definitiontype Let = Y(LetExp)evalLet = Y(evalLetExp)loadLet((s,e,c,d),x) = (s,e,x:c,d)unoadLet(s,_) = sletL = (evalLet,loadLet,unloadLet)

fun(x) lang letL:Let[ let y = x + 1 in y ]

15

Other Exampleslang letL:Let[let mkArray = fun(limit) lang arrayL:Array [ 0 .. limit ]in mkArray(100)]

lang letL:Let[ let x = ... in lang abortL:Abort[ stop if(x > 100) ]]

16

Review and Further Work

• mu-Calculus for semantic analysis of language embedding.

• Further work:– Parsing– Static Analysis– Logic for combining language components– Practical considerations

top related