Eelco Visser

Prospective PhD Students & Postdocs
I'm looking for PhD students, postdocs, and student programmers. See my projects and research topics for an impression of my interests. See the PL group's open positions for what is available right now. Send me an email with CV and motivation/research interests, also to explore future opportunities.
Expressing Intent
How to enable software engineers to express intent directly in terms of the concepts of a domain of interest (and get the corresponding implementation for free)? Most of my (group's) research is related, one way or another, to that question, and includes: design of meta-languages for language design (to support the development of new languages), language theory and implementation techniques (such as parsing, name resolution, constraint solving, rewriting), design of domain-specific languages for particular domains (such as web programming, build systems, digital printers), evaluation of these languages in applications (such as WebLab,
Declare Your Language with Spoofax
How to enable software engineers to design and implement (domain-specific) programming languages? In the Spoofax Language Workbench project we explore solutions and integrate these in a programming environment for the development of languages using high-level declarative meta-languages for syntax, static semantics, dynamic semantics, program analysis, and program transformation.
Name Resolution with Scope Graphs
How to formalize the name binding rules of programming languages? We are developing scope graphs, a uniform framework for the representation of a wide range of name binding patterns in programming languages. A general theory of name resolution interprets scope graphs to resolve references to their corresponding declarations. Scope graphs are a core component of the Statix language for type system specification.
Incremental Software Pipelines with PIE
How to declaratively specify software pipeline for fine and coarse grained tasks and ensure their sound incremental execution? PIE is a domain-specific language and runtime for the specification of software pipelines and their incremental execution. PIE provides an expressive language for defining pipelines including dynamic dependencies, and guarantees efficient, precise and scalable incremental execution.
Programming Education at Scale with WebLab
How to scale programming education to large numbers of students? How to scale delivery of many assignments and exam questions for a course and still provide feedback to students? WebLab provides a web-based learning environment for programming education that supports lab assignments and proctored digital exams. WebLab is currently used in 12 courses at TU Delft.
Inaugural speech 2014


  • Compiler Construction

    In this course students study declarative meta-languages for compiler construction such as context-free grammars, scope graphs, type constraints, and strategic rewriting. Using this knowledge they build a compiler and IDE for MiniJava using the Spoofax language workbench.

    Master CS | CS4200 | Q1+Q2 | Info
  • Language Engineering Project

    In this course students explore (some aspect) of the design and implementation of a (domain-specific) programming language by building an implementation in Spoofax.

    Master CS | IN4333 | Q4 | Info
  • Seminar Programming Languages

    In this seminar we discuss papers from the programming languages literature.

    Master CS | CS4130 | Q1 | Info
  • Thesis Projects

    I supervise bachelor and master thesis projects in computer science at TU Delft. See my research areas to get an impression of my interests. Send me an email if you are interested in doing a project with me.

    Bachelor & Master CS | CSE3000, IN5000 | Q1-4 | Info
  • Other PL courses | Older courses

Upcoming Events

Latest News

Building 28 at Van Mourik Broekmanweg
Static Semantics

Goal: Enable language designers to declaratively specify the name binding and typing rules of programming languages and automatically derive (efficient and incremental) type checkers from such specifications. Develop high-level model for representation of name binding rules and operations such as name resolution and refactoring, depending on name binding.

Techniques: name binding and resolution with scope graphs, constraints, constraint solving.

Languages: Statix, NaBL2, NaBL.

Dynamic Semantics

Goal: Identify the building blocks of the dynamic semantics of programming languages to create a specification language that can be used to concisely define a wide range of languages, derive efficient execution engines, and serve as the basis for automatic type soundness proofs.

Techniques: operational semantics, definitional interpreters, abstract machines, partial evaluation, intrinsically-typed abstract syntax, scopes and frames.

Languages: Dynamix, DynSem.

Syntax Definition and Parsing

Goal: Declarative specification of all syntactic aspects of a programming language in a single source from whcih a wide range of syntactic processors can be derived.

Techniques: character-level grammars, modular grammars, scannerless parsing, incremental parsing, declarative disambiguation rules, pretty-printing, syntax-aware editors, syntactic code completion.

Languages: SDF3.

Tools: JSGLR.

Data Modeling

Goal: Declarative specification of data models and their operations, generation of efficient and incremental implementations from these data models.

Techniques: data persistence, object-relational modeling, incremental computation.

Languages: WebDSL, IceDust.


Goal: Support testing of language processors. Generation of representative tests from language definitions.

Languages: SPT.