|
- #
- # This example demonstrates scanless parsing using the dynamic-lexer earley frontend
- #
- # Using a lexer for configuration files is tricky, because values don't
- # have to be surrounded by delimiters. Using a standard lexer for this just won't work.
- #
- # In this example we use a dynamic lexer and let the Earley parser resolve the ambiguity.
- #
- # Future versions of lark will make it easier to write these kinds of grammars.
- #
- # Another approach is to use the contextual lexer with LALR. It is less powerful than Earley,
- # but it can handle some ambiguity when lexing and it's much faster.
- # See examples/conf.py for an example of that approach.
- #
-
-
- from lark import Lark
-
- parser = Lark(r"""
- start: _NL? section+
- section: "[" NAME "]" _NL item+
- item: NAME "=" VALUE _NL
- VALUE: /./*
- %import common.CNAME -> NAME
- %import common.NEWLINE -> _NL
-
- %import common.WS_INLINE
- %ignore WS_INLINE
- """, lexer='dynamic')
-
- def test():
- sample_conf = """
- [bla]
-
- a=Hello
- this="that",4
- """
-
- r = parser.parse(sample_conf)
- print (r.pretty())
-
- if __name__ == '__main__':
- test()
|