19e57058d4
EBNF as input, and outputs memoizing (Packrat) PEG parsers in Python. Grako can also compile a grammar stored in a string into a Grammar object that can be used to parse any given input, much like the re module does with regular expressions. Grako is different from other PEG parser generators: * Generated parsers use Python's very efficient exception-handling system to backtrack. Grako generated parsers simply assert what must be parsed. There are no complicated if-then-else sequences for decision making or backtracking. Memoization allows going over the same input sequence several times in linear time. * Positive and negative lookaheads, and the cut element (with its cleaning of the memoization cache) allow for additional, hand-crafted optimizations at the grammar level. * Delegation to Python's re module for lexemes allows for (Perl-like) powerful and efficient lexical analysis. * The use of Python's context managers considerably reduces the size of the generated parsers for code clarity, and enhanced CPU-cache hits. * Include files, rule inheritance, and rule inclusion give Grako grammars considerable expressive power. * Automatic generation of Abstract Syntax Trees and Object Models, along with Model Walkers and Code Generators make analysis and translation approachable.
24 lines
1.4 KiB
Text
24 lines
1.4 KiB
Text
Grako (for grammar compiler) is a tool that takes grammars in a variation of
|
|
EBNF as input, and outputs memoizing (Packrat) PEG parsers in Python.
|
|
|
|
Grako can also compile a grammar stored in a string into a Grammar object that
|
|
can be used to parse any given input, much like the re module does with
|
|
regular expressions.
|
|
|
|
Grako is different from other PEG parser generators:
|
|
* Generated parsers use Python's very efficient exception-handling system to
|
|
backtrack. Grako generated parsers simply assert what must be parsed. There
|
|
are no complicated if-then-else sequences for decision making or
|
|
backtracking. Memoization allows going over the same input sequence several
|
|
times in linear time.
|
|
* Positive and negative lookaheads, and the cut element (with its cleaning of
|
|
the memoization cache) allow for additional, hand-crafted optimizations at
|
|
the grammar level.
|
|
* Delegation to Python's re module for lexemes allows for (Perl-like) powerful
|
|
and efficient lexical analysis.
|
|
* The use of Python's context managers considerably reduces the size of the
|
|
generated parsers for code clarity, and enhanced CPU-cache hits.
|
|
* Include files, rule inheritance, and rule inclusion give Grako grammars
|
|
considerable expressive power.
|
|
* Automatic generation of Abstract Syntax Trees and Object Models, along with
|
|
Model Walkers and Code Generators make analysis and translation approachable.
|