Building Blocks for Language Workbenches

This dissertation presents research on techniques, methods, and tool support for domain-specific language engineering. Domain-specific language engineering is the discipline of designing, developing, and maintaining domain-specific programming languages. The focus of this thesis is the architecture of language workbenches their underlying technologies. Language workbenches are tools that make language engineering more efficient by providing an integrated development environment for language engineering tasks. In particular, we introduce the Spoofax language workbench, and describe its techniques for high-level, portable language definitions, language composition, interactive support for defining languages, and language testing. Our research focuses on three main themes: applying domain-specific languages for declarative specification of languages and IDEs; supporting declarative syntax definition for generating a parser-based, interactive development environment; and providing interactive meta-tooling support, exploring the application of modern IDE technology to DSL engineering.

[1]  Eelco Visser,et al.  Meta-programming with Concrete Object Syntax , 2002, GPCE.

[2]  Jonathan C. Hardwick,et al.  Java as an Intermediate Language , 1996 .

[3]  Uwe F. Pleban Formal Semantics and Compiler Generation , 1984, Programmierumgebungen und Compiler.

[4]  Wolfgang De Meuter,et al.  Can we refactor conditional compilation into aspects? , 2009, AOSD '09.

[5]  J. K. Berendsen,et al.  Abstraction, prices and probability in model checking timed automata , 2010 .

[6]  Joseph E. Urban,et al.  Syntax-directed editing environments: issues and features , 1993, SAC '93.

