context-free languages

44
Context-Free Languages

Upload: ona

Post on 17-Jan-2016

75 views

Category:

Documents


0 download

DESCRIPTION

Context-Free Languages. Introduction. -> -> -> -> -> laughs -> apple | girl -> red. Introduction. -> + - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Context-Free Languages

Context-Free Languages

Page 2: Context-Free Languages

Introduction

• <sentence> -> <noun phrase><verb phrase>

• <noun phrase> -> <adjective><noun phrase>

• <noun phrase> -> <noun>

• <verb phrase> -> <verb>

• <verb> -> laughs

• <noun> -> apple | girl

• <adjective> -> red

Page 3: Context-Free Languages

Introduction

• <expression> -> <expression> + <expression>

• <expression> -> <expression> * <expression>

• <expression> -> (<expression>)

• <expression> -> id

Page 4: Context-Free Languages

Introduction

<expression> => <expression> * <expression>

=> (<expression>)*<expression>

=> (<expression>)*id

=>(<expression>+<expression>)*id

=>(<expression> + id) * id

=>(id + id) * id

Page 5: Context-Free Languages

문맥자유언어• 문맥자유언어

– 프로그래밍 언어 설계에 이용됨– 효율적인 컴파일러 작성에 사용됨

Page 6: Context-Free Languages

문법 제약 완화• 제약

– 생성규칙의 좌변은 반드시 하나의 변수– 생성규칙의 우변은 특별한 형태 ( 좌선형 ,

우선형 문법 )

• 완화– 우변에 어떤 문자열이든 허용 ( 문맥자유문법 )

Page 7: Context-Free Languages

정의 5.1

• 문법 G = (V,T,S,P) 에서 모든 생성규칙이 A -> x. 의 형태를 가지면 G 를 문맥 - 자유문법 (context-fr

ee grammar:CFG) 라고 한다 . 여기서 A V 이고 , x (V T)* 이다 .

• 또한 언어 L 이 L = L(G) 를 만족하는 문맥 - 자유 문법 G 가 존재하고 오직 그럴 때에만 L 을 문맥 -자유 언어 (context-free language:CFL) 라고 한다 .

Page 8: Context-Free Languages

예제 5.1

• 생성규칙으로 문법 G = ({S}, {a,b}, S, P),

S -> aSa,

S -> bSb,

S -> , 는 문맥 - 자유 문법이다 .• 유도과정

– S=>aSa=>aaSaa=>aabSbaa=>aabbaa

• L(G) = {wwR : w {a,b}*}.

Page 9: Context-Free Languages

예제 5.2

• 문법 G = ({S, A, B}, {a,b}, S, P) 는 문맥 - 자유 문법이다 .

S -> abB,

A -> aaBb,

B -> bbAa,

A ->

• L(G) = {ab(bbaa)nbba(ba)n : n 0}

Page 10: Context-Free Languages

문법

• 선형문법 • 정규문법 • 문맥 - 자유 문법

Page 11: Context-Free Languages

예제 5.3

• 언어 L = {anbm : n m} 는 문맥 - 자유 언어이다 .

n > m 인 경우 n < m 인 경우도 해결가능 S -> AS1, S -> AS1|S1B,

S1 -> aS1b | , S1 -> aS1b | ,

A -> aA | a. A -> aA | a,

B -> bB | b.

Page 12: Context-Free Languages

예제 5.4

• 다음의 생성규칙을 갖는 문맥 - 자유 문법 G 를 고려해보자

S -> aSb | SS | .

• abaabb, aababb, ababab, …

• L = {w {a, b}* : na(w) = nb(w) and na(v) nb(v), 단 v 는 w 의 접두부임 }

Page 13: Context-Free Languages

좌측우선 / 우측우선 유도

1. S -> AB

2. A -> aaA

3. A ->

4. B -> Bb

5. B ->

• aab 의 유도과정

S=>AB=>aaAB=>aaB =>aaBb=>aab

S=>AB=>Abb=>aaABb=>aaAb=>aab

1 2 3

4 5

1 4 2

5 3

Page 14: Context-Free Languages

정의 5.2

• 유도 과정의 각 단계에서 각 문장 형태의 가장 좌측 변수가 대체되는 유도를 좌측우선유도

• 가장 우측 변수가 대체되는 유도를 우측우선 유도라고 함

Page 15: Context-Free Languages

예제 5.5

• 다음의 생성규칙을 갖는 문맥 - 자유 문법을 고려해 보자 .

S -> aAB,

A -> bBb,

B -> A | .

문자열 abbbb 에 대한 좌 / 우측 우선 유도를 고려

Page 16: Context-Free Languages

유도트리

• 문자열의 유도 과정을 보이는 하나의 방법

• 유도 트리는 순서트리 (ordered tree)– 부모노드 : 생성규칙의 좌변에 있는 변수– 자식노드 : 생성규칙의 우변에 있는 심볼

