Packrat Parsing: Simple, Powerful, Lazy, Linear Time
Bryan Ford
Abstract
Packrat parsing is a novel technique for implementing parsers in a lazy functional programming language. A packrat parser provides the power and flexibility of top-down parsing with backtracking and unlimited lookahead, but nevertheless guarantees linear parse time. Any language defined by an LL(k) or LR(k) grammar can be recognized by a packrat parser, in addition to many languages that conventional linear-time algorithms do not support. This additional power simplifies the handling of common syntactic idioms such as the widespread but troublesome longest-match rule, enables the use of sophisticated disambiguation strategies such as syntactic and semantic predicates, provides better grammar composition properties, and allows lexical analysis to be integrated seamlessly into parsing. Yet despite its power, packrat parsing shares the same simplicity and elegance as recursive descent parsing; in fact converting a backtracking recursive descent parser into a linear-time packrat parser often involves only a fairly straightforward structural change. This paper describes packrat parsing informally with emphasis on its use in practical applications, and explores its advantages and disadvantages with respect to the more conventional alternatives.
Create a lesson
Related papers
Product Structure Meets Track Layouts
Michael A. Bekos, Giordano Da Lozzo, Petr Hliněný et al.
The Randomized Query Complexity of Finding Minimal Elements in Bounded-Width Posets
Luyao Fan, Jiayang Zou, Jiayang Gao et al.
On the Instance Optimality of Bidirectional Dijkstra's Algorithm
Matic Požar
Hadamard Flattening and Gaussian Pooling Sketch for Least Squares with Coordinate-wise Guarantee
Zhao Song, Lichen Zhang
Cheaper by the Batch: Shared Traversal for Genotype Graph Editing
Aaron Li, Yifan Li, Drew DeHaas et al.
Unpublished Draft: A Post-Processing Approach to Fairness in Tie-Aware Rankings
Somya Nigam, Johan Springael, Kenneth Sörensen