Margus Freudenthal PhD defence

Klipi teostus: Mirjam Paales, 25.10.2013 6005 vaatamist Arvutiteadus Doktoritöö kaitsmine

"Simpl: A Toolkit for Domain-Specific Language Development in Enterprise 
Information Systems".

Supervisor:  Prof. Marlon Dumas

Opponents:   Prof. Marjan Mernik (University of Maribor, Slovenia)
             Prof. Kuldar Taeveter (Tallinn University of Technology)

Summary of the thesis

Domain specific languages (DSLs) are languages designed with the specific purpose of developing 
or configuring part of a software system using concepts that are close to those of the system's application domain.
Documented benefits of DSLs include increased development productivity, flexibility and maintainability,
as well as separation of business and technical aspects allowing in some cases non-technical stakeholders to
closely partake in the software development process. DSLs however comes at a potentially non-negligible cost,
that of creating and maintaining DSL implementations. These costs can be reduced by means of specialized tools
that support the creation of parsers, analyzers, code generators, pretty-printers, and other functions associated with a DSL.

This thesis deals with the problem of enabling cost-effective DSL-based development in the context of 
Enterprise Information Systems (EIS). EISs are generally built using application frameworks and middleware. 
Accordingly, it must be possible to package the DSL implementation as a module that can be called 
from either the build system or from the enterprise system itself.
Additionally, the DSL tool should be accessible to enterprise system developers with little or 
no expertise in development of programming languages and supporting tools, such as Integrated Development Environments.

The central contribution of the thesis is Simpl, a DSL toolkit designed to meet the needs of enterprise software development.
Simpl builds up on top of existing tools and programming languages, and introduces the following features:
a grammar description language that supports the generation of both the parser and the data types for representing abstract syntax trees;
support for lexer states that add context-sensitivity to lexer in a controlled manner; a pretty-printing library;
an IDE framework; and an integration layer that combines all components into a single whole and minimizes the need for boilerplate code.