Earley parser, capable of parsing any context-free grammar
Implements SPPF, for efficient parsing and storing of ambiguous grammars.
LALR(1) parser, limited in power of expression, but very efficient in space and performance (O(n)).
Implements a parse-aware lexer that provides a better power of expression than traditional LALR implementations (such as ply).
EBNF-inspired grammar, with extra features (See: Grammar Reference)
Builds a parse-tree (AST) automagically based on the grammar
Stand-alone parser generator - create a small independent parser to embed in your project. (read more)
Flexible error handling by using an interactive parser interface (LALR only)
Automatic line & column tracking (for both tokens and matched rules)
Automatic terminal collision resolution
Grammar composition - Import terminals and rules from other grammars
Standard library of terminals (strings, numbers, names, etc.)
Unicode fully supported
Extensive test suite
Type annotations (MyPy support)
Import rules and tokens from other Lark grammars, for code reuse and modularity.
Support for external regex module (see here)
Import grammars from Nearley.js (read more)
Visualize your parse trees as dot or png files (see_example)
Automatic reconstruction of input from parse-tree (see examples)