|
- Working with the SPPF
- =====================
-
- When parsing with Earley, Lark provides the ``ambiguity='forest'`` option
- to obtain the shared packed parse forest (SPPF) produced by the parser as
- an alternative to it being automatically converted to a tree.
-
- Lark provides a few tools to facilitate working with the SPPF. Here are some
- things to consider when deciding whether or not to use the SPPF.
-
- **Pros**
-
- - Efficient storage of highly ambiguous parses
- - Precise handling of ambiguities
- - Custom rule prioritizers
- - Ability to handle infinite ambiguities
- - Directly transform forest -> object instead of forest -> tree -> object
-
- **Cons**
-
- - More complex than working with a tree
- - SPPF may contain nodes corresponding to rules generated internally
- - Loss of Lark grammar features:
-
- - Rules starting with '_' are not inlined in the SPPF
- - Rules starting with '?' are never inlined in the SPPF
- - All tokens will appear in the SPPF
-
- SymbolNode
- ----------
-
- .. autoclass:: lark.parsers.earley_forest.SymbolNode
- :members: is_ambiguous, children
-
- PackedNode
- ----------
-
- .. autoclass:: lark.parsers.earley_forest.PackedNode
- :members: children
-
- ForestVisitor
- -------------
-
- .. autoclass:: lark.parsers.earley_forest.ForestVisitor
- :members: visit, visit_symbol_node_in, visit_symbol_node_out,
- visit_packed_node_in, visit_packed_node_out,
- visit_token_node, on_cycle, get_cycle_in_path
-
- ForestTransformer
- -----------------
-
- .. autoclass:: lark.parsers.earley_forest.ForestTransformer
- :members: transform, transform_symbol_node, transform_intermediate_node,
- transform_packed_node, transform_token_node
-
- TreeForestTransformer
- ---------------------
-
- .. autoclass:: lark.parsers.earley_forest.TreeForestTransformer
- :members: __default__, __default_token__, __default_ambig__
-
- handles_ambiguity
- -----------------
-
- .. autodecorator:: lark.parsers.earley_forest.handles_ambiguity
|