在 .bnf 中固定和恢复(解析)

Fuc*_*chs 9 parsing intellij-idea bnf intellij-plugin grammar-kit

我已经在互联网上进行了广泛的搜索(现在至少有半天了),但似乎找不到所需的答案。

目前我正在尝试为.bnf-file具有自定义语言支持的 IntelliJ 插件创建一个。

一些教程提到了{pin=1},{pin=2}和的存在{recoverWhile=xyz},但我没有找到关于它们用途的任何真正解释,如果还有其他我应该知道的事情(也许 a{pin=3}也存在?)。

那么有人可以告诉我这些标志、方法或它们的名称究竟是什么,以及如何在我的 .bnf 中使用它们吗?

谢谢你的帮助和最好的问候,Fuchs

Arg*_*b32 13

这些属性解释如下:

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 和 recoveryWhile 属性用于从错误中恢复解析器。

Pin指定规则的一部分(通过索引或字面意思)在成功解析规则后被视为成功。在示例中:

expr ::= expr1 "+" expr2 {pin=1}
Run Code Online (Sandbox Code Playgroud)

如果匹配 expr1,则整个规则将被视为成功,解析器将尝试匹配其余规则。

如果 pin=2 规则将在匹配“+”后被认为成功,如果 expr1 或“+”不匹配则失败。

RecoverWhile属性指定解析规则后跳过的位置。与其成功无关。例如

{recoverWhile=expr_recover}
expr_recover ::= !(";" | ".")
Run Code Online (Sandbox Code Playgroud)

将跳过“;”之前的所有输入 或者 ”。”。即解析器将从“;”开始匹配下一条规则 或者 ”。”。