这个ANTLR3日志消息的含义是什么?

时间:2011-02-17 16:10:53

标签: java antlr antlr3

Antlr3向System.out生成以下输出,同时正确执行其他操作:

line 0:0 null
line 0:0 null
line 0:0 null
...

它是什么?

PS。问题是在解析I RecognitionException()时不时。看起来null就是这样的结果。应该有一些有意义的消息,而不是null,而RecognitionException没有这样的构造函数。怎么办?


grammar Bar;
document: ( CHAR { Foo.validate($CHAR.text); } )+ EOF;
CHAR: 'a'..'z';

Foo类在同一个包中的某个地方:

public class Foo {
  public static void validate(String txt) throws RecognitionException {
    if ("q".equals(txt)) {
      throw new RecognitionException();
    }
  }
}

现在进行单元测试:

public class BarTest {
  @Test public void testEverything() throws Exception {
    this.parse("abc"); // valid
    this.parse("abcq"); // invalid
  }
  private void parse(String txt) {
    CharStream input = new ANTLRStringStream(txt);
    BarLexer lexer = new BarLexer(input);
    TokenStream tokens = new CommonTokenStream(lexer);
    BarParser parser = new BarParser(tokens);
    parser.document();
  }
}

输出结果为:

line 0:0 null

1 个答案:

答案 0 :(得分:0)

解析器本身应该抛出RecognitionException。此类异常具有在解析器通过令牌流(行号,索引,当前令牌等)时更新的所有类型的信息。所以,你不应该自己抛弃它们。

查看处理错误报告和恢复的这两篇Wiki文章: