我已经搜索了互联网,至少每天至少半天(,我似乎找不到所需的答案。
目前,我正在尝试为具有自定义语言支持的Intellij-Plugin创建.bnf-file
。
一些教程提到了{pin=1}
,{pin=2}
和{recoverWhile=xyz}
的存在,但是我没有找到有关其用途的任何真实解释,如果我还应该知道任何其他事情(也许也存在{pin=3}
?(。p>所以有人可以告诉我这些标志,方法或它们所谓的究竟是什么,以及如何在我的.bnf中使用它们?
感谢您的帮助和最好的问候福克斯
这些属性在这里说明:
https://github.com/jetbrains/grammar-kit/blob/master/howto.md#22-using-recoverwhile-attributehttps://github.com/jetbrains/grammar-kit/blob/master/tutorial.md
但是用法并非微不足道。一个好主意是使用Live Preview播放它。
我的理解:
PIN和恢复属性用于从错误中恢复解析器。
PIN 在成功解析该规则认为成功后,指定了规则的一部分(通过索引或字面意义上(。在示例中:
expr ::= expr1 "+" expr2 {pin=1}
如果匹配expr1,则整个规则将被视为成功,而解析器将尝试匹配其余的。
如果PIN = 2,则在匹配" "之后,规则将被视为成功。如果expr1或" "将失败。不匹配。
恢复以属性指定在解析规则后跳过的位置。独立于其成功。例如
{recoverWhile=expr_recover}
expr_recover ::= !(";" | ".")
将跳过所有输入。或"。"。IE。解析器将开始匹配"; quot"的下一个规则。或"。"。