2013-05-14 3 views
1

C 언어의 하위 집합에 대한 문법을 ​​작성하려고합니다. $<pNode>0 이미 을 의미하기 때문에,Bison, 규칙 시작 부분의 동작

rule : { $<pNode>$ = $<pNode>0; } the rest 

는 그러나, 들소 문서를 읽은 후,이 작업이 생략 될 수 있다는 것 : 내 규칙의 일부에서 나는 (pNodeunion에 정의 된 포인터 인) 다음이 이전 심볼이 스택에 있습니다. 내가 맞습니까?

조치를 생략 할 수 있다면 좋겠지 만, 달리 표시되지 않는 일부 시프트/감소 충돌을 유발할 수 있습니다.

답변

1

이 코드는 값 스택의 최상위 값을 복제하므로 (복제본을이 규칙으로 사용하면 $1이됩니다) 중복 값 중 하나를 사용하는 모든 코드를 대신 변경할 수 있으면 불필요한 것으로 간주 될 수 있습니다 이중화되지 않은 값을 사용하고, 스택의 값을 수정하려고 시도하지 않는 코드가 있으면 (가능하지만 드물고 스타일이 매우 좋지 않음).

the rest에 대한 문제 일 수 있습니다. $0$-1을 참조하면 문제가 발생할 수 있습니다. 그들은 단지 $0을 참조하고 (그것을 수정하지 마십시오) 당신은 아마 행동을 제거하는 것이 좋습니다.

+0

크리스, 고마워. 내가 정확히 생각한거야. 상황은 꽤 "차단 된"것이므로 다른 규칙이 항상 뒤따라야하므로 '$ 0'에 대한 참조가 항상 올바를 것입니다. –