이 문법 LL (1)은 어떻습니까?


12

이것은 드래곤 북의 질문입니다. 이것은 문법입니다 :

SAaAbBbBa
Aε
Bε

질문은 그것이 LL (1)이지만 SLR (1)이 아님을 표시하는 방법을 묻습니다.

그것이 LL (1)임을 증명하기 위해 파싱 테이블을 구성하려고 시도했지만 셀에서 여러 프로덕션을 얻습니다. 이는 모순입니다.

이 LL (1)이 어떻고 그것을 증명하는 방법을 알려주십시오.


6
나는 문법에 익숙하지 않지만이 문법의 언어는 유한 한 것 같습니다. L={ab,ba}
Nejc

@ Nejc : 예, 그런 것 같습니다!
Vinayak Garg

답변:


11

먼저 제작물에 숫자를 줍시다.

1 2 3 4SAaAb
SBbBa
Aε
Bε

첫 번째와 후속 세트를 먼저 계산해 봅시다. 이러한 작은 예제의 경우 이러한 세트에 대한 직감을 사용하면 충분합니다.

FIRST(S)={a,b}FIRST(A)={}FIRST(B)={}FOLLOW(A)={a,b}FOLLOW(B)={a,b}

이제 테이블을 계산해 봅시다 . 정의에 따르면 충돌이 발생하지 않으면 문법은 입니다.LL(1)LL(1)

    a | b |
-----------
S | 1 | 2 |
A | 3 | 3 |
B | 4 | 4 |

충돌이 없으므로 문법은 입니다.LL(1)

이제 테이블입니다. 먼저 오토 마톤입니다.SLR(1)LR(0)

state 0SAaAbSBbBaABA1B5
state 1SAaAba2
state 2SAaAbAA3
state 3SAaAbb4
state 4SAaAbb
state 5SBbBab6
state 6SBbBaBB7
state 7SBbBaa8
state 8SBbBa

그리고 테이블 ( 다음에 무엇이든 올 수 있다고 가정합니다 ).SLR(1)S

    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 걸릴 것이다.SLR(1)LALR(1)a LALR(1)b

이것은 이지만 아닌 문법이 있는지에 대한 흥미로운 의문을 제기합니다 .LL(1)LALR(1)


감사! First & Follow를 올바르게 구성했지만 테이블을 구성하는 데 실수를했습니다.
Vinayak Garg 5

10

요청을받지 않으면 LL (1) 문법임을 증명하기 위해 LL (1) 테이블을 구성 할 필요가 없습니다. Alex가했던 것처럼 FIRST / FOLLOW 세트를 계산하면됩니다.

FIRST(S)=a,bFIRST(A)=εFIRST(B)=εFOLLOW(A)=a,bFOLLOW(B)=a,b

정의에 따라 LL (1) 문법은 다음과 같아야합니다.

  1. 경우 와 문법의 두 가지 규칙이며, 그것은되어야한다는 . 따라서 두 세트에는 공통 요소가 없습니다.AaAbFIRST(a)FIRST(b)=
  2. 비 터미널 기호 경우 인 경우 합니다. 따라서 비 터미널 심볼에 대해 제로 생성이없는 경우 FIRST 및 FOLLOW 세트는 공통 요소를 가질 수 없습니다.AΑεFIRST(A)FOLLOW(A)=

주어진 문법에 대해 :

  1. 우리는이 이후 동안 이며 공통 요소가 없습니다.FIRST(AaAb)FIRST(BbBa)=FIRST(AaAb)={a}FIRST(BbBa)={b}
  2. FIRST(A)FOLLOWA)= 보낸 동안 , 이제 이후 동안 .FIRST(A)={a,b}FOLLOW(A)=FIRST(B)FOLLOW(B)=FIRST(B)={ε}FOLLOW(B)={a,b}

SLR (1) 분석은 완벽하다고 생각합니다!


어서 오십시오! 이 답변을 향상시키기 위해, 당신이 작성한 것을 문법에 적용하지 않겠습니까?
Raphael

여기에있어 행복합니다 !! 귀하의 요청에 대한 답변을 받았고 나는 철저한 설명을했다고 생각합니다!
Ethan

감사! 수학을 위해 편집 한 것처럼 LaTeX를 사용할 수 있습니다.
Raphael

와우 고마워! 이것은 훌륭한 설명입니다. 그러나 응용 프로그램에 약간의 실수가 있다고 생각합니다. First (A) = {epsilon}이 아닙니까? FIRST와 FOLLOW를 교체했다고 생각합니다.
Vinayak Garg

FIRST (A)는 실제로 엡실론이지만 전체 오른쪽 멤버의 FIRST 세트를 계산하려고하기 때문에 A-> ε은 빈 생산물과 첫 번째 터미널 기호 (따라서 FIRST 세트)가 있음을 보여줍니다. 터미널 기호 a. 이것이 도움이 되었기를 바랍니다!
Ethan

0

문법을 LL (1)로 만드는 충분한 조건을 찾으십시오 (힌트 : 첫 번째 세트를보십시오).

모든 SLR (1) 문법이 충족해야하는 필수 조건을 검색하십시오 (힌트 : FOLLOW 세트를보십시오).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.