我正在使用JavaCC來制定識別語言的規範。我的問題是JavaCC給我一個警告,因爲public是Member()聲明的通用前綴。 Member()可以具有Attributes()和/或Method(),但必須至少有一個Method,順序無關緊要。避免使用通用前綴而不改變lookahead
警告的JavaCC給我是:
在選擇衝突(...)+構造在第66行,列23 擴展嵌套構建體和膨脹以下構建物內具有共同的前綴,其中之一是: 「上市」。考慮使用一個2或更多的前瞻來進行嵌套擴展。
第66行是Member()的唯一行。此外,我需要這樣做而不需要更改前瞻值。
下面是代碼:
void Member() : {}
{
(Attribute())* (Method())+ (Attribute() | Method())*
}
void Attribute() : {}
{
"private" Type() <Id> [":=" Expr()]";"
}
void Method() : {}
{
MethodHead() MethodBody()
}
void MethodHead() : {}
{
("public")? (<Id> | Type() | "void") <Id> "(" Parameter() ")"
}
感謝。
感謝。它從Method()中移除了'+'。非常感謝。 – apeiron