현재 컴파일러에 대해 공부하고 있는데 LR (0)에서 "시프트/감소"또는 "감소/감소"충돌이있는 경우를 이해하지만 "시프트/시프트"충돌은 불가능합니다! 왜 우리는 "교대/교대"갈등을 가질 수 없습니까?컴파일러에서 "시프트/시프트"충돌이 발생하지 않는 이유는 무엇입니까?
답변
구문 분석기가 이동할지 (구문 분석 스택 위에 다음 입력 토큰을 푸시) 또는 줄이기 (해석 스택에서 일련의 터미널과 비 터미널을 팝하는지)를 알 수없는 경우 Shift/reduce 충돌이 발생합니다. reduce/reduce 충돌은 파서가 줄이기를 알고 있지만 수행 할 줄이기를 알 수없는 경우입니다.
시프트/시프트 충돌이 발생하면 구문 분석기는 다음 토큰을 구문 분석 스택으로 푸시해야한다는 것을 알고 있지만이를 수행하는 방법을 알지 못합니다. 토큰을 구문 분석 스택에 푸시하는 유일한 방법은 하나이기 때문에 일반적으로이 양식의 충돌은있을 수 없습니다.
말하자면 이론적으로 동일한 터미널 심볼로 라벨이 지정된 주어진 파싱 상태를 벗어나는 2 개 이상의 전환이있는 이상한 설정이있는 경우 교대/시프트 충돌이 존재할 수 있습니다. 이 경우의 갈등은 한 국가로 이동하거나 다른 국가로 이동하거나 이동할 것인지 여부입니다. 이것은 오토 마톤을 더 적은 수의 상태로 압축하려고 시도했을 때, 또는 그렇게 잘못한 경우 또는 비 결정적 파싱 오토 마톤을 구축하려고 시도한 경우에 발생할 수 있습니다. 실제로 이것은 결코 일어나지 않을 것입니다.
희망이 도움이됩니다.
세 번째 단락은 매우 유용합니다. 감사합니다! – alcuadrado
- 1. @ end가 컴파일러에서 보이지 않는 이유는 무엇입니까?
- 2. 이 함수가 컴파일러에서 포착되지 않는 이유는 무엇입니까?
- 3. 이 오류가 발생하지 않는 이유는 무엇입니까?
- 4. Java에서 컴파일 오류가 발생하지 않는 이유는 무엇입니까?
- 5. 이 경우 패딩이 발생하지 않는 이유는 무엇입니까?
- 6. 여기에 오류가 발생하지 않는 이유는 무엇입니까?
- 7. 내 채널에 TimeoutException이 발생하지 않는 이유는 무엇입니까?
- 8. 세분화 오류가 발생하지 않는 이유는 무엇입니까?
- 9. Java 컴파일러에서 인스턴스를 통해 정적 메서드를 호출하지 않는 이유는 무엇입니까?
- 10. 상속하는 생성자가 기존의 모든 C++ 컴파일러에서 지원되지 않는 이유는 무엇입니까?
- 11. null 개체의 이벤트에 지속적으로 예외가 발생하지 않는 이유는 무엇입니까?
- 12. double에 int를 대입해도 gcc 경고가 발생하지 않는 이유는 무엇입니까?
- 13. 내 페이지가 오류가 발생하지 않더라도 리디렉션되지 않는 이유는 무엇입니까?
- 14. 테스트 병합이 실제 병합에서 발생하지 않는 충돌을 표시하는 이유는 무엇입니까?
- 15. DispatcherTimer Tick 이벤트가 제 시간에 발생하지 않는 이유는 무엇입니까?
- 16. Rails에서 belongs_to 관계에 대해 nil이 발생하지 않는 이유는 무엇입니까?
- 17. WPF : 논리적 하위에서 DataContextChanged가 발생하지 않는 이유는 무엇입니까?
- 18. 두 개의 빈 경로를 복사하고 예외가 발생하지 않는 이유는 무엇입니까?
- 19. 바이트가 크기를 초과하면 오버플로가 발생하지 않는 이유는 무엇입니까?
- 20. IE9에서 이러한 JavaScript 링크를 무시하지만 오류가 발생하지 않는 이유는 무엇입니까?
- 21. AppDomain.Unload를 호출해도 가비지 수집이 발생하지 않는 이유는 무엇입니까?
- 22. PHPUnit + Selenium Server를 사용할 때 오류가 발생하지 않는 이유는 무엇입니까?
- 23. 파이썬에서 배열의 범위를 벗어나는 오류가 발생하지 않는 이유는 무엇입니까?
- 24. python에서 tk 속성 오류가 발생하지 않는 이유는 무엇입니까?
- 25. 이 경우 마진 축소가 발생하지 않는 이유는 무엇입니까?
- 26. 오버플로가 발생하지 않는 div
- 27. getToolTipText가 호출되지 않는 이유는 무엇입니까?
- 28. BackgroundWorker.OnDoWork가 호출되지 않는 이유는 무엇입니까?
- 29. 예외가 발생하지 않고 프로그램이 멈추는 이유는 무엇입니까?
- 30. "초기화에서 호환되지 않는 유형"오류가 발생하지 않습니다.
핸들을 줄이기 위해 선택할 수있는 2 개의 프로덕션이므로 축소 감소 충돌이 있습니다. 일부 제품에서는 이동 및 축소가 가능하고 구문 분석을 계속 진행할 수 있기 때문에 시프트 감소 충돌이 있습니다. Shift는 단지 1 가지를 의미하며 입력 스트림을 진행하므로 시프트 이동 충돌이 발생하지 않습니다. – axiom