Research
Table of Contents
Papers
LRGrep: Selecting Error Messages for LR parsers
In December 2024, I defended my PhD. I studied an approach to extending LR parsers with good error messages.
When failing, an LR parser produces a stack, from which one can extract a stack trace, much like with a general-purpose programming language. Printing a stack trace to the end-user (the user of the parser) would not be very friendly, but my idea was that studying this stack can reveal relevant information for explaining errors. More precisely, simulating reductions is an efficient way to walk up the stack to points of interest, which can be used to classify problems and generate explanations.
The end result is a DSL for specifying patterns to analyze the stack and a suite of tools for working with these patterns: a compiler for recognizing them, an instrumented interpreter for going from a stack trace to a pattern, and static analyses for guaranteeing the exhaustivity of error coverage and/or for fuzzing the parser.
It seems to work quite well in practice. I validated the approach by crafting precise error messages for the OCaml language and replicating Elm syntax error messages (turning their hand-crafted parser into a declarative specification).
Github - Main application
Github - Instrumented OCaml parser
Manuscript
Presentation
Faster reachability analysis for LR(1) parsers
With François Pottier.
The goal is to improve the performance of the menhir --list-errors
feature to enable new applications. This implies efficiently solving the reachability problem for LR(1) parsers: given an automaton state s and a terminal t, is there an input sentence that lets us reach this state s with the lookahead t?
Tail Modulo Cons (JFLA 2021)
With Basile Clément and Gabriel Scherer.
We added tail-modulo-constructor optimization to OCaml.
Merlin: A Language Server for OCaml (Experience Report, ICFP 2018)
With Thomas Refis and Gabriel Scherer.
Merlin does interactive analysis of OCaml programs to provide IDE services that need semantic knowledge: completion and type-checking of identifiers, locating definitions, etc.
Workshop Work
Nottui & Lwd - A friendly UI toolkit for the ML programmer
Lwd is a flavor of reactive programming that integrates well with OCaml. Nottui is a terminal UI (like ncurses) in pure OCaml, built on top of Notty, that uses Lwd to handle interactions.
CAMLroot: revisiting the OCaml FFI (01/2019, JFLA 2019)
Some lessons on how to make safer bindings between C and OCaml were learned from the implementation of an OCaml binding to the Qt framework.
Paper, Slides (French) presented to a Gallium seminar on 21-01-2019, Slides (English)
Wall (OCaml Workshop 2018)
TODO
Inuit (OCaml Workshop 2016)
Modular implicits (Proceedings ML/OCaml 2014)
Modular implicits is an extension of OCaml that brings ad-hoc polymorphism to the language. It is an alternative to Scala's implicit and Haskell's type classes, better suited to ML-style module systems.
TODO: Poster at PPM 2016?
Merlin (OCaml Workshop 2013)
TODO
OCaml Users in Paris
TODO
Academic Service
- OCaml Workshop, Steering Committee
- JFLA 2022 Program Committee
- OCaml 2021 Program Chair
- ML 2021 Program Committee
- OCaml 2017 Program Committee