[英]Pin & recoverWhile in a .bnf (Parsing)
我已經遠程搜索了互聯網(現在至少半天),我似乎無法找到所需的答案。
目前我正在嘗試為自定義語言支持的IntelliJ-Plugin創建一個.bnf-file
。
一些教程提到了{pin=1}
, {pin=2}
和{recoverWhile=xyz}
,但我沒有找到任何關於它們用途的真實解釋,如果還有其他事情我應該知道(也許a {pin=3}
也存在?)。
那么有人可以告訴我究竟是什么標志,方法或者它們被稱為是什么,以及如何在我的.bnf中使用它們,好嗎?
感謝您的幫助和最好的問候,Fuchs
這些屬性在這里解釋:
https://github.com/JetBrains/Grammar-Kit/blob/master/HOWTO.md#22-using-recoverwhile-attribute https://github.com/JetBrains/Grammar-Kit/blob/master/TUTORIAL.md
但用法並非微不足道。 一個好主意是使用實時預覽來玩它。
我的理解:
Pin和recoverWhile屬性用於從錯誤中恢復解析器。
Pin在成功解析之后指定規則的一部分(通過索引或字面),其中規則認為是成功的。 在示例中:
expr ::= expr1 "+" expr2 {pin=1}
如果匹配expr1,則整個規則將被視為成功,並且解析器將嘗試與其余規則匹配。
如果pin = 2,則匹配“+”后規則將被視為成功,如果expr1或“+”不匹配則將失敗。
RecoverWhile屬性指定解析規則后要跳過的位置。 獨立於其成功。 例如
{recoverWhile=expr_recover}
expr_recover ::= !(";" | ".)
將在“;”之前跳過所有輸入 要么 ”。”。 即解析器將開始匹配來自“;”的下一個規則 要么 ”。”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.