将 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);
}
我正在构建的应用程序面向讲葡萄牙语的用户。用户可以输入一个由 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);
}