# # This example demonstrates scanless parsing using the earley_nolex frontend # # Using a lexer for configuration files is tricky, because values don't # have to be surrounded by delimiters. # In this example with skip lexing 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. It is less powerful than the scanless approach, # but it can handle some ambiguity in lexing and it's much faster since it uses LALR(1). # 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=None) def test(): sample_conf = """ [bla] a=Hello this="that",4 """ r = parser.parse(sample_conf) print (r.pretty()) if __name__ == '__main__': test()