如何解释 ANTLR 错误消息?

How to interpret ANTLR error-messages?

当我想从我的语法中创建一个解析器时,ANTLR 给我一个关于非 LL(*) 符合内容的错误。我明白这意味着一定有一点解析器无法区分两个或多个规则,但我不明白的是 ANTLR 说这个歧义可以从(例如)'alts 1,2'.
有没有办法解释这些数字以实际找到导致这种歧义的特定输入,以便我知道我必须修复什么?因为我发现很难再次查看我的语法并找出导致此问题的原因...

乌鸦问候

该消息将说明语法文件中出现问题的行。 'alts 1,2' 意味着 ANTLR 找到了两种方式来匹配输入,这两种方式在如何在给定位置继续进行方面有所不同,因此它无法决定采用哪种方式。备选方案 1 和 2 的含义示例:

rule1:
  ( choice1  // alternative 1
  | choice2  // alternative 2
  )
  ;

rule2:
  choice?  // alternative 1: go into choice rule
           // alternative 2: skip over choice rule
  ;

rule3:
  choice*  // alternative 1: go into choice rule (either first time or repeatedly)
           // alternative 2: skip over choice rule (either skip it or don't repeat anymore)
  ;

rule4:
  choice+  // alternative 1: repeat once more
           // alternative 2: don't repeat anymore
  ;

如果有人仍然对这些错误消息有一些困难(比如我),那么 this method 可能对你很有用。
它描述了一种可视化语法树的方法(与内置的 Xtext-syntaxGraph 非常相似,但它突出了 Antlr 抱怨的实际部分。)

乌鸦问候