2009-09-20 2 views
0
VARIABLE: ... 

UNARYOP: 'not' Expression; // unary operation 
BINARYOP: 'or' VARIABLE; 

Expression : (NIL | INTEGER | UNARYOP) BINARYOP?; 

'또는'하나ANTLR 재귀 모호성 상기 시나리오에서는 문제

Expression-> BINARYOP

또는

EXPRESSION-> UNARYOP-> Expression-> BINARYOP 통해 도달 할 수있는

위와 같은 모호성을 체계적으로 제거 할 수 있습니까?

답변

1

문법에서 모호성을 제거하는 것이 대안 중 하나를 선택하면 '주관적인'선택이기 때문에 자동으로 해결할 수없는 작업이라고 생각합니다.

문제를 확인한 후에는 다른 대체 트리를 만들고 잘못된 생성 트리를 허용하지 않는 새로운 생성 규칙을 추가하십시오.

왼쪽 재귀를 제거하는 것과 같은 마법 해결책이 없습니다. 아마도 제가 틀 렸습니다. 귀하의 경우에는

당신은

Expression : NIL 
      | INTEGER 
      | VARIABLE 
      | 'not' Expression 
      | Expression 'or' Expression; 

을 정의 할 수 있습니다 또는 당신은 단지 변수의 '또는'오른쪽을 제한 할 수 있습니까?