在 .bnf 中固定和恢复(解析)
Pin & recoverWhile in a .bnf (Parsing)
我在互联网上到处搜索(现在至少半天了),但似乎找不到所需的答案。
目前我正在尝试为具有自定义语言支持的 IntelliJ 插件创建 .bnf-file
。
一些教程提到了 {pin=1}
、{pin=2}
和 {recoverWhile=xyz}
的存在,但我没有找到任何关于它们用途的真正解释,如果还有其他事情我应该知道(也许 {pin=3}
也存在?)。
有人能告诉我这些标志、方法或它们的名称到底是什么,以及如何在我的 .bnf 中使用它们吗?
感谢您的帮助和最诚挚的问候,
福克斯
这些属性在这里解释:
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 匹配,则整个规则将被视为成功,解析器将尝试匹配其余规则。
if pin=2 规则在匹配“+”后将被认为成功,如果 expr1 或“+”不匹配则失败。
RecoverWhile 属性指定解析规则后要跳过的位置。独立于它的成功。
例如
{recoverWhile=expr_recover}
expr_recover ::= !(";" | ".")
将跳过“;”之前的所有输入要么 ”。”。 IE。解析器将从“;”开始匹配下一条规则或“.”。
我在互联网上到处搜索(现在至少半天了),但似乎找不到所需的答案。
目前我正在尝试为具有自定义语言支持的 IntelliJ 插件创建 .bnf-file
。
一些教程提到了 {pin=1}
、{pin=2}
和 {recoverWhile=xyz}
的存在,但我没有找到任何关于它们用途的真正解释,如果还有其他事情我应该知道(也许 {pin=3}
也存在?)。
有人能告诉我这些标志、方法或它们的名称到底是什么,以及如何在我的 .bnf 中使用它们吗?
感谢您的帮助和最诚挚的问候, 福克斯
这些属性在这里解释:
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 匹配,则整个规则将被视为成功,解析器将尝试匹配其余规则。
if pin=2 规则在匹配“+”后将被认为成功,如果 expr1 或“+”不匹配则失败。
RecoverWhile 属性指定解析规则后要跳过的位置。独立于它的成功。 例如
{recoverWhile=expr_recover}
expr_recover ::= !(";" | ".")
将跳过“;”之前的所有输入要么 ”。”。 IE。解析器将从“;”开始匹配下一条规则或“.”。