相关疑难解决方法(0)

有没有办法轻松调整ANTLR4的错误信息?

Currenlty我的工作我自己的语法,我想对特定的错误消息NoViableAlternativeInputMismatchUnwantedTokenMissingTokenLexerNoViableAltException

我已经扩展Lexer.class并覆盖了notifyListeners将默认错误消息更改token recognition error at:为我自己的错误消息。同样,我扩展DefaultErrorStrategy并覆盖了所有报告方法,例如reportNoViableAlternative, reportInputMismatch, reportUnwantedToken, reportMissingToken

所有这些的目的是更改消息,这些消息将传递给syntaxError()listener的方法ANTLRErrorListener

这是扩展的一个小例子Lexer.class

    @Override
    public void notifyListeners(LexerNoViableAltException lexerNoViableAltException) {
        String text = this._input.getText(Interval.of(this._tokenStartCharIndex, this._input.index()));
        String msg = "Operator " + this.getErrorDisplay(text) + " is unkown.";
        ANTLRErrorListener listener = this.getErrorListenerDispatch();
        listener.syntaxError(this, null, this._tokenStartLine, this._tokenStartCharPositionInLine, msg,
            lexerNoViableAltException);
    }
Run Code Online (Sandbox Code Playgroud)

或者对于DefaultErrorStrategy

    @Override
    protected void reportNoViableAlternative(Parser recognizer, …
Run Code Online (Sandbox Code Playgroud)

java antlr antlr4

5
推荐指数
1
解决办法
1763
查看次数

Antlr错误/异常处理

在网上做了一些研究之后,我发现这将是捕获异常并输出我自己的错误消息的方法.由于某种原因,我似乎仍然无法捕捉错误.下面是一个覆盖antlrs默认错误处理的类的代码.

我想要做的就是从antlr捕获异常并输出到java gui中语法不正确的屏幕.

public class ExceptionErrorStrategy extends DefaultErrorStrategy {

@Override
public void recover(Parser recognizer, RecognitionException e) {
    throw e;
}

@Override
public void reportInputMismatch(Parser recognizer, InputMismatchException e) throws RecognitionException {
    String msg = "Input is mismatched " + getTokenErrorDisplay(e.getOffendingToken());
    msg += " expecting: "+e.getExpectedTokens().toString(recognizer.getTokenNames());
    RecognitionException ex = new RecognitionException(msg, recognizer, recognizer.getInputStream(), recognizer.getContext());
    ex.initCause(e);
    throw ex;
}

@Override
public void reportMissingToken(Parser recognizer) {
    beginErrorCondition(recognizer);
    Token t = recognizer.getCurrentToken();
    IntervalSet expecting = getExpectedTokens(recognizer);
    String msg = "Missing "+expecting.toString(recognizer.getTokenNames()) + " at " …
Run Code Online (Sandbox Code Playgroud)

exception-handling antlr4

4
推荐指数
1
解决办法
5444
查看次数

使用 ANTLR4 解析公式

我正在尝试使用 ANTLR4 将数学公式解析为 LaTeX 的子集。例如它应该解析(a+4)/(b*10)\frac{a+4}{b\cdot 10}.

我的简单语法创建了一个这样的树:

蚂蚁树

现在我正在尝试实现解析树侦听器,以在遍历树时以某种方式构造 LaTeX 字符串。在这里,我失败了,因为构造一个像\frac{}{}它必须递归构建的字符串。然而,解析树遍历器一个接一个地访问树节点(据我所知,以广度优先的方式)。

我已经阅读了可能是我需要的解析树访问者。但是我无法找到一些如何应用这些访问者的示例。

您能否举例说明在这种特殊情况下如何使用解析树侦听器/访问器?您认为我首先将 ANTLR 用于解析器的方法有意义吗?

java parsing antlr antlr4

2
推荐指数
1
解决办法
2903
查看次数

标签 统计

antlr4 ×3

antlr ×2

java ×2

exception-handling ×1

parsing ×1