0
假設我有這個字符串解析:ABAA和下一個語法:如何避免JavaCC中的錯誤選擇衝突警告?
public void parse_X() :
{}
{
(
LOOKAHEAD(parse_AA())
parse_AA()
|
parse_AB()
)*
}
public void parse_AA() :
{}
{ <A> <A> }
public void parse_AB() :
{}
{ <A> <B> }
很清楚,沒有歧義,也沒有選擇的衝突,但我得到一個警告,聲稱有一個選擇衝突我的猜測是JavaCC不記得LOOKAHEAD(parse_AA())失敗,因此parse_AA()無法遵循。
已滿警告消息:
警告:在選擇衝突(...)*構建在第4行 擴展嵌套在構建和擴展以下構建 有共同的前綴,其中一個是:「 A「 考慮將嵌套擴展的前瞻使用爲2或更多。解析器生成0錯誤和1個警告。
如何避免此警告? 有其他語法嗎? (除因式分解共同< A>)
我試過了,但沒有奏效。我100%肯定X後的任何內容都以開頭;事實上,如果我刪除kleene star,警告消失(但當然這不是解決方案)。 –
也許你是對的,但我們在JavaCC版本上有所不同。我會檢查最新的並回來。 –
我懷疑JavaCC的版本很重要。我認爲問題在於可以跟隨X.在這種情況下,JavaCC需要超過1個令牌來決定是否退出循環。看到我編輯的答案。 –