1# Features 2 3## Main Features 4 - Earley parser, capable of parsing any context-free grammar 5 - Implements SPPF, for efficient parsing and storing of ambiguous grammars. 6 - LALR(1) parser, limited in power of expression, but very efficient in space and performance (O(n)). 7 - Implements a parse-aware lexer that provides a better power of expression than traditional LALR implementations (such as ply). 8 - EBNF-inspired grammar, with extra features (See: [Grammar Reference](grammar.md)) 9 - Builds a parse-tree (AST) automagically based on the grammar 10 - Stand-alone parser generator - create a small independent parser to embed in your project. ([read more](tools.html#stand-alone-parser)) 11 - Flexible error handling by using an interactive parser interface (LALR only) 12 - Automatic line & column tracking (for both tokens and matched rules) 13 - Automatic terminal collision resolution 14 - Standard library of terminals (strings, numbers, names, etc.) 15 - Unicode fully supported 16 - Extensive test suite 17 - MyPy support using type stubs 18 - Python 2 & Python 3 compatible 19 - Pure-Python implementation 20 21[Read more about the parsers](parsers.md) 22 23## Extra features 24 25 - Import rules and tokens from other Lark grammars, for code reuse and modularity. 26 - Support for external regex module ([see here](classes.html#using-unicode-character-classes-with-regex)) 27 - Import grammars from Nearley.js ([read more](tools.html#importing-grammars-from-nearleyjs)) 28 - CYK parser 29 - Visualize your parse trees as dot or png files ([see_example](https://github.com/lark-parser/lark/blob/master/examples/fruitflies.py)) 30 31 32### Experimental features 33 - Automatic reconstruction of input from parse-tree (see examples) 34 35### Planned features (not implemented yet) 36 - Generate code in other languages than Python 37 - Grammar composition 38 - LALR(k) parser 39 - Full regexp-collision support using NFAs 40