簡體   English   中英

使用 lark 和 LALR 解析尾隨行注釋

[英]Parse trailing line comments with lark and LALR

給出以下雲雀語法和Python源代碼:

start: (TEXT _NEWLINE)+

TEXT: /[^\n]+/

COMMENT: /\/\/[^\n]*/ _NEWLINE
%ignore COMMENT

_NEWLINE: (" "* "\n")+
from lark import Lark

parser = Lark.open("grammar.lark", parser='lalr')

parser.parse("""Lorem ipsum
// line comment
Text with // trailing comment
""")

上面的解析器產生這棵樹: 實際的樹

第一行文本被正確解析,第二行(即注釋)被忽略。 但是,最后一行包含應該被忽略的注釋。

這是預期的 output: 預期樹

我意識到在我的語法中在TEXT節點中有兩個連續的斜杠是完全合法的(實際上應該引入一行注釋)。 但是,我不知道如何防止這種情況。 有什么方法可以禁止TEXT中的兩個連續斜杠或給予COMMENT終端更高的優先級?

我剛剛找到了一個似乎有效的語法:

start: (TEXT _NEWLINE)+

TEXT: /(\/?[^\n\/])+/

COMMENT: /\/\/[^\n]*/
%ignore COMMENT

_NEWLINE: (" "* COMMENT? "\n")+

我懷疑這是最優雅的解決方案,所以我很感激另一個答案或建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM