# Features

## Main Features

- 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)

- Pure-Python implementation

Read more about the parsers

## Extra features

- 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)

- CYK parser

- Visualize your parse trees as dot or png files (see_example)

- Automatic reconstruction of input from parse-tree (see examples)

- Use Lark grammars in Julia and Javascript.