1

我正在使用 ANTLR 3

我正在尝试自定义从 Praser 引发的异常消息。

我正在使用的表达式:-

2+*3

从 ANTLR 收到的错误消息是:

no viable alternative at input '*' line 1:3

我想将此异常消息自定义为

 Invalid Expression Term line 1:3

我试图覆盖GetErrorMessage(RecognitionException e, string[] tokenNames)解析器的方法,但无法弄清楚如何自定义此描述。与这些类似,我还必须自定义其他异常消息。

任何人都可以为我提供一些如何处理此问题的初步指导。

我正在使用 c# 4.0

4

3 回答 3

2

您可以GetErrorMessageBaseRecognizer. 所有消息模板都包含在此方法中。

https://github.com/antlr/antlr3/blob/master/runtime/CSharp3/Sources/Antlr3.Runtime/BaseRecognizer.cs#L275

于 2013-06-05T13:18:54.793 回答
1

捕获NoViableAltException和任何其他RecognitionException派生异常并抛出您自己的异常。行号和列号可以从RecognitionException.Line和中获取RecognitionException.CharPositionInLine

于 2013-06-05T12:14:34.677 回答
0

我已经以这种方式实现了它可能也有利于其他人:-

在我的解析器类中:-

public override string GetErrorMessage(RecognitionException e, string[] tokenNames)
    {
            String msg = string.Empty;
            if (e is NoViableAltException)
            {
                msg = "Invalid Expression Term";
            }
            else if (e is UnwantedTokenException)
            {
                msg = "Bracket Mismatch";
            }
            else if (e is MissingTokenException)
            {
                msg = "Invalid Parameter";
            }
            else
            {
                base.GetErrorMessage(e, tokenNames);
            }
            return msg;
    }
于 2013-06-06T06:48:05.880 回答