将 ANTLR 错误句子从英语翻译成另一种语言的最佳方法是什么?

What's the best way to translate ANTLR errors sentences from english to another language?

我正在构建的应用程序面向讲葡萄牙语的用户。用户可以输入一个由 ANTLR 解释的句子。为了向用户提供他们输入的最佳反馈,我需要 以葡萄牙语 .

显示错误

我没有找到可以像在其他一些库中那样更改错误标记的配置或文件。

您不能更改来自 ANTLR 生成的解析器的 errors/exception 的语言。您将需要自己捕获这些异常,并(为您的听众)制作人类可读的消息。 ANTLR 的异常足以让你做到这一点:行号、列索引、标记:一切都可供你使用。

随着我深入搜索,最好的替代方法是重写 DefaultErrorStrategy 上的方法并按照您想要的方式构建消息。

您可以为您的解析器设置一个错误处理程序,它应该是您新的自定义错误策略。

typescript DefaultErrorStrategy

这是我使用自定义翻译覆盖 reportInputMismatch 方法:

reportInputMismatch(recognizer: Parser, e: InputMismatchException): void {
    const expected = e.expectedTokens;
    const expectedString = expected ? this.getFriendlyExpectedTokens(expected, recognizer.vocabulary) : '';
    const input = this.getTokenErrorDisplay(e.getOffendingToken(recognizer));
    const msg = `entrada ${input} não compatível, espera-se ${expectedString}`;
    this.notifyErrorListeners(recognizer, msg, e);
}