2017-12-01 42 views
-1

(shift 대 감소) 및 (reduce 대 reduce) LR 파서 충돌을 배웠습니다. (shift vs reduce) 충돌, 전도 교대. (감소 대 감소) 충돌이 발생하면 첫 번째 생산 규칙을 ​​수행하십시오.모호성 및 충돌 해결 방법 LR 파서?

왜 그런가 ?? 왜 시프트 및 첫 번째 프로덕션 규칙을 선택 하시겠습니까 ??

+1

이 질문은 Dragon 책의 4 장에서 실세계 예제를 사용하여 길게 논의됩니다. – rici

답변

0

쉬운 첫 번째 : 줄이기 충돌 감소는 대개 잘못되었습니다. 펄서 생성기는 "첫 번째 걸리기"와 같은 일관된 규칙을 사용하여 문법의 규칙을 재정렬하여 원하는 것을 선택할 수 있습니다.

Shift-reduce 충돌은 실제로 매우 일반적입니다. 파서 생성기는 거의 항상 당신이 원하는 것이기 때문에 이러한 경우에 교대를 선택합니다. 이를 수있는 LR 문법에서

if (A) if (B) C else D; 

,이 보통 "다른 사람"에 시프트 감소 갈등, 그리고 그것을가 적용되는 "경우"하는 그 모호한 : 고전적인 예는 문장과 같다. 교대를 선택한다는 것은 "if (B)"에 적용된다는 것을 의미합니다. 이는 일반적으로 이런 종류의 것을 허용하는 언어의 규칙입니다.