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 與我聯繫。
——埃雷茲