11

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

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

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

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

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

4

1 回答 1

16

这些属性在这里解释:

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 ::= !(";" | ".")

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

于 2018-02-09T15:32:21.127 回答