2011-08-02 6 views
1

이제는 가장 가까운 IF에 ELSE를 연결하는 방법을 알았습니다.ELSE가 yacc에서 가장 멀리있는 IF와 연관시키는 방법?

%nonassoc IFX 
%nonassoc ELSE 

| IF stmt %prec IFX 
| IF stmt ELSE stmt 

그러나 어떻게하면 ELSE를 가장 먼 IF과 연관시킬 수 있습니까?

위의 두 %nonassoc 순서를 바꿔 보려고했지만, 그 후에는 IF stmt ELSE stmt 형식의 유효한 문을 인식하지 못하는 것 같습니다.

왜?

올바르게 수행하는 방법?

답변

1

(테스트되지 않음) 여러 if 사이에 모호한 부분이있는 경우 bison이 if 문을 줄이는 구문 분석기를 생성하도록 강요해야합니다. http://www.delorie.com/gnu/docs/bison/bison_85.html에 따르면, IF stmt 규칙이 더 높은 우선 순위를 갖는 경우 달성 될 수 있습니다. ELSE 토큰. 따라서

%nonassoc ELSE 
%nonassoc IFX 

| IF stmt %prec IFX 
| IF stmt ELSE stmt 

트릭을해야합니다.

관련 문제