[英]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
""")
第一行文本被正確解析,第二行(即注釋)被忽略。 但是,最后一行包含應該被忽略的注釋。
我意識到在我的語法中在TEXT
節點中有兩個連續的斜杠是完全合法的(實際上應該引入一行注釋)。 但是,我不知道如何防止這種情況。 有什么方法可以禁止TEXT
中的兩個連續斜杠或給予COMMENT
終端更高的優先級?
我剛剛找到了一個似乎有效的語法:
start: (TEXT _NEWLINE)+
TEXT: /(\/?[^\n\/])+/
COMMENT: /\/\/[^\n]*/
%ignore COMMENT
_NEWLINE: (" "* COMMENT? "\n")+
我懷疑這是最優雅的解決方案,所以我很感激另一個答案或建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.