Page 17: Context-Free Languages

유도트리

• A->abABC

A

a b A B c

Page 18: Context-Free Languages

정의 5.3

• G=(V,T,S,P) 가 문맥 - 자유 문법이라 하면 , 순서 트리가 G 의 유도 트리가 되기 위한 필요충분조건

1. 루트 노드의 라벨은 시작 심볼 S2. 각 리프 노드의 라벨은 T {} 의 심볼3. 각 내부 노드의 라벨은 V 의 심볼4. 만약 라벨이 AV 인 노드가 라벨이 a1, a2, …, an 인

자식 노드들을 갖는다면 , P 는 다음 형태의 생성규칙을 갖고 있어야 함

A->a1a2…an5. 라벨이 인 자식 노드는 형제 노드가 없다 . 즉 , 라벨이

인 자식 노드를 갖는 노드는 다른 자식들을 가질 수 없음

Page 19: Context-Free Languages

부분 유도트리

2.a 모든 리프 노드의 라벨은 VT{} 의 심볼3. 각 내부 노드의 라벨은 V 의 심볼4. 만약 라벨이 AV 인 노드가 라벨이 a1, a2,

…, an 인 자식 노드들을 갖는다면 , P 는 다음 형태의 생성규칙을 갖고 있어야 함

A->a1,a2,…,an5. 라벨이 인 자식 노드는 형제 노드가 없다 .

즉 , 라벨이 인 자식 노드를 갖는 노드는 다른 자식들을 가질 수 없음

Page 20: Context-Free Languages

예제 5.6

S -> aAB,

A -> bBb,

B -> A |

S

a A B

b B b

abbbb 유도

Page 21: Context-Free Languages

예제 5.6

S -> aAB,

A -> bBb,

B -> A |

S

a A

b B b

abbbb 유도

B

A

b B b

Page 22: Context-Free Languages

파싱과 모호성

Page 23: Context-Free Languages

파싱

• L(G) 에 속하는 w 가 유도되는 데 사용된 일련의 생성 규칙들을 찾는 과정 => 파싱

Page 24: Context-Free Languages

파싱단계 ( 좌측유도 )

1. 다음과 같은 시작 심볼을 좌변에 갖는 모든 생성규칙 S->x

시작 심볼 S 로부터 한 단계에 유도될 수 있는 모든 문장 형태 x 를 찾는다 .

2. 만약 , 어떤 x 도 w 와 일치하지 않으면 , 다음 라운드에서 각 x 의 가장 왼쪽 변수에 적용될 수 있는 모든 생성 규칙들을 적용 , 새로운 문장 형태들의 집합 생성

3. 새롭게 생성된 문장 형태들 가운데 w 로 유도될 수 없는 문장 형태는 제외

4. w 와 일치되는 문장이 생성 될 때까지 2,3 번 수행

Page 25: Context-Free Languages

파싱단계 ( 좌측유도 )

• 철저한 탐색 파싱 (exhaustive search parsing)

• 하향식 파싱 (top-down parsing)

Page 26: Context-Free Languages

예제 5.7

• 다음의 생성 규칙을 갖는 문법 G 에서 문자열 w=aabb 가 유도 되는지의 여부확인

S->SS|aSb|bSa|

Page 27: Context-Free Languages

• S->SS|aSb|bSa|• 첫 라운드

1. S=>SS2. S=>aSb3. S=>bSa4. S=>

• 유도 3, 4 는 고려대상에서 제외• 두번째 라운드에서 1 의 문장 형태 SS 의

가장 좌측 변수 S 에 생성규칙적용– S=>SS=>SSS (1 적용 )– S=>SS=>aSbS (2 적용 )– S=>SS=>bSaS (3 적용 )– S=>SS=>S (4 적용 )

w=aabb

Page 28: Context-Free Languages

• S->SS|aSb|bSa|• 두번째 라운드에서 2 의 문장 형태로부터

– S=> aSb =>aSSb (1 적용 )– S=> aSb =>aaSbb (2 적용 )– S=> aSb =>abSab (3 적용 )– S=> aSb =>ab (4 적용 )

• 위의 새로운 문장 형태들 중 일부 제외가능• 다음 라운드에서 다음과 같은 유도 생성가능

– S=> aSb(2) =>aaSbb(2) => aabb(4)

• 그러므로 aabb 는 주어진 문법에 의해 생성되는 언어에 속한다 .

w=aabb

Page 29: Context-Free Languages

철저한 탐색 파싱

• 문제점– Exhaustive search 로 인한 효율성 저하– w 가 L(G) 에 속하지 않을경우 종료되지

않을 수도 있음 => 종료조건 추가• 바람직하지 않은 생성규칙 배제

– A => – A => B

Page 30: Context-Free Languages

예제 5.8

• S->SS|aSb|bSa| => S->SS|aSb|bSa|ab|ba• 모든 문자열 w{a,b}+ 에 대하여 철저한 탐색

