mirror of https://github.com/lark-parser/lark.git
43 lines
1.0 KiB
Python
43 lines
1.0 KiB
Python
#
|
|
# This example demonstrates 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.
|
|
#
|
|
# 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_lalr.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
|
|
""", parser="earley")
|
|
|
|
def test():
|
|
sample_conf = """
|
|
[bla]
|
|
|
|
a=Hello
|
|
this="that",4
|
|
empty=
|
|
"""
|
|
|
|
r = parser.parse(sample_conf)
|
|
print (r.pretty())
|
|
|
|
if __name__ == '__main__':
|
|
test()
|