mirror of https://github.com/lark-parser/lark.git
43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
#
|
|
# 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()
|