[7]  Bastiaan Stephan Graaf,et al.  Model-Driven Evolution of Software Architectures , 2007, 11th European Conference on Software Maintenance and Reengineering (CSMR'07).

[8]  William G. Griswold,et al.  An Overview of AspectJ , 2001, ECOOP.

[9]  M. T. de Berg,et al.  Multi-functional geometric data structures , 2003 .

[10]  Charles Simonyi,et al.  The Death of Computer Languages, The Birth of Intentional Programming , 1995 .

[11]  M. G. van der Horst,et al.  Scalable block processing algorithms , 2008 .

[12]  Dmitri Jarnikov,et al.  QoS framework for video streaming in home networks , 2007 .

[13]  Cheun Ngen Chong Experiments in rights control : expression and enforcement , 2005 .

[14]  Marcel Böhme,et al.  Generating safe template languages , 2009, GPCE '09.

[15]  J. Rekers,et al.  Parser Generation for Interactive Environments , 1992 .

[16]  Eelco Visser,et al.  Declarative Access Control for WebDSL: Combining Language Integration and Separation of Concerns , 2008, 2008 Eighth International Conference on Web Engineering.

[17]  Sheng Liang,et al.  Java Native Interface: Programmer's Guide and Reference , 1999 .

[18]  Eelco Visser,et al.  The spoofax language workbench: rules for declarative specification of languages and IDEs , 2010, OOPSLA.

[19]  James R. Cordy,et al.  Robust multilingual parsing using island grammars , 2003, CASCON.

[20]  Donald D. Chamberlin,et al.  SEQUEL: A structured English query language , 1974, SIGFIDET '74.

[21]  de Ism Ivo Jong Integration and test strategies for complex manufacturing machines , 2008 .

[22]  Ichiro Hasuo,et al.  Tracing Anonymity with Coalgebras , 2008 .

[23]  Görel Hedin,et al.  Reference Attributed Grammars , 2000, Informatica.

[24]  Kent L. Beck,et al.  Test-driven Development - by example , 2002, The Addison-Wesley signature series.

[25]  Tijs van der Storm,et al.  RASCAL: A Domain Specific Language for Source Code Analysis and Manipulation , 2009, 2009 Ninth IEEE International Working Conference on Source Code Analysis and Manipulation.

[26]  Alon Lavie,et al.  GLR* – An Efficient Noise-skipping Parsing Algorithm For Context Free Grammars , 1993, IWPT.

[27]  Simon L. Peyton Jones,et al.  Template meta-programming for Haskell , 2002, Haskell '02.

[28]  D. Costa Formal models for component connectors , 2010 .

[29]  Jon Louis Bentley,et al.  Programming pearls: little languages , 1986, CACM.

[30]  Görel Hedin,et al.  JastAdd--an aspect-oriented compiler construction system , 2003, Sci. Comput. Program..

[31]  Martijn Hendriks,et al.  Model checking timed automata : techniques and applications , 2006 .

[32]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[33]  Wolter Pieters,et al.  La volonté machinale: understanding the electronic voting controversy , 2008 .

[34]  Guido Wachsmuth A Formal Way from Text to Code Templates , 2009, FASE.

[35]  van Mpwj Michiel Osch Automated model-based testing of hybrid systems , 2009 .

[36]  Wolfgang Schröder-Preikschat,et al.  A quantitative analysis of aspects in the eCos kernel , 2006, EuroSys.

[37]  Charles Farnum,et al.  Pattern-based tree attribution , 1992, POPL '92.

[38]  Guy L. Steele,et al.  Growing a Language , 1999, High. Order Symb. Comput..

[39]  Arjen van Weelden,et al.  Putting Types To Good Use , 2007 .

[40]  Ka Lok Man,et al.  Formal specification and analysis of hybrid systems , 2006 .

[41]  Richard S. Bird Using circular programs to eliminate multiple traversals of data , 2004, Acta Informatica.

[42]  Martin Odersky,et al.  Programming in Scala , 2008 .

[43]  Troy Downing,et al.  Java Virtual Machine , 1997 .

[44]  Jack J. Dongarra,et al.  Automatic translation of Fortran to JVM bytecode , 2003, Concurr. Comput. Pract. Exp..

[45]  S. Doaitse Swierstra,et al.  First-class Attribute Grammars , 2000, Informatica.

[46]  A. Rodriguez Yakushev,et al.  Towards Getting Generic Programming Ready for Prime Time , 2009 .

[47]  Darko Marinov,et al.  Automated testing of refactoring engines , 2007, ESEC-FSE '07.

[48]  Torbjörn Ekman,et al.  The jastadd extensible java compiler , 2007, OOPSLA.

[49]  Anthony M. Sloane,et al.  Decorated Attribute Grammars . Attribute Evaluation Meets Strategic Programming ( Extended Technical Report ) , 2008 .

[50]  Guido Rossum,et al.  Python Reference Manual , 2000 .

[51]  Aad Mathssen,et al.  Logical Calculi for Reasoning with Binding , 2008 .

[52]  Wilco Koorn,et al.  Substring parsing for arbitrary context-free grammars , 1991, SIGP.

[53]  Eric Van Wyk,et al.  Attribute Grammar-Based Language Extensions for Java , 2007, ECOOP.

[54]  Mohammad Ali Abam New data structures and algorithms for mobile data , 2007 .

[55]  Eelco Visser,et al.  Integration of data validation and user interface concerns in a DSL for web applications , 2009, Software & Systems Modeling.

[56]  Eelco Visser,et al.  Scannerless Generalized-LR Parsing , 1997 .

[57]  Ralf Lämmel,et al.  Typed generic traversal with term rewriting strategies , 2002, J. Log. Algebraic Methods Program..

[58]  Miguel E. Andrés,et al.  Quantitative Analysis of Information Leakage in Probabilistic and Nondeterministic Systems , 2011, ArXiv.

[59]  Terence John Parr,et al.  Enforcing strict model-view separation in template engines , 2004, WWW '04.

[60]  Brian A. Wichmann,et al.  Pascal compiler validation , 1983 .

[61]  Boris Beizer,et al.  Software Testing Techniques , 1983 .

[62]  Fahimeh Jalili,et al.  A general linear-time evaluator for attribute grammars , 1983, SIGP.

[63]  Torbjörn Ekman,et al.  Rewritable Reference Attributed Grammars , 2004 .

[64]  Donald E. Knuth,et al.  Semantics of context-free languages , 1968, Mathematical systems theory.

[65]  K. Tsirogiannis,et al.  Analysis of flow and visibility on triangulated terrains , 2011 .

[66]  Eelco Visser,et al.  Program Transformation with Scoped Dynamic Rewrite Rules , 2006, Fundam. Informaticae.

[67]  Corrado Priami,et al.  Comparison of syntactic error handling in LR parsers , 1995, Softw. Pract. Exp..

[68]  Jonathan Bachrach,et al.  The Java syntactic extender (JSE) , 2001, OOPSLA '01.

[69]  Leon Moonen,et al.  Generating robust parsers using island grammars , 2001, Proceedings Eighth Working Conference on Reverse Engineering.

[70]  Jeroen Doumen,et al.  Searching in encrypted data , 2004 .

[71]  Sebastian Erdweg,et al.  SugarJ: library-based syntactic language extensibility , 2011, OOPSLA '11.

[72]  Anton Wijs,et al.  What to do next? Analysing and optimising system behaviour in time , 2007 .

[73]  Eelco Visser,et al.  Static consistency checking of web applications with WebDSL , 2011, J. Symb. Comput..

[74]  Hasan Sözer,et al.  Architecting Fault-Tolerant Software Systems , 2009 .

[75]  Jukka Paakki,et al.  Attribute grammar paradigms—a high-level methodology in language implementation , 1995, CSUR.

[76]  Jim Melton Understanding SQL and Java Together: A Guide to SGLJ, JDBC, and Related Technologies , 2000 .

[77]  Arie van Deursen,et al.  Origin Tracking , 1993, J. Symb. Comput..

[78]  Marius Adrian Marin,et al.  An Integrated System to Manage Crosscutting Concerns in Source Code , 2008 .

[79]  Robert Grimm,et al.  Jeannie: granting java native interface developers their wishes , 2007, OOPSLA.

[80]  S. Jones,et al.  A Transformation-Based Optimiser for Haskell , 1998, Sci. Comput. Program..

[81]  J.W.C. Koorn,et al.  GSE, a generic syntax-directed editor , 1990 .

[82]  João Saraiva,et al.  Lrc - A Generator for Incremental Language-Oriented Tools , 1998, International Conference on Compiler Construction.

[83]  Thomas Reps,et al.  The Synthesizer Generator: A System for Constructing Language-Based Editors , 1988 .

[84]  Peter Lee Realistic compiler generation , 1989, Foundations of Computing Series.

[85]  E Elena Mumford,et al.  Drawing graphs for cartographic applications , 2008 .

[86]  Shigeru Chiba,et al.  OpenJava: A Class-Based Macro System for Java , 1999, Reflection and Software Engineering.

[87]  Marcin Czenko,et al.  TuLiP : reshaping trust management , 2009 .

[88]  R.S.S. O'Connor,et al.  Incompleteness & completeness : formalizing logic and analysis in type theory , 2005 .

[89]  C. J. Boogerd,et al.  Focusing Automatic Code Inspections , 2010 .

[90]  Atze Dijkstra Stepping through Haskell , 2000 .

[91]  J. Ketema,et al.  Bohm-Like Trees for Rewriting , 2006 .

[92]  Eelco Visser,et al.  Growing a language environment with editor libraries , 2011, GPCE '11.

[93]  Eric Van Wyk,et al.  Silver: An extensible attribute grammar system , 2008, Sci. Comput. Program..

[94]  J. Kwisthout,et al.  The Computational Complexity of Probabilistic Networks , 2009 .

[95]  de Hayco Jong Flexible heterogeneous software systems , 2007 .

[96]  Ondrej Lhoták,et al.  abc: an extensible AspectJ compiler , 2005, AOSD '05.

[97]  Mikhail Posypkin,et al.  Survey of Compiler Testing Methods , 2005, Programming and Computer Software.

[98]  Arie van Deursen,et al.  Building documentation generators , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[99]  Eelco Visser,et al.  Preventing injection attacks with syntax embeddings , 2007, GPCE '07.

[100]  Peter Verbaan,et al.  The Computational Complexity of Evolving Systems , 2006 .

[101]  Jean Bézivin,et al.  TCS:: a DSL for the specification of textual concrete syntaxes in model engineering , 2006, GPCE '06.

[102]  Eelco Visser,et al.  Code Generation by Model Transformation , 2008, ICMT@TOOLS.

[103]  H. Hansen Coalgebraic Modelling : Applications in Automata theory and Modal logic , 2009 .

[104]  José Proença,et al.  Synchronous Coordination of Distributed Components , 2011 .

[105]  Ivan S. Zapreev Model checking Markov chains : techniques and tools , 2008 .

[106]  Gregor Kiczales,et al.  Aspect-oriented programming , 1996, CSUR.

[107]  Xuejun Yang,et al.  Finding and understanding bugs in C compilers , 2011, PLDI '11.

[108]  B. Gebremichael-Tesfagiorgis,et al.  Expressivity of Timed Automata Models , 2006 .

[109]  Martin P. Ward Language-Oriented Programming , 1994, Softw. Concepts Tools.

[110]  Martin Fowler,et al.  Refactoring - Improving the Design of Existing Code , 1999, Addison Wesley object technology series.

[111]  Ana Sokolova,et al.  Coalgebraic analysis of probabilistic systems , 2005 .

[112]  R. Valkering Syntax Error Handling in Scannerless Generalized LR Parsers , 2007 .

[113]  Leon Moonen Lightweight impact analysis using island grammars , 2002, Proceedings 10th International Workshop on Program Comprehension.

[114]  Martin R. Neuhäußer,et al.  Model checking nondeterministic and randomly timed systems , 2010 .

[115]  Anthony M. Sloane,et al.  A Pure Object-Oriented Embedding of Attribute Grammars , 2010, LDTA.

[116]  Jurgen J. Vinju,et al.  Type-Driven Automatic Quotation of Concrete Object Code in Meta Programs , 2005, RISE.

[117]  Patrick Borras,et al.  Centaur: the system , 1988, Software Development Environments.

[118]  Eelco Visser,et al.  PIL: A Platform Independent Language for Retargetable DSLs , 2009, SLE.

[119]  Ralf Lämmel,et al.  Strategic programming meets adaptive programming , 2003, AOSD '03.

[120]  John Tang Boyland,et al.  Composing tree attributions , 1994, POPL '94.

[121]  John Tang Boyland,et al.  Remote attribute grammars , 2005, JACM.

[122]  William M. Waite,et al.  Modularity and reusability in attribute grammars , 1994, Acta Informatica.

[123]  M. T. de Berg,et al.  Algorithms for Fat Objects: Decompositions and Applications , 2004 .

[124]  Todd D. Millstein,et al.  Statically scoped object adaptation with expanders , 2006, OOPSLA '06.

[125]  Terence Parr,et al.  LL(*): the foundation of the ANTLR parser generator , 2011, PLDI '11.

[126]  Frank Budinsky,et al.  Eclipse Modeling Framework , 2003 .

[127]  Kent Beck,et al.  Test-infected: programmers love writing tests , 2000 .

[128]  Murray Hill,et al.  Yacc: Yet Another Compiler-Compiler , 1978 .

[129]  Martijn Warnier,et al.  Language based security for Java and JML , 2006 .

[130]  Eelco Visser,et al.  Declaratively programming the mobile web with Mobl , 2011, OOPSLA '11.

[131]  Bas Basten,et al.  Ambiguity Detection for Programming Language Grammars , 2011 .

[132]  Ncwm Niels Braspenning Model-based integration and testing of high-tech multi-disciplinary systems , 2008 .

[133]  Laurie Hendren,et al.  Soot: a Java bytecode optimization framework , 2010, CASCON.

[134]  Iris Loeb Natural Deduction, Sharing By Presentation , 2007 .

[135]  Eelco Visser,et al.  Fusing a Transformation Language with an Open Compiler , 2008, Electron. Notes Theor. Comput. Sci..

[136]  R. Bakhshi Gossiping Models : Formal Analysis of Epidemic Protocols , 2011 .

[137]  Tim K. Cocx,et al.  Metrics and visualisation for crime analysis and genomics , 2005 .

[138]  Eelco Visser,et al.  Separation of Concerns and Linguistic Integration in WebDSL , 2010, IEEE Software.

[139]  Ceriel J. H. Jacobs,et al.  Parsing Techniques - A Practical Guide , 2007, Monographs in Computer Science.

[140]  Mark van den Brand,et al.  Repleo: a syntax-safe template engine , 2007, GPCE '07.

[141]  Bryan Ford,et al.  Packrat Parsing: Simple, Powerful, Lazy, Linear Time , 2006, ICFP 2002.

[142]  Iain D. Craig,et al.  The Java Virtual Machine , 2006 .

[143]  P. Zoeteweij,et al.  Composing constraint solvers , 2005 .

[144]  Ralf Lämmel,et al.  Grammar Testing , 2001, FASE.

[145]  J. van den Berg,et al.  Reasoning about Java programs in PVS using JML , 2009 .

[146]  Masaru Tomita,et al.  Efficient Parsing for Natural Language: A Fast Algorithm for Practical Systems , 1985 .

[147]  Tomas Krilavicius,et al.  Hybrid Techniques for Hybrid Systems , 2006 .

[148]  Emmanuele Zambon,et al.  Towards optimal IT availability planning: methods and tools , 2011 .

[149]  Michael G. Burke,et al.  A practical method for LR and LL syntactic error diagnosis and recovery , 1987, TOPL.

[150]  David Detlefs,et al.  Inlining of Virtual Methods , 1999, ECOOP.

[151]  Simon L. Peyton Jones,et al.  Aspect-Oriented Compilers , 1999, GCSE.

[152]  S. Doaitse Swierstra,et al.  Deterministic, Error-Correcting Combinator Parsers , 1996, Advanced Functional Programming.

[153]  John Boyland,et al.  Descriptional Composition of Compiler Components , 1996 .

[154]  John B. Goodenough The Ada Compiler Validation Capability , 1981 .

[155]  Eelco Visser,et al.  Generalized type-based disambiguation of meta programs with concrete object syntax , 2005, GPCE'05.

[156]  W. Taha,et al.  Plenary talk III Domain-specific languages , 2008, 2008 International Conference on Computer Engineering & Systems.

[157]  Paul Klint,et al.  A meta-environment for generating programming environments , 1989, TSEM.

[158]  James R. Cordy,et al.  TXL: A Rapid Prototyping System for Programming Language Dialects , 1991, Comput. Lang..

[159]  Simon L. Peyton Jones,et al.  C--: A Portable Assembly Language that Supports Garbage Collection , 1999, PPDP.

[160]  Henry G. Baker,et al.  CONS should not CONS its arguments, part II: Cheney on the M.T.A. , 1995, SIGP.

[161]  Charles E. Leiserson,et al.  Programming with exceptions in JCilk , 2006, Sci. Comput. Program..

[162]  Robert Grimm,et al.  On the feasibility of an AOSD approach to Linux kernel extensions , 2008, ACP4IS@AOSD.

[163]  Charles N. Fischer,et al.  Determining the extent of lookahead in syntactic error repair , 1988, TOPL.

[164]  T. D. Vu,et al.  Semantics and applications of process and program algebra , 2007 .

[165]  G Giovanni Russello,et al.  Separation and adaptation of concerns in a shared data space , 2006 .

[166]  Alessandro Sperduti,et al.  Mining Structured Data , 2010, IEEE Computational Intelligence Magazine.

[167]  Ralf Lämmel,et al.  Deriving tolerant grammars from a base-line grammar , 2003, International Conference on Software Maintenance, 2003. ICSM 2003. Proceedings..

[168]  Frank DeRemer,et al.  A forward move algorithm for LR error recovery , 1978, POPL '78.

[169]  Paul Klint,et al.  Semantics of programming languages: a tool-oriented approach , 1999, SIGP.

[170]  Tim K. Cocx,et al.  Algorithmic tools for data-oriented law enforcement , 2009 .

[171]  Arie van Deursen,et al.  The ASF+SDF Meta-environment: A Component-Based Language Development Environment , 2001 .