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