Я использую JavaCC для создания спецификации для распознавания языка. Проблема в том, что JavaCC дает мне предупреждение, потому что public является общим префиксом объявления Member(). Member() может иметь атрибуты() и/или метод(), но должен иметь хотя бы один метод, порядок не имеет значения.Избегайте распространенных префиксов без изменений lookahead
Предупреждение JavaCC дает мне это:
Выбор конфликт (...) + построить в строке 66, столбец 23. расширения вложен в конструкта и расширения следующие конструкции имеют общие префиксы, один из которых является: «общественность». Подумайте о том, как использовать 2 или более для вложенного расширения.
Линия 66 является единственной строкой члена(). Также мне нужно сделать это без изменения смотрового значения.
Вот код:
void Member() : {}
{
(Attribute())* (Method())+ (Attribute() | Method())*
}
void Attribute() : {}
{
"private" Type() <Id> [":=" Expr()]";"
}
void Method() : {}
{
MethodHead() MethodBody()
}
void MethodHead() : {}
{
("public")? (<Id> | Type() | "void") <Id> "(" Parameter() ")"
}
Спасибо.
Спасибо. Он работал, удаляя «+» из метода(). Большое спасибо. – apeiron