gpt4 book ai didi

parsing - 如何更正 token ,然后从ANTLR中的失败谓词中恢复?

转载 作者:行者123 更新时间:2023-12-03 07:55:18 24 4
gpt4 key购买 nike

我有一个使用谓词测试创建AST的ANTLR规则。看起来像这样:

checked_rule
: kwd=keyword name=name nl { noBadChars($name.start.getText()) }?
-> ^(...)
;

如果 $name有一些错误字符,那么我想出错。到目前为止,我正在这样做:
catch [FailedPredicateException fpe] {
BadNameException error = new BadNameException(input, $kwd.text, $name.start.getText());
reportError(error);
recover(input, error);
retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), error);
}

最后一点是从ANTLR生成的代码中复制的,所以也许这不是正确的方法。

无论如何,我想做的是通过更正名称并再次尝试规则来从错误中恢复。用伪代码,我想说:
catch [FailedPredicateException fpe] {
...
reportError(...)
input.LT(-2) = removedBadChars($name.start.getText());
return checked_rule();
}

因此错误仍然会传给用户,但我们将继续进行解析,并尽可能减少干扰。我怎样才能做到这一点?

最佳答案

为什么不简单地做:

checked_rule
: kwd=keyword name=name nl
{
if(!noBadChars($name.start.getText())) {
// print/report error
String withoutBadChars = removedBadChars($name.start.getText());
$name.start.setText(withoutBadChars);
// and continue happily ever after...
}
}
-> ^(...)
;

关于parsing - 如何更正 token ,然后从ANTLR中的失败谓词中恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com