簡體   English   中英

固定並恢復在.bnf(解析)中

[英]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.

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