Presentation is loading. Please wait.

Presentation is loading. Please wait.

Formalizing Homogeneous Language Embeddings Tony Clark Centre for Model Driven Software Engineering, School of Computing, Thames Valley University

Similar presentations


Presentation on theme: "Formalizing Homogeneous Language Embeddings Tony Clark Centre for Model Driven Software Engineering, School of Computing, Thames Valley University"— 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.uk http://itcentre.tvu.ac.uk/~clark/ Laurence Tratt School of Design Engineering and Computing, Bournemouth University laurie@tratt.net http://tratt.net/laurie/ 1

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. 2

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

4 Language Component A B C D E σσσσσ Abstract Syntax Tree Execution Trace program A block B do C do D end do E end parse 4

5 Problem Addressed Parametric Language Component Reusable Language Component Questions: how can syntax be merged? how can semantics be merged? how can we specify the combination? 5

6 An Application of DSLs let results = lang sql:SQL[ select name,age from Customer where age > 18] in lang html:HTML[ for name,age in results do name age ] 6

7 A B C E V W X Y Z σσσσσ  σ load unload host language(G) embedded language(H) A Model for DSL Embedding evalH evalG 7

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 |... 8

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) |... 9

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 10

11 Loading and Unloading lang(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 host state to embedded initial state produce embedded terminal state translate terminal embedded to host state install the host state 11

12 mu-calculus Embedded in Itself Mu = Y(Exp) evalMu = Y(evalExp) loadMu((s,e,c,d),x) = (s,e,x:s,d) unloadMu(s,_) = s muL = (evalMu,loadMu,unloadMu) fun(x) lang muL:Mu[ fun(y) lang muL:Mu[x + y]] 12

13 Let Binding: Semantics type 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 13

14 Let-Binding: Language Definition type Let = Y(LetExp) evalLet = Y(evalLetExp) loadLet((s,e,c,d),x) = (s,e,x:c,d) unoadLet(s,_) = s letL = (evalLet,loadLet,unloadLet) fun(x) lang letL:Let[ let y = x + 1 in y ] 14

15 Other Examples lang 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) ]] 15

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 16


Download ppt "Formalizing Homogeneous Language Embeddings Tony Clark Centre for Model Driven Software Engineering, School of Computing, Thames Valley University"

Similar presentations


Ads by Google