파싱 방법은 , 항상 |w| 단계 이내에 모든 파싱 과정이 종료하게 됨

• 이는 각 유도 단계에서 나타나는 문장 형태가 최소한 한 개의 심볼이 증가 되기 때문

• 따라서 , |w| 단계 후에는 , w 가 L(G) 에 속하는지 여부를 알게 됨

Page 31: Context-Free Languages

정리 5.3

• 모든 문맥 - 자유 문법에 대하여 임의의 w L(G) 를 |w|3 에 비례하는 수의 단계 내에 파싱하는 알고리즘이 존재한다 .

• Harrison 1987, Hopcroft and Ullman 1979

Page 32: Context-Free Languages

정의 5.4

• 문맥 - 자유 문법 G=(V,T,S,P) 의 모든 생성규칙들이 다음과 같은 형태이면 단순 문법 혹은 s- 문법 이라 불린다 .

A->ax

• 여기서 AV, aT, xV* 이고 임의의 쌍(A,a) 는 P 에서 많아야 한 번 나타난다 .

Page 33: Context-Free Languages

예제 5.9

• 문법 S->aS|bSS|c

는 s- 문법이다 .

• 문법 S->aS|bSS|aSS|c

는 s- 문법이 아니다 . 그 이유는 쌍 (S,a) 가 두 생성규칙 S->aS 와 S->aSS 에서 나타나기 때문이다 .

Page 34: Context-Free Languages

s- 문법• 만일 G 가 s- 문법이면 , L(G) 에 속한 모든

문자열 w 가 |w| 에 비례하는 노력으로 파싱 될 수 있다 .

• 문자열 w=a1a2…an 에 대한 탐색 , 좌변에 S가 있고 우변이 a1 으로 시작하는 생성규칙은 많아야 하나 존재

S=>a1A1A2…Am• 그 다음에 변수 A1 을 치환 , 역시 많아야

하나의 선택S=>a1a2B1B2…A2…Am

Page 35: Context-Free Languages

정의 5.5

• 문맥 - 자유 문법 G 에서 두 개 이상의 서로 다른 유도 트리를 갖는 문자열 w가 존재하면 , 문법 G 는 모호하다 (ambiguous) 고 한다 .

• 즉 모호성은 어떤 문자열 w 에 대해 두 개 이상의 좌측우선 혹은 우측우선 유도가 존재하는 것을 의미한다 .

Page 36: Context-Free Languages

예제 5.10

• 생성규칙 S->aSb|SS| 를 갖는 문법 G 는 모호 함• 문자열 aabb 에 대해

S

Sa b

S

a b

S

S

S

Sa b

S

a b

Page 37: Context-Free Languages

예제 5.11

• 문법 G=({E,I},{a,b,c,+,*,(,)},E,P) 의 생성규칙E-> I

E->E+E

E->E*E

E->(E)

I->a|b|c• (a+b)*c, a*b+c L(G)

Page 38: Context-Free Languages

예제 5.11

• a+b*cE

E

I

E

*E E

I

+

a

b

I

c

E

E

I

E

+E E

I

*

c

a

I

b

Page 39: Context-Free Languages

예제 5.11

• 우선순위 적용E->I

E->E+E

E->E*E

E->(E)

I->a|b|c

E->T

T->F

F->I

E->E+T

T->T*F

F->(F)

I->a|b|c

E

E

T

T

* F

+

F I

cI

a

T

F

I

b

Page 40: Context-Free Languages

문맥 - 자유 문법과프로그래밍 언어

Page 41: Context-Free Languages

정규 / 문맥 - 자유 언어• 정규언어

– 프로그래밍 언어의 어휘 , 단어 등 단순한 패턴 정의

• 문맥 - 자유 언어– 정규 언어에서 해결하지 못하는 보다 복잡한

구성 모델링

Page 42: Context-Free Languages

프로그래밍 언어• 기술 문법

– Backus-Naur 형 (BNF)– BNF 표기의 예 <expression> ::=<term>|<expression>+<term>

<term> ::=<factor>|<term>*<factor>• 단말심볼 : +, *

• ::= 는 -> 의 의미• 변수 : 처음은 ‘ <‘ 로 끝은 ‘ >’ 로 표기

Page 43: Context-Free Languages

프로그래밍 언어• Pascal 에서 if-then-else 문장

<if_statement>::=if<expression<then_clause><else_clause>

• s- 문법에서 요구하는 규칙과 유사• 프로그래밍 언어에서 왜 키워드를 쓰는가 ?

– 여러 생성규칙 중 어떤 생성규칙을 적용해야 하는가를 알려줄 수 있는 하나의 방법

Page 44: Context-Free Languages

프로그래밍 언어• 프로그래밍 언어의 모든 기능들이 s- 문법에

의해서 정의 될 수는 없다 .

• 컴파일러– LL 문법– LR 문법