컴파일러 원리(3판) 연습 선택 및 분석(3장 부분 분석)

콘텐츠

3u17은 S→(L)|aL→L, S|S 문법의 실시간 접두사를 허용하는 DFA를 제공합니다. Answer 먼저, 문법은 다음과 같이 확장됩니다. 여기서 S'는 확장된 문법의 시작 기호입니다. S'→SS→(L)|aL→L, S|S 문법 접두사를 수용하는 DFA의 상태 전이도는 그림 3억과 같으며 초기 상태는 I0이고 모든 상태는 수용 상태이다. 그림 3 5 문법 접두사 식별을 위한 DFA 분석 문법 접두사는 LR 분석에서 중요한 개념이며, 문법 접두사를 수용하는 DFA는 LR 분석 테이블을 구성하는 과정에서 중요한 단계입니다. 일부 학생들은 LR 분석 테이블을 구성할 때 이러한 상태 전이 다이어그램을 그리지만 이것이 문법 접두어를 허용하는 DFA라는 것을 이해하지 못합니다. SLR(1) 분석표, 규범적 LR(1) 분석표 및 LALR(1) 분석표를 구성할 때 이러한 DFA를 먼저 구성해야 합니다. 1) 방법이 가장 적으므로(사실 이 DFA는 LR(0) 방법으로 구축한 DFA임) SLR(1) 방법을 사용한다. 3억18 문법은 다음과 같습니다: S→(S) 13
S→a 이 문법에서 양가 접두사 (((유효 LR(1)) 항목을 제공하십시오. 양가 접두사 (((유효 LR(1)) 항목에 답하십시오. S→(uS), )S→u(S), )S→ua,) 문법의 활성 접두어를 인식하는 DFA를 분석하고 구성할 때 실제로는 3개의 LR(1)만 그리면 된다. ) 항목 세트를 확인하기 위한 결과를 얻었으며, 3개의 항목 세트는 그림 3억 6과 같다. 그림 3억 6은 문법 3억 19의 활성 접두어의 3개 항목 세트를 인식하고 문법 S→Aa|bAc|dc의 DFA를 수용한다. |bdaA→d 또는 접두어는 그림 3억과 같다 7. 이 DFA에 따라 문법의 SLR(1) 분석표를 구성하고, 해당 문법이 왜 SLR(1) 문법이 아닌지 설명한다. 문법의 활성 접두사를 식별하기 위한 DFA 답변 분석 테이블은 표 3에 나와 있습니다. FOLLOW(A)={a,c} 입니다. 두 개의 Shift-Reduce 충돌이 있으므로 문법은 SLR(1) 문법이 아닙니다. 23
표 3억4는 3억19질문 State action Transition abcd$SA0s3s4121acc2s53s764r5s8, r55r1 6s97s10, r58r39r210r43억20의 문법구조 분석표로 S→AaAb|BbBaA→εB→ε는 LL(1) 문법이지만 SLR은 아님을 증명한다. 1) 문법. 답변 먼저 그것이 LL(1) 문법임을 입증하십시오. 비단말 S에만 두 가지 다른 대안이 있으므로 올바른 두 부분만 고려하면 됩니다. FIRST(AaAb)={a} FIRST(BbBa)={b} 교차점이 비어 있으므로 문법은 LL(1) 문법입니다. 여기서는 SLR(1) 분석표를 구성하는 것이 아니라, 단순 분석을 통해 해당 문법이 SLR(1)이 아닌지 판단하게 된다. 이 문법에 따르면 문장이 무엇이든 첫 번째 기호를 마주할 때 널 감소가 수행됩니다. FOLLOW(A)와 FOLLOW(B)는 모두 {a,b}와 같으므로 ε을 A로 줄일지 B로 줄일지 불확실하므로 축소-축소 충돌이 있으므로 문법은 SLR( 1). 분석 실제로 언어에는 ab와 ba 두 문장만 있으며 이러한 충돌은 쉽게 해결할 수 있습니다. 그러나 SLR 방식으로 분석 테이블을 구성하는 경우에는 순방향 탐색 기호에 따라 감소 항목이 채워지는 것이 아니라 가능한 모든 후속 기호에 따라 채워지는 러프니스가 이러한 감소-감소 충돌 발생을 결정합니다. 이 예에서 LL(1) 방법이 SLR(1) 방법보다 강력하다는 잘못된 결론을 내리지 마십시오. 예를 들어 연습문제 3억16의 표현 문법은 SLR(1)이지만 왼쪽 재귀를 갖고 있기 때문에 LL(1)이 아닙니다. 33
S→Aa|bAc|dc|bdaA→d 문법은 LALR(1) 문법이지만 SLR(1) 문법은 아님을 증명하세요. 답변 분석표를 구축하면 이 질문에 답하는 것이 어렵지 않으나(질문 3억23 참조), 문법이 매우 단순할 경우 직관적으로 분석할 수 있어야 합니다. 먼저 문법이 SLR(1) 문법이 아니라는 점을 말씀드리겠습니다. FOLLOW(A)={a,c}인 생성을 보면 쉽게 알 수 있습니다. 문장이 dc인 경우 d가 분석 스택에 들어간 후 c를 향하게 되는데 이때 [S→dua] 항목은 Shifting이 필요하고 c가 FOLLOW(A)에 있으므로 Shift-Reduce 충돌이 발생합니다. 아이템 [ A → d u]는 감소가 필요합니다 (이 두 아이템은 동일한 아이템 세트에 나타납니다). 위의 이동-감소 충돌은 표준 LR(1) 사례에는 존재하지 않습니다. 왜냐하면 d를 A로 축소하는 것은 a에 직면할 때만 수행되기 때문입니다. 위 문법에는 또 다른 Shift-Reduce 충돌이 있는데, bd가 스택에 push된 후 a의 상황에 직면하는데, 충돌 이유는 위와 비슷합니다. 이 충돌은 정식 LR(1) 사례에도 존재하지 않습니다. 따라서 문법은 LR(1) 문법입니다. 분명히 이 문법의 정식 LR(1) 항목 집합 집합에는 동심 항목 집합이 없으므로 이 문법도 LALR(1) 문법입니다. S→Aa|bAc|Bc|bBaA→dB→d 문법은 LR(1) 문법이지만 LALR(1) 문법은 아님을 증명하세요. 답 이 문법에 의해 생성된 언어는 da, bdc, dc, bda의 네 문장만 포함합니다. 표준 LR(1)의 경우 어떤 상황에서 d가 A로 감소하고 어떤 상황에서 B로 감소하는지 명확하므로 이것이 LR(1) 문법이라는 것을 아는 것은 어렵지 않습니다. 이 문법의 정식 LR(1) 항목 집합 집합 중 라이브 접두사 d에 유효한 항목 집합은 {[A→dua, a], [B→dù, c]}입니다. 라이브 접두사 bd에 유효한 항목 집합은 { [A→dù, c], [B→dù, a]} 이 두 집합은 충돌이 없으며 동심원입니다. 동심 집합을 병합한 후에는 {[A→dua, a/c], [B→dua, a/c]}가 되고 축소-축소 충돌이 발생하므로 해당 문법은 LALR(1) 문법이 아닙니다. 다음 문법이 SLR(1) 문법이 아님을 보여주고 동등한 SLR(1) 문법을 다시 작성하세요. S→Aa|bAc|dc|bdaA→d43
답변 분석 테이블의 상태 중 일부는 그림 3 8과 같습니다.상태의 일부만 표시되어 있지만 가능한 모든 충돌이 표시됩니다. a는 A의 후속 기호 중 하나이므로 가장 오른쪽 위 항목 집합에 Shift-Reduce 충돌이 있습니다. 마찬가지로 아래의 중간 상태에도 교대 감소 충돌이 있습니다. 등가 SLR(1) 문법은 다음과 같다: S→da|bdc|dc|bda 그림 3·8 분석표의 해당 상태 3·24는 LR(1)이 아니며, 이를 등가 SLR(1) 문법으로 만들기 위해 약간 수정하였다. . program→begindeclist;statementenddeclist→d; declist|dstatement→s;statement|s Answer 수정된 문법은 다음과 같습니다:program→begindecliststatementenddeclist→d;declist|d;statement →s;statement |s 분석하여 생성된 문장의 형태 문법은 :begin;d;...;d;s;s;...;send는 주로 세미콜론으로 구분된 여러 명령문으로 구성된 명령문 테이블과 세미콜론으로 구분된 여러 명령문으로 구성된 명령문 테이블입니다. 이는 세미콜론이 선언의 구분 기호 역할과 선언 목록 및 명령문 목록의 구분 기호 역할을 하기 때문에 문제가 됩니다. 문법의 첫 번째 축소 단계는 마지막 d를 축소하여 축소하는 것입니다. 분석기가 d를 분석 스택에 푸시하고 ";"에 직면하면 d가 마지막 d인지 판단할 수 없으므로 Shift-Reduce 충돌이 발생합니다. d 뒤의 세미콜론이 스택에 푸시된 후 작업이 결정되면 Shift-Reduce 충돌이 사라집니다. 이 아이디어에 따르면 문법이 수정되는데 수정된 문법은 선언 d 뒤의 세미콜론을 d의 종결자로 간주하므로 선언 목록과 명령문 목록을 구분하는 세미콜론이 마지막 선언 d의 종결자로 간주됩니다. 그러면 이동 감소 충돌이 발생하지 않습니다.

PDF

https://bill.lanzoui.com/iZOScx16aza

Supongo que te gusta

Origin blog.csdn.net/horizon08/article/details/121619403
Recomendado
Clasificación