이것은 드래곤 북의 질문입니다. 이것은 문법입니다 :
질문은 그것이 LL (1)이지만 SLR (1)이 아님을 표시하는 방법을 묻습니다.
그것이 LL (1)임을 증명하기 위해 파싱 테이블을 구성하려고 시도했지만 셀에서 여러 프로덕션을 얻습니다. 이는 모순입니다.
이 LL (1)이 어떻고 그것을 증명하는 방법을 알려주십시오.
이것은 드래곤 북의 질문입니다. 이것은 문법입니다 :
질문은 그것이 LL (1)이지만 SLR (1)이 아님을 표시하는 방법을 묻습니다.
그것이 LL (1)임을 증명하기 위해 파싱 테이블을 구성하려고 시도했지만 셀에서 여러 프로덕션을 얻습니다. 이는 모순입니다.
이 LL (1)이 어떻고 그것을 증명하는 방법을 알려주십시오.
답변:
먼저 제작물에 숫자를 줍시다.
1 2 3 4
첫 번째와 후속 세트를 먼저 계산해 봅시다. 이러한 작은 예제의 경우 이러한 세트에 대한 직감을 사용하면 충분합니다.
이제 테이블을 계산해 봅시다 . 정의에 따르면 충돌이 발생하지 않으면 문법은 입니다.
a | b |
-----------
S | 1 | 2 |
A | 3 | 3 |
B | 4 | 4 |
충돌이 없으므로 문법은 입니다.
이제 테이블입니다. 먼저 오토 마톤입니다.
그리고 테이블 ( 다음에 무엇이든 올 수 있다고 가정합니다 ).
a | b | A | B |
---------------------------
0 | R3/R4 | R3/R4 | 1 | 5 |
1 | S2 | | | |
2 | R3 | R3 | 3 | |
3 | | S4 | | |
4 | R1 | R1 | | |
5 | | S4 | | |
6 | R4 | R4 | | 7 |
7 | S8 | | | |
8 | R2 | R2 | | |
상태 0에 충돌이 있으므로 문법이 이 아닙니다 . 경우 유의 대신에 사용하고, 그 다음 두 충돌이 정확하게 해결 될 것이다 : 상태 0 룩어에 R3이 걸릴 것이고, 룩어에 는 R4 걸릴 것이다.
이것은 이지만 아닌 문법이 있는지에 대한 흥미로운 의문을 제기합니다 .
요청을받지 않으면 LL (1) 문법임을 증명하기 위해 LL (1) 테이블을 구성 할 필요가 없습니다. Alex가했던 것처럼 FIRST / FOLLOW 세트를 계산하면됩니다.
정의에 따라 LL (1) 문법은 다음과 같아야합니다.
주어진 문법에 대해 :
SLR (1) 분석은 완벽하다고 생각합니다!