[ 1 ] claus brabrand, itu banana algebra march 28, 2009 etaps/ldta, york banana algebra: jacob...
TRANSCRIPT
![Page 1: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/1.jpg)
[ 1 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Banana Algebra:Banana Algebra:
Jacob Andersen[ [email protected] ]
Aarhus University
Claus Brabrand[ [email protected] ]
IT University of Copenhagen
Syntactic Language Extension via an Algebra of Languages and Transformations
![Page 2: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/2.jpg)
[ 2 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
AbstractAbstract
We propose an algebra of languages and transformations as a means for extending languages syntactically. The algebra provides a layer of high-level abstractions built on top of languages (captured by CFGs) and transformations (captured by constructive catamorphisms).
The algebra is self-contained in that any term of the algebra specifying a transformation can be reduced to a constant catamorphism, before the transformation is run. Thus, the algebra comes "for free" without sacrificing the strong safety and efficiency properties of constructive catamorphisms.
The entire algebra as presented in the paper is implemented as the Banana Algebra Tool which may be used to syntactically extend languages in an incremental and modular fashion via algebraic composition of previously defined languages and transformations. We demonstrate and evaluate the tool via several kinds of extensions.
![Page 3: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/3.jpg)
[ 3 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Introduction: "What is a Banana?"
Bananas for Language Transformation
Language Extension Pattern
Banana Algebra
Examples
Implementation
Related Work
Conclusion
OutlineOutline
![Page 4: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/4.jpg)
[ 4 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
What is a 'Banana' ?What is a 'Banana' ?
Datatype; "list":
Banana ("sum-of-list"):
Separation of recursion and evaluation
Implicit recursion on input structure
bottom-up re-combination of intermediate results
list = Num N | Cons N * list
[Num n] = n[Cons n l] = n + [l]
list N
(aka. "Catamorphism" )
(| n.n , (n,l ).n+l |)
![Page 5: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/5.jpg)
[ 5 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Language TransformationLanguage Transformation
Bananas (statically typed):
Source language: 'LS'
Target language: 'LT'
Nonterminal-typing: ' '
Reconstructors: 'c '
list = Num N | Cons N * list
tree = Nil | Leaf N | Node N * tree * tree
[Num n] = Leaf n[Cons n l] = Node n (Nil) [l]
[list -> tree]
(| LS -> LT [] c |)
Type-check'able!
LS -> LT
![Page 6: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/6.jpg)
[ 6 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Banana properties:Simple (corresponds to: “simple recursion”)Safe (syntactically safe + always terminate)Efficient (linear time in size of input + output)(Expressive) (…enough for interesting extensions)
Banana Algebra “for free” (16 banana ops):ModularIncrementalSimpleSafeEfficient(Expressive)
Statically reduce: Banana Algebra (term) Banana (term)
Banana PropertiesBanana Properties"The metafront System: Safe and Extensible Parsing and Transformation" [ Claus Brabrand | Michael Schwartzbach ] ( LDTA 2003, SCP J. 2007 )
"Growing Languages with Metamorphic Syntax Macros" [ Claus Brabrand | Michael Schwartzbach ] ( PEPM 2002 )
![Page 7: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/7.jpg)
[ 7 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Introduction: "What is a Banana?"
Bananas for Language Transformation
Language Extension Pattern
Banana Algebra
Examples
Implementation
Related Work
Conclusion
OutlineOutline
![Page 8: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/8.jpg)
[ 8 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Language Extension PatternLanguage Extension Pattern
[var V] = var V
[lam V E] = lam V [E ]
[app E1 E2] = app [E1] [E2]
[zero] = lam z (var z)
[succ E] = lam s [E ]
[pred E] = app [E ] (lam z (var z))
Numeral extension: Lambda-Calculus:
Nonterminal typing:
Reconstructors:
[Exp -> Exp]
Exp : var Id : lam Id * Exp : app Exp * Exp : zero : succ Exp : pred Exp
Exp : var Id : lam Id * Exp : app Exp * Exp
'LT''LS'
' '
'c '
(| LS -> LT [] c |)Catamorphism:
Using very simple numeral encoding
![Page 9: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/9.jpg)
[ 9 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Algebraic SolutionAlgebraic Solution
Exp : var Id : lam Id * Exp : app Exp * Exp
Exp : zero : succ Exp : pred Exp
(| ln -> l [Exp -> Exp]
[zero] = lam z (var z) [succ E] = lam s [E ] [pred E] = app [E ] ...|)
idx
+
lnl
ln l
ln+l l
l l
![Page 10: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/10.jpg)
[ 10 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Banana AlgebraBanana Algebra
Languages (L):
lv
L \ L
L + L
src ( X )
tgt ( X )
let v = L in L
letx w = X in L
Transformations (X):
xw
X \ L
X + X
X X
idx ( L )
let v = L in X
letx w = X in X
(| L -> L [] c |){ CFG }
![Page 11: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/11.jpg)
[ 11 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Algebraic LawsAlgebraic Laws
Idempotency of '+':
Commutativity of '+':
Associativity of '+':
Source-identity:
…
L L + L
L1 + L2 L2 + L1
L1 + (L2 + L3) (L1 + L2) + L3
L src(idx(L)) L tgt(idx(L))Target-identity:
![Page 12: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/12.jpg)
[ 12 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Introduction: "What is a Banana?"
Bananas for Language Transformation
Language Extension Pattern
Banana Algebra
Examples
Implementation
Related Work
Conclusion
OutlineOutline
![Page 13: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/13.jpg)
[ 13 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Example RevisitedExample Revisited
{ Id = [a-z] [a-z0-9]* ;
Exp.var : Id ; Exp.lam : "\\" Id "." Exp ; Exp.app : "(" Exp Exp ")" ;}
{ Exp.zero : "zero" ; Exp.succ : "succ" "(" Exp ")" ; Exp.pred : "pred" "(" Exp ")" ;}
--- "l.l" --- --- "ln.l" ---
let l = "l.l"in let ln = "ln.l"in idx(l) + (| ln -> l [Exp -> Exp] Exp.zero = '\z.z' ; Exp.succ = '\s.$1' ; Exp.pred = '($1 \z.z)' ; |)
--- "ln2l.x" ---
![Page 14: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/14.jpg)
[ 14 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Numerals + BooleansNumerals + Booleans
l
lb l idx
+lb+l l
l l
lb l
ln l idx
+ln+l l
ln
+l+ln+lb l
…with Nums …with Bools
…with Nums & Bools?
![Page 15: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/15.jpg)
[ 15 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Java + RepeatJava + Repeat
let java = "java.l"in let repeat = "repeat.l"in idx(java) + (| repeat -> java [Exp -> Exp, Stm -> Stm]
Stm.repeat = 'do $1 while (!($2));' ; |)
{ Stm.repeat : "repeat" Stm "until" "(" Exp ")" ";" ; }
7 lines !
{ Java ... "try" Stm "catch" ... Name.id : Id ; }
575 lines--- "java.l" ---
--- "repeat.l" ---
--- "repeat2java.x" ---
![Page 16: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/16.jpg)
[ 16 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Concrete vs. Abstract SyntaxConcrete vs. Abstract Syntax
Exp.or : Exp1 "||" Exp ; .exp1 : Exp1 ;Exp1.and : Exp2 "&&" Exp1 ; .exp2 : Exp2 ;Exp2.add : Exp3 "+" Exp2 ; .exp3 : Exp3 ; Exp7.neg : "!" Exp8 ; .exp8 : Exp8 ;Exp8.par : "(" Exp ")" ; .var : Id ; .num : IntConst ;
Exp (with explicit assoc./prec.):Stm.repeat = Stm.do(<1>, Exp.exp1( Exp1.exp2( Exp2.exp3( Exp3.exp4( Exp4.exp5( Exp5.exp6( Exp6.exp7( Exp7.neg( Exp8.par(<2>) ))))))))) ;
Abstract syntax:
Stm.repeat = 'do $1 while (!($2));' ;
Concrete syntax:
NB: Tool supports BOTH ! (unambiguous: concrete abstract)
![Page 17: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/17.jpg)
[ 17 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
"FUN" Example"FUN" Example
Lambda Calculus
Nums→
Unsigned arithmetic + booleans + definitions + pairs
Bools→ Defs→ Pairs→+ + +
Fun
Literals
Literals→Nums
Fun grammar transform
The "FUN" Language: used for Teaching Functional Programming
Basically The Lambda Calculus with…: numerals, booleans, arithmetic, boolean logic, local definitions, pairs, literals, lists, signs, comparisons, dynamic types, fixed-point combinators, …
(at Aarhus University)
![Page 18: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/18.jpg)
[ 18 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Literals
Literals→Nums
"FUN" Example"FUN" Example
Lambda Calculus
Nums→
Unsigned arithmetic + booleans + definitions + pairs
Bools→ Defs→ Pairs→+ + +
Fun
Fun grammar transform
Signed arith→Nums
Literals→Nums
Fun grammar transform FunSigned GT+
Fun FunSigned+Component re-use
![Page 19: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/19.jpg)
[ 19 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
"FUN" Example"FUN" Example
Lambda Calculus
Nums→
Unsigned arithmetic + booleans + definitions + pairs
Bools→ Defs→ Pairs→+ + +
Fun GT FunSigned GT+
Fun FunSigned+ FunCompare FunTypesafe+ +
FunCompare GT+ FunTypesafe GT+
245x Banana Algebra ops 4 MB Banana !
![Page 20: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/20.jpg)
[ 20 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
"FUN" Usage Statistics"FUN" Usage Statistics
Usage statistics (245x operators) in "FUN":58x { …cfg… } Constant languages51x "file.l" Language inclusions28x L + L Language additions23x v Language variables17x (|L L [] c|) Constant transformations17x X + X Transformation additions14x "file.x" Transformation inclusions10x let-in Local definitions 9x idx(L) Identity transformations 8x X X Compositions 4x L \ L Language restriction 4x w Transformation variables 2x src(X) Source extractions
![Page 21: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/21.jpg)
[ 21 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Other ExamplesOther Examples
Self-Application (The tool on itself!):
SQL embedding (in <bigwig>):
My-Java (endless variations):
[L1 << L2] = '(L1 \ L2) + L2' [X1 << X2] = '(X1 \ src(X2)) + X2'
Stm.select = 'factor (<2>) { if (<3>) return ( # \+ (<1>) ); }'
java( + sql) ( \ loops) o syntaxe_francais
![Page 22: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/22.jpg)
[ 22 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
ImplementationImplementation
[ http://www.itu.dk/people/brabrand/banana-algebra/ ]
The 'Banana Algebra' Tool:(3,600 lines of O'Caml)
Uses (underlying technologies): 'dk.brics.grammar': for parsing, unparsing, and ambiguity analysis ! 'XSugar': for transformation: "concrete syntax abstract XML syntax" 'XSLT': for transformation: "XML XML"
![Page 23: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/23.jpg)
[ 23 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Introduction: "What is a Banana?"
Bananas for Language Transformation
Language Extension Pattern
Banana Algebra
Examples
Implementation
Related Work
Conclusion
OutlineOutline
![Page 24: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/24.jpg)
[ 24 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Related Work (I/III)Related Work (I/III)
Macro Systems:
"The metafront System: Safe and Extensible Parsing and Transformation" [ Claus Brabrand | Michael Schwartzbach ] ( LDTA 2003 , SCP J. 2007 )
"Growing Languages with Metamorphic Syntax Macros" [ Claus Brabrand | Michael Schwartzbach ] ( PEPM 2002 )
![Page 25: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/25.jpg)
[ 25 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Related Work (II/III)Related Work (II/III)
Attribute Grammars:Language transformation (and extension)…
…via computation on AST's
(using "inherited" or "synthesized" or … attributes)
E.g., Eli, JastAdd, Silver, …
Rewrite Systems:Language transformation (and extension)…
…via syntactic rewriting, using encodings…:
gradually rewrite "S-syntax" to "T-syntax"
gradually rewrite "S-syntax" to "T-syntax"
E.g., Elan, TXL, ASF+SDF, Stratego/XT, …
S T
S T
Both; compared to bananas: More ambitious (expressivity) No termination guarantees (safety) Transformation "indirect" (simplicity)
![Page 26: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/26.jpg)
[ 26 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Related Work (III/III)Related Work (III/III)
Functional Programming:Catas mimicked by "disciplined style" of fun. programming
…aided by:Traversal functions (auto-synthesized from datatypes)
Combinator libraries
"Shortcut fusion" (to eliminate ' ' at compile-time)
Category Theory:A lot of this work can be viewed as Category Theory:
Basically yeolde issue:GPL vs. DSL
![Page 27: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/27.jpg)
[ 27 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
ConclusionConclusion
IF bananas are sufficiently:(Expressive)
THEN you get…:
Banana Algebra “for free” (16 banana ops):IncrementalModularSimpleSafeEfficient
"Niche"
Statically reduce: Banana Algebra (term) Banana (term)
![Page 28: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/28.jpg)
[ 28 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
BONUS SLIDESBONUS SLIDES
- Reduction Semantics -
"Syntactic Language Extension via an Algebra of Languages and Transformations" [ Jacob Andersen | Claus Brabrand ] ( ITU Technical Report, Dec. 2008 )
If you want all the details:
![Page 29: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/29.jpg)
[ 29 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Reduction SemanticsReduction Semantics
Environments:
Reduction relations:
Abbreviations: ...as a short-hand for:
...as a short-hand for:
ENVL = VARL EXPL
ENVL ENVX EXPL EXPL 'L'
ENVX = VARX EXPX
ENVL ENVX EXPX EXPX 'X'
, |- L L l (,,L,l) 'L'
(,,X,x) 'X', |- X X x
environment of languages
environment of transformations
![Page 30: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/30.jpg)
[ 30 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Semantics (L)Semantics (L)
, l L l[CONL] , v L (v)
[VARL]
, L \ L' L l l'[RESL]
, L' L l', L L l
, L + L' L l l'[ADDL]
, L' L l', L L l
l
ll ~ l'l
lwfl
![Page 31: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/31.jpg)
[ 31 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Semantics (L)Semantics (L)
, src (X) L lS
[SRCL], X X (| lS -> lT [] c |)
, tgt (X) L lT
[TGTL], X X (| lS -> lT [] c |)
, let v=L in L' L l'[LETL]
[v=l], L' L l', L L l
![Page 32: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/32.jpg)
[ 32 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Semantics (X)Semantics (X)
, X \ L X x l[RESX]
, L L l, X X x
, X + X' X x x'[ADDX]
, X' X x', X X x
x
xx ~ x'x
, (| LS -> LT [] c |) X (| lS -> lT [] c |)[CONX]
, LS L lS , LT L lT(| lS -> lT [] c |)wfx
, w X (w)[VARX]
![Page 33: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/33.jpg)
[ 33 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Semantics (X)Semantics (X)
, X' X X (| lS -> lT' [' ] c' c |)[COMPX]
, X' X (| lS' -> lT' ['] c' |)
, idx (L) X (| l -> l [id(l)] idc(l) |)[IDXX]
, letx w=X in X' X x'[LETL]
,[w=x] X' X x', X X x
, X X (| lS -> lT [ ] c |)
, L L l
lT lS'l
![Page 34: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/34.jpg)
[ 34 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
BONUS SLIDESBONUS SLIDES
- More Examples -
![Page 35: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/35.jpg)
[ 35 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Numeral & Boolean ExtensionNumeral & Boolean Extension
Numeral Extension (catamorphism):
Boolean Extension (catamorphism):
[var V] = var [V ]
[lam V E] = lam [V ] [E ]
[app E1 E2] = app [E1] [E2]
[zero] = lam z (var z)
[succ E] = lam s [E ]
[pred E] = app [E ] (lam z (var z))
[var V] = var [V ] [lam V E] = lam [V ] [E ] [app E1 E2] = app [E1] [E2] [true] = lam a (lam b (var a)) [false] = lam a (lam b (var b))[if E1 E2 E3] = app (app [E1] [E2]) [E3]
Exp : var Id : lam Id * Exp : app Exp * Exp : zero : succ Exp : pred Exp
Exp : var Id : lam Id * Exp : app Exp * Exp
Exp : var Id : lam Id * Exp : app Exp * Exp : true : false : if Exp Exp Exp
Exp : var Id : lam Id * Exp : app Exp * Exp
![Page 36: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/36.jpg)
[ 36 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Lambda with BooleansLambda with Booleans
Exp : true : false : if Exp Exp Exp
(| lb -> l [Exp -> Exp]
[true] = '\a.\b . a' [false] = '\a.\b . b'[if E1 E2 E3] = '(([E1] [E2]) [E3])'
|)
idx
+
lbl
lb l
lb+l l
l l
Exp : var Id : lam Id * Exp : app Exp * Exp
![Page 37: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/37.jpg)
[ 37 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Incremental DevelopmentIncremental Development
let l = "l.l" in idx(l) + (| "ln.l" -> l [Exp -> Exp] Exp.zero : '\z.z' ; Exp.succ : '\x.$1' ; Exp.pred : '($1 \z.z)' ; |)
let l = "l.l" in idx(l) + (| "li.l" -> l [Exp -> Exp] Exp.id : '\z.z' ; |)
{ Exp.zero : "zero" ; Exp.succ : "succ" Exp ; Exp.pred : "pred" Exp ; }
{ Id = [a-z] [a-z0-9]* ; Exp.var : Id ; Exp.lam : "\\" Id "." Exp ; Exp.app : "(" Exp Exp ")" ; }
--- "ln.l" ---
--- "ln2li.x" ---
--- "l.l" ---
--- "ln2l.x" ---let l = "l.l" in idx(l) + (| ln -> l+"li.l" [Exp -> Exp] Exp.zero : 'id' ; Exp.succ : '\x.$1' ; Exp.pred : '($1 id)' ; |)
{ Exp.id : "id" ; }--- "li.l" ---
--- "li2l.x" ---
"li2l.x" o "ln2li.x"
--- "ln2l.x" ---
![Page 38: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/38.jpg)
[ 38 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Example cont'dExample cont'd
Both statically reduce to same catamorphism:(|
Exp.app : Exp.app($1, $2) ; Exp.lam : Exp.lam($1, $2) ; Exp.pred : Exp.app($1, Exp.lam(Id("z"), Exp.var(Id("z")))) ; Exp.succ : Exp.lam(Id("x"), $1) ; Exp.var : Exp.var($1) ; Exp.zero : Exp.lam(Id("z"), Exp.var(Id("z"))) ;|)
{ Id = [a-z] [0-9a-z]* ;
Exp.app : "(" Exp Exp ")" ; Exp.lam : "\" Id "." Exp ; Exp.var : Id ; }
{ Id = [a-z] [0-9a-z]* ;
Exp.app : "(" Exp Exp ")" ; Exp.lam : "\" Id "." Exp ; Exp.pred : "pred" Exp ; Exp.succ : "succ" Exp ; Exp.var : Id ; Exp.zero : "zero" ; }
->
[Exp -> Exp, Id->Id]
![Page 39: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/39.jpg)
[ 40 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Usage ScenariosUsage Scenarios
Programmers:May extend existing languages (~ syntax macros)
Developers:May embed DSLs into host languages (SQL in Java)
Developers (and teachers):May incrementally specify multi-layered languages
Compiler writers:May rely on tool and implement only a small core
(and then specify the rest externally as extensions)
![Page 40: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/40.jpg)
[ 41 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
BONUS SLIDESBONUS SLIDES
- Parsing & Error Reporting -
![Page 41: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/41.jpg)
[ 42 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
ParsingParsing
Parsing (XSugar):Variant of Earley's algorithm: O ( ||3 )
Can parse any context-free grammar
Closed under union of languages
Support for production priority
Tool easily adapts to other parsing algorithms
![Page 42: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/42.jpg)
[ 43 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Unparsing:Canonical whitespace
Ambiguity: parsingunparsingAmbiguity: parsingunparsing
ASTL / ~L
.
L
. Parsing:Grammar ambiguity
ASTL / ~L
.
L
.
.
![Page 43: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/43.jpg)
[ 44 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Ambiguity AnalysisAmbiguity Analysis
Ambiguity Analysis:
Using implementation ( ) on:Source language;
Target language; and/or
…all intermediate languages (somewhat expensive)
(Note: Ambiguity analysis comes with XSugar tool)
"Analyzing Ambiguity of Context-Free Grammars" [ Claus Brabrand | Robert Giegerich | Anders Møller ] ( CIAA 2007 )
"dk.brics.grammar"[ by Anders Møller ]
![Page 44: [ 1 ] Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009 ETAPS/LDTA, York Banana Algebra: Jacob Andersen [ jacand@cs.au.dk ] Aarhus University Claus Brabrand](https://reader035.vdocuments.net/reader035/viewer/2022062620/551a8f4b550346761a8b574d/html5/thumbnails/44.jpg)
[ 45 ]Claus Brabrand, ITU BANANA ALGEBRA March 28, 2009ETAPS/LDTA, York
Error ReportingError Reporting
Error reporting:Static parse-error (O'Caml-lex):
Static transformation error (XSugar):
(is actually a parse-error in a cata reconstructor)
Dynamic parse-error (XSugar):
Dynamic transformation error:impossible :-)
*** In ln2l.x (4,4)-(4,7): Parse error at "Exp"
*** Parse error at character 6 (line 1, column 7) in /tmp/shape84e645.txt
*** Parse error at character 23 (line 1, column 24) in /dev/stdin
Could beimproved
Prototype