假设我要解析这个字符串:ABAA 和下一个语法:
public void parse_X() :
{}
{
(
LOOKAHEAD(parse_AA())
parse_AA()
|
parse_AB()
)*
}
public void parse_AA() :
{}
{ <A> <A> }
public void parse_AB() :
{}
{ <A> <B> }
很明显,没有歧义也没有选择冲突,但是我收到一个警告,声称在第 4 行存在选择冲突。我的猜测是 JavaCC 不记得 LOOKAHEAD(parse_AA()) 失败并且因此, parse_AA() 不能跟随。
完整的警告信息:
警告:第 4 行 (...)* 构造中的选择冲突。嵌套在构造中的扩展和在构造之后的扩展具有共同的前缀,其中之一是:“A”考虑使用 2 或更多的前瞻来进行嵌套扩展。解析器生成 0 个错误和 1 个警告。
我怎样才能避免这个警告?有替代语法吗?(除了分解常见的 < A > )