kirancodes.me
To Proof Maintenance & Beyond!

Zippy LL(1) parsing with derivatives

Romain Edelmann, Jad Hamza, Viktor Kuncak

Abstract

In this paper, we present an efficient, functional, and formally verified parsing algorithm for LL(1) context-free expressions based on the concept of derivatives of formal languages. Parsing with derivatives is an elegant parsing technique, which, in the general case, suffers from cubic worst-case time complexity and slow performance in practice. We specialise the parsing with derivatives algorithm to LL(1) context-free expressions, where alternatives can be chosen given a single token of lookahead. We formalise the notion of LL(1) expressions and show how to efficiently check the LL(1) property. Next, we present a novel linear-time parsing with derivatives algorithm for LL(1) expressions operating on a zipper-inspired data structure. We prove the algorithm correct in Coq and present an implementation as a part of Scallion, a parser combinators framework in Scala with enumeration and pretty printing capabilities.

BibTeX
@inproceedings{Edelmann-al:PLDI20,
  author    = {Romain Edelmann and
               Jad Hamza and
               Viktor Kuncak},
  title     = {Zippy {LL(1)} parsing with derivatives},
  booktitle = {PLDI},
  pages     = {1036--1051},
  publisher = {{ACM}},
  year      = {2020},
}

Related papers