SLY is a 100% Python implementation of the lex and yacc tools commonly used to
write parsers and compilers. Parsing is based on the same  LALR(1) algorithm
used by many yacc tools.

SLY provides very extensive error reporting and diagnostic information
to assist in parser construction. The original implementation was
developed for instructional purposes. As a result, the system tries to
identify the most common types of errors made by novice users.

SLY provides full support for empty productions, error recovery,
precedence specifiers, and moderately ambiguous grammars.

SLY uses various Python metaprogramming features to specify lexers and
parsers. There are no generated files or extra steps involved.
