2015-03-29 3 views
0

У меня есть два входаJavaCC конфликтующие производства

  1. a - b
  2. a += b

И у меня есть производство с выбором

void AssignmentExpression() : {} 
{ 
    LOOKAHEAD(3) ConditionalExpression() 
| LOOKAHEAD(3) UnaryExpression() AssignmentOperator() AssignmentExpression() 
} 

С этим входом производства (1) работ , но вход (2) не работает.

Если я поменять свой выбор в производстве, так что он становится

void AssignmentExpression() : {} 
{ 
    LOOKAHEAD(3) UnaryExpression() AssignmentOperator() AssignmentExpression() 
| LOOKAHEAD(3) ConditionalExpression() 
} 

Затем вход (2) работает, но вход (1) не работает.

Как исправить это? Увеличение параметра LOOKAHEAD не помогает.

ответ

0

Вы можете попробовать

void AssignmentExpression() : {} 
{ 
    LOOKAHEAD(UnaryExpression() AssignmentOperator()) 
    UnaryExpression() AssignmentOperator() AssignmentExpression() 
| ConditionalExpression() 
} 

Не видя больше грамматики это трудно понять, будет ли это работать. Поскольку использование спецификации lookahead будет подавлять любые предупреждения от JavaCC --JavaCC «предполагает», вы знаете, что делаете, вам нужно сделать анализ самостоятельно.

Мой другой ответ лучше.

 Смежные вопросы

  • Нет связанных вопросов^_^