繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM