Context-Free Languages

Download Report

Transcript Context-Free Languages

문맥-자유 문법의
단순화와 정규형
정의 5.1
• 문법 G = (V,T,S,P) 에서 모든 생성규칙이
A -> x.
의 형태를 가지면 G를 문맥-자유문법(contextfree grammar:CFG)라고 한다. 여기서 A  V 이
고, x  (V  T)*이다.
• 또한 언어 L이 L = L(G)를 만족하는 문맥-자유 문
법 G가 존재하고 오직 그럴 때에만 L을 문맥-자
유 언어(context-free language:CFL)라고 한다.
2/48
언어의 제약
• 문맥-자유 문법
– 우측의 문자열의 형태에 제한이 없음
• 제한을 주지 않은 것이 꼭 필요하지 않음
– 제한을 부여함으로서 편리함 제공
• A => , A => B
• 좀더 효율적인 파싱 제공
• 정규형 : 제한된 문법으로 모든 문법이 동치인
정규형으로 변형 가능
– Chomsky 정규형
– Greibach 정규형
3/48
언어의  인식
• 문맥-자유 언어
– L U  : 일반적인 문맥-자유 언어
– L – {}
• L U   L – {}
– V에 새로운 시작 심볼 S0추가
– S0->S|
4/48
단순화
• 어떤 형태의 바람직하지 않은 생성규칙
을 제거하는 것
• 문법의 많은 규칙들을 단순화 함으로써
동치인 제한된 문법을 생성
5/48
바람직하지 않은
생성규칙 제거규칙
1.
 생성규칙을 제거
2. 단위-생성규칙을 제거
3. 쓸모 없는 생성규칙을 제거
6/48
정리 6.1
• G=(V,T,S,P)를 문맥자유 문법이라 하고
P가 다음 생성규칙을
포함
– A->x1Bx2
A와 B는 서로 다른 변
수임을 가정
– B->y1|y2|…|yn
• G=(V,T,S,P)를 P에서
A->x1Bx2를 삭제하
고 다음생성규칙을
추가하여 얻어진 새
로운 생성규칙들의
집합 P
– A->x1y1x2|x1y2x2
|…|x1ynx2
L(G) = L(G)
7/48
정리 6.1 (증명)
• 어떤 문자열 w에 대하여 wL(G)에 다음
과 같은 유도 존재
* G w, S *=>G w
– S =>
• 생성규칙을 고려한 유도과정
* u1Au2 => u1x1Bx2u2 => u1x1yjx2u2
– S =>
G
G
G
* u1Au2 => u1x1yjx2u2
– S =>
G
G
• 그러므로 wL(G)이면, wL(G)임이 성립
8/48
정리 6.1
• 생성규칙에 A->x1Bx2
– 우측의 B를 좌변이 B인 모든 생성규칙들의
우변에 있는 문자열로 대체한 생성규칙들의
집합을 추가
• A->x1Bx2
• B->aa
• B->cc
•A->x1aax2
•A->x1ccx2
– A와 B는 꼭 다른 변수이어야 함
9/48
예제 6.1
• 다음의 생성규칙을 갖는 문법 G=({A,B},
{a,b,c}, A,P)를 고려
– A->a|aaA|abBc
– B->abbA|b
• 문법 G
– A->a|aaA|ababbAc|abbc
– B->abbA|b
10/48
예제 6.1
• G와 G는 동치
• 문자열 aaabbc는 G와 G에 의해서 유도가
능
– G : A=>aaA=>aaabBc=>aaabbc
– G : A=>aaA=>aaabbc
11/48
쓸모없는 생성규칙 제거
• 어떤 유도에서도 역할을 할 수 없는 생성규칙
들을 문법에서 제거
• 다음 문법 고려
– S->aSb|  |A
– A->aA
• 변수 A가 단말들의 문자열로 변환 불가능, 생
성규칙 S->A는 분명히 아무런 역할도 못함. 이
러한 생성규칙의 제거는 생성언어에 아무 영향
도 주지 않음
12/48
정의 6.1
• G=(V,T,S,P)를 문맥-자유 문법이라 하면,
변수 AV에 대해 다음 형태의 유도가 가
능한 문자열 wL(G) 가 적어도 하나 존
재하고 오직 그럴 때에만 A가 쓸모 있다
(useful)고 함
*
*
– S=>xAy=>w
, 여기서 x와 y  (V U T)*
• 그렇지 않은 변수를 쓸모 없다(useless)고
함
13/48
예제 6.2
• 시작 심볼이 S이고 다음 생성규칙을 가지는 문
법 G를 고려
– S->A
– A->aA| 
– B->bA
• Useless
– 그 변수가 시작 심볼로부터 도달 불가능
– 그 변수가 단말 문자열 유도 불가능
14/48
예제 6.3
• 문법 G=(V,T,S,P)에서 쓸모 없는 심볼과
생성규칙들을 제거, V={S,A,B,C}이고
T={a,b}이며, P는 다음 생성규칙
S->aS|A|C
A->a
B->aa
C->aCb
15/48
S->aS|A|C
A->a
B->aa
C->aCb
예제 6.3
• 먼저, 단말 문자열을 유도해 낼 수 있는 변수들
의 집합
–
–
–
–
A->a
B->aa
S=>A=>a
C는 불가능 <= useless
• C와 관련된 생성규칙 제거, 문법 G1, 변수
V1={S,A,B}, T={a}, 생성규칙 P
– S->aS|A
– A->a
– B->aa
16/48
S->aS|A
A->a
B->aa
예제 6.3
• 다음으로 시작 심볼로 도달될 수 없는 변
수 제거
– 변수들에 대한 종속 그래프생성
S
A
B
– 최종결과 문법 G=(V,T,S,P), 여기서 V={S,A},
T={a}이며 생성규칙
• S->aS|A
• A->a
17/48
정리 6.2
• G=(V,T,S,P)를 문맥-자유 문법이라 하자.
어떤 쓸모 없는 변수와 생성규칙들을 포
함하지 않고 G와 동치인 문법 G=(V,T,S,P)
이 존재한다.
G=(V,T,S,P)

G=(V,T,S,P)
18/48
정의 6.2
• 다음과 같은 형태의 문맥-자유 문법의 생
성규칙을  생성규칙이라 함
– A-> 
• 또, 다음과 같은 유도가 가능한 변수를 널
가능(nullable)변수라고 함
* 
– A=>
19/48
예제 6.4
• 다음 문법을 고려하자
– S->aS1b
– S1->aS1b| 
이 문법은 자유인 언어{anbn:n>=1}를 생
성함
•  생성규칙제거
– S1->  는 우변에 나타나는 S1을  로 치환하
여 얻어진 생성규칙들을 추가
20/48
–S->aS1b
–S1->aS1b| 
예제 6.4
•  제거 후 문법
– S->aS1b|ab
– S1->aS1b|ab
• 새로 생성된 문법은 원래의 문법과 같은
언어 생성
21/48
정리 6.3
•
•
G를 L(G)에  를 포함하지 않은 문맥-자
유 문법이라 하자.  생성 규칙을 가지
고 있지 않은 G와 동치인 문법 G이 존
재
증명)
1. G의 모든 널가능 변수들의 집합 VN을 구함
2. 생성규칙에 널 가능 변수들의 모든 가능한
조합으로 를 대체하여 얻을 수 있는 생성
규칙들을 추가
22/48
예제 6.5
•  를 포함하지 않은 문맥-자유 문법을 구
하라
–
–
–
–
–
S->ABaC
A->BC
B->b| 
C->D| 
D->d
• 널가능 변수들의 집합 VN={A,B,C}
23/48
–S->ABaC
–A->BC
–B->b| 
–C->D| 
–D->d
예제 6.5
• 널가능 변수들의 집합 VN={A,B,C}
–
–
–
–
–
S->ABaC|BaC|AaC|ABa|aC|Aa|Ba|a
A->B|C|BC
B->b
C->D
D->d
24/48
정의 6.3
• 다음과 같은 형태의 문맥-자유 언어의 생
성규칙을 단위-생성규칙 이라 함
– A->B
여기서 A,B  V 임
• 정리 6.1에서 논의한 치환규칙을 사용
25/48
정리 6.4
• G=(V,T,S,P)를  생성규칙을 갖지 않는
임의의 문맥-자유 문법이라 하자
• 단위-생성규칙을 가지고 있지 않은 G와
동치인 문맥-자유 문법 G=(V,T,S,P)가 존
재
26/48
정리 6.4
• 증명
– A->A 형태의 모든 규칙 제거가능
– A와 B가 다른 A->B 고려
• 정리 6.1을 직접 이용가능
• 6.1이 해결 불가능한 생성규칙
– A->B
– B->A
• A와 B 사이에 보행이 존재하는 모든 변수B를 찾음
*
– A=>B
– 결과로 얻어진 문법이 원래 문법과 동치는 정리 6.1
과 같은 방식으로 보일 수 있음
27/48
예제 6.6
• 다음 문법으로부터 모든 단위-생성규칙
제거
– S->Aa|B
– B->A|bb
– A->a|bc|B
S
A
B
– 보행이 존재하는 모든 변수
*
*
*
*
• S=>A,
S=>B,
B=>A,
A=>B
28/48
–S->Aa|B
–B->A|bb
–A->a|bc|B
예제 6.6
• 원래의 단위-생성규
칙이 아닌 모든 생성
규칙
– S->Aa
– A->a|bc
– B->bb
• 새로운 생성규칙
– S->a|bc|bb
– A->bb
– B->a|bc
• 최종 생성규칙
– S->a|bc|bb|Aa
– A->bb|a|bc
– B->a|bc|bb
29/48
바람직하지 않은
생성규칙 제거규칙
1.
 생성규칙을 제거
2. 단위-생성규칙을 제거
3. 쓸모 없는 생성규칙을 제거
30/48
바람직하지 않은 생성규칙 제거
• 다음 문법 고려
– S->aSb|A
– A->aA|
– B->bA
31/48
정규형
Chomsky 정규형
• 생성규칙의 우변에 있는 심볼들의 수를
제한
– 우변 심볼수를 두개 이하가 되도록 정의
33/48
정의 6.4
• 문맥-자유 문법 G에서 모든 생성규칙이
다음의 형태를 만족하면 G를 Chomsky 정
규형이라 함
– A->BC
혹은
– A->a
단, 여기서 A,B,C  V이고 a  T임
34/48
예제 6.7
• 다음은 Chomsky 정
규형임
– S->AS|a
– A->SA|b
• 다음은 Chomsky 정
규형이 아님
– S->AS|AAS
– A->SA|aa
• 두개의 생성규칙이
위배
– S->AAS
– A->aa
35/48
정리 6.6
•  가 L(G)에 속하지 않은 문맥-자유 문법
G=(V,T,S,P)에 대해서
• G와 동치이면서 Chomsky 정규형인 문법
G=(V,T,S,P)가 존재
36/48
정리 6.6
• 증명
– 정리 6.5에 의해 문법 G는  생성규칙이나 혹
은 단위-생성규칙을 갖고 있지 않다고 가정
할 수 있음
– 단계1 :다음 형태를 만족하는 모든 생성규칙
을 고려, G를 G1=(V1,T,S,P1)으로 변환
• A->x1x2…xn
• 여기서 각 xi는 V또는 T에 속한 심볼임
37/48
A->x1x2…xn
정리 6.6
• 만약 n=1인 경우
– 단위-생성규칙을 갖고 있지 않으므로, x1은 단말 심볼
이어야 함
– 이 규칙을 P1에 추가
• 만약 n>=2인 경우
– T에 속한 모든 단말 심볼 a에 대해서 새로운 변수 Ba
추가
– P의 모든 생성규칙에 대해 다음 생성규칙을 P1에 추가
A->C1C2…Cn
만약 xi  V인 경우 Ci=xi
만약 xi  a인 경우 Ci=Ba
38/48
정리 6.6
• 각 변수 Ba에 대해 P1에 다음의 생성규칙 추가
– Ba->a
– 단계1은 길이가 2이상인 생성규칙들에 있는 모든
단말 심볼들을 새로 소개된 변수로 치환
– 단계1 후에 문법 G1은 다음의 형태를 가짐
• A->a
혹은
• A->C1C2…Cn
– 그러므로 정리 6.1에 의해 L(G1)=L(G) 성립
39/48
정리 6.6
– 단계2 : 우변의 문자열 길이를 필요에 따라
줄이기 위한 새로운 변수 도입
• P1에서 단말 심볼을 갖는 생성규칙을 P에 추가
• n=2인 생성규칙들을 P에 추가
• n>2인 경우 새로운 변수 D1,D2,…Dn 도입하여 P
에 추가
–
–
–
–
A->C1D1
D1->C2D2
…
Dn-2->Cn-1Cn
40/48
정리 6.6
• 여기서 명백히 G는 Chomsky 정규형이며,
정리 6.1에 의해서 L(G1)=L(G)가 성립
• 그러므로
– L(G) = L(G)
41/48
예제 6.8
• 다음 생성규칙을 Chomsky 정규형으로
변형
– S->ABa
– A->aab
– B->Ac
42/48
–S->ABa
–A->aab
–B->Ac
예제 6.8
• 단계1에서 새변수
Ba,Bb,Bc 도입
–
–
–
–
–
–
S->ABBa
A->BaBaBb
B->ABc
Ba->a
Bb->b
Bc->c
• 단계2에서 추가 변수
도입
–
–
–
–
–
–
–
–
S->AD1
D1->BBa
A->BaD2
D2->BaBb
B->ABc
Ba->a
Bb->b
Bc->c
43/48
Greibach 정규형
• 생성규칙의 우변에 있는 문자열의 길이
에는 제한을 두지 않음
• 대신 변수와 단말 심볼들이 나타나는 위
치에 제한을 둠
44/48
정의 6.5
• 문맥-자유 문법 G에서 모든 생성규칙이 다음의
형태를 만족하면 G를 Greibach 정규형이라 함
– A->ax
여기서 a  T이고 x  V*임
• A->ax는 Greibach와 S-문법에 모두 공통
• 그러나 Greibach에는 쌍(A,a)에 대한 제한 없음
45/48
예제 6.9
• Greibach 정규형이 아
닌 예제
– S->AB
– A->aA|bB|b
– B->b
• Greibach 정규형으로
변환가능
– S->aAB|bBB|bB
– A->aA|bB|b
– B->b
46/48
예제 6.10
• 다음 문법을 Greibach 정규형으로 변환
– S->abSb|aa
Chomsky 정규형의 구성에서 소개된 방법을
이용하여 단말 a와 b를 위한 새로운 두변수
A와 B를 이용
• S->aBSB|aA
• A->a
• B->b
47/48
정리 6.7
•  가 L(G)에 속하지 않은 모든 문맥-자유
문법 G에 대해서 동치인 Greibach 정규형
의 문법 G가 존재함
48/48