Lark 是一个 Python 解析工具包,专注于人体工程学、性能和模块化。
Lark 可以解析所有上下文无关语言。简而言之,这意味着它能够解析几乎所有编程语言,在某种程度上也能够解析大多数自然语言。
它是给谁用的?
初学者:Lark 对于实验非常友好。它可以解析您输入的任何语法,无论多么复杂或模糊,而且效率很高。它还为您构造一个带注释的解析树,仅使用语法和输入,并为您提供了方便且灵活的工具来处理该解析树。
专家:Lark 实现了 Earley(SPPF) 和 LALR(1),以及几种不同的词法分析器,因此您可以根据您的要求在功率和速度之间进行权衡。它还提供了各种复杂的功能和实用程序。
它能做什么?
还有更多功能。继续阅读并找出答案!
最重要的是,Lark 可以节省你的时间,让你不再为解析而头疼。
$ pip install lark --upgrade
Lark 没有任何依赖。
Lark 为其语法文件(*.lark)提供语法高亮:
这些是Lark的其他语言的实现。他们接受 Lark 语法,并提供类似的实用程序。
这是一个解析“Hello, World!”的小程序。 (或任何其他类似的短语):
from lark import Lark
l = Lark ( '''start: WORD "," WORD "!"
%import common.WORD // imports from terminal library
%ignore " " // Disregard spaces in text
''' )
print ( l . parse ( "Hello, World!" ) )
输出是:
Tree ( start , [ Token ( WORD , 'Hello' ), Token ( WORD , 'World' )])
请注意,标点符号不会出现在结果树中。会被飞书自动过滤掉。
Lark 非常擅长处理歧义。这是解析短语“fruit flies likebananas”的结果:
阅读此处的代码,并在此处查看更多示例。
请在此处查看完整的功能列表
Lark 又快又轻(越低越好)
请查看 JSON 教程,了解有关如何进行比较的更多详细信息。
如需全面的第 3 方基准测试,请查看 Python Parsing Benchmarks 存储库。
图书馆 | 算法 | 语法 | 建树? | 支持歧义吗? | 可以处理所有CFG吗? | 行/列跟踪 | 生成独立的 |
---|---|---|---|---|---|---|---|
云雀 | 厄利/LALR(1) | EBNF | 是的! | 是的! | 是的! | 是的! | 是的! (仅限 LALR) |
层数 | 拉鲁尔(1) | BNF | 不 | 不 | 不 | 不 | 不 |
Py解析 | 聚乙二醇 | 组合器 | 不 | 不 | 不* | 不 | 不 |
香菜 | 聚乙二醇 | EBNF | 不 | 不 | 不* | 不 | 不 |
吝啬 | 聚乙二醇 | EBNF | 是的 | 不 | 不* | 不 | 不 |
ANTLR | 二(*) | EBNF | 是的 | 不 | 是的? | 是的 | 不 |
(* PEG 无法处理非确定性语法。此外,根据维基百科,PEG 是否真的可以解析所有确定性 CFG 仍然没有答案)
完整列表
Lark 使用 MIT 许可证。
(独立工具位于 MPL2 下)
Lark 接受 Pull 请求。请参见如何开发 Lark
非常感谢迄今为止做出贡献的所有人:
如果您喜欢 Lark,希望看到我们成长,请考虑赞助我们!
有关代码的问题最好在 gitter 或问题中提出。
对于其他任何问题,可以通过电子邮件 erezshin at gmail com 与我联系。
——埃雷兹