52
컴컴컴컴 컴컴 컴컴컴컴 컴컴 컴 5 컴 Context-Free 컴컴

제 5 장 Context-Free 문법

  • Upload
    ethel

  • View
    61

  • Download
    0

Embed Size (px)

DESCRIPTION

컴파일러 입문. 제 5 장 Context-Free 문법. 목 차. 5.1 서론 5.2 유도와 유도 트리 5.3 문법 변환 5.4 CFG 표기법 5.5 푸시다운 오토마다 (PDA) 5.6 context free 언어와 PDA 언어. 5.1 서론. 정규표현 : 토큰의 어휘구조 인식기 : FA(  scanner ) id = l(l + d) * , sc = ´(c + ´´) * ´ CFG : 프로그래밍 언어의 구문 구조 인식기 : PDA(  parser ) - PowerPoint PPT Presentation

Citation preview

Page 1: 제  5  장  Context-Free  문법

컴파일러 입문컴파일러 입문

제 5 장 Context-Free 문법

Page 2: 제  5  장  Context-Free  문법

Context-free Grammar Page 2

목 차목 차5.1 서론

5.2 유도와 유도 트리

5.3 문법 변환

5.4 CFG 표기법

5.5 푸시다운 오토마다 (PDA)

5.6 context free 언어와 PDA 언어

Page 3: 제  5  장  Context-Free  문법

Context-free Grammar Page 3

5.1 5.1 서론서론 정규표현 정규표현 : 토큰의 어휘구조

인식기 : FA( scanner) id = l(l + d)* , sc = ´(c + ´´)*´

CFG CFG : 프로그래밍 언어의 구문 구조

인식기 : PDA( parser)

프로그래밍 언어의 구문 구조를 CFGCFG 로 표현할 경우의 장점 :

1. 간단하고 이해하기 쉽다 .2. CFG 로부터 인식기를 자동으로 구성할 수 있다 .3. 프로그램의 구조를 생성규칙에 의해 구분할 수 있으므로 번역시에 유용하다 .

Page 4: 제  5  장  Context-Free  문법

Context-free Grammar Page 4

문법 심벌들의 일반적인 표기법

Terminal 심벌 a, b, c 와 같은 알파벳 시작 부분의 소문자와 숫자 0,1,2,…,9; +, - 와 같은 연산자 기호와 세미콜론 , 콤마 , 괄호와 같은 구분자 ‘if’ 또는 ‘ then’ 과 같이 ‘과 ’사이에 표기된 문법 심벌

Nonterminal 심벌 A, B, C 와 같은 알파벳 시작 부분의 대문자 ; S 는 보통 시작 심벌 (start symbol) 을 나타낸다 . <stmt> 나 <expr> 과 같이 < 와 > 로 묶어서 나타낸 문법 심벌

만약 아무런 언급이 없으면 첫번째 생성 규칙의 왼쪽에 있는 것이 시작 심벌이다 .

Aa1, Aa2, …, Aak 와 같이 생성 규칙의 왼쪽이 모두 A 인 경우에 , Aa1|a2|…|ak 로 간단히 표기 할 수 있다 . 이것을 A 에 대한 택일 규칙이라 부른다 .

Page 5: 제  5  장  Context-Free  문법

Context-free Grammar Page 5

CFG 의 형태 : N. Chomsky 의 type 2type 2 문법 A , where A VN and V*.

재귀적 구성 ex) E E OP E | (E) | -E | id

OP | | | /

VN : < 와 > 사이에 기술된 symbol.

VT : ' 와 ' 사이에 기술된 symbol.

VN = E, OP VT = (, ), , id, , , /

ex) <if_statement> 'if' <condition> 'then' <statement>

Page 6: 제  5  장  Context-Free  문법

Context-free Grammar Page 6

5.2 5.2 유도와 유도 트리유도와 유도 트리 정의 : 1 2

시작 심벌로부터 문장을 생성하는 과정에서 nonterminal을 이 nonterminal 로 시작되는 생성 규칙의 right hand side 로 대치하는 과정 .

(1) : derives in one step.

if A P, , V* then A .

(2) : derives in zero or more steps.

1. V*,

2. if and then

(3) : derives in one or more steps.

Text p.163

*

**

+

*

Page 7: 제  5  장  Context-Free  문법

Context-free Grammar Page 7

L(G) : G 에 의해서 생성된 언어 = { | S , V∈ T*}

정의 : 문장 : S , VT* 모두 terminal 로만 구성 .

문장의 형태 : S , V*.

대치될 nonterminal 의 선택 문장형태에서 어느 nonterminal 을 선택할 것인가 ?

A , where V*.

좌측 유도 : 가장 왼쪽에 있는 nonterminal 을 대치해 나가는 방법 . 우측 유도 : 가장 오른쪽에 있는 nonterminal 을 대치 .

*

*

*

Page 8: 제  5  장  Context-Free  문법

Context-free Grammar Page 8

유도순서 유도과정의 각 단계에서 문장형태의 가장 왼쪽에 있는 nonterninal

을 대치하는 경우 이를 좌측유도 (leftmost derivation) 라한다 0 1 ... n

in i for all i, 0 i n-1. i i+1 : 가장 왼쪽에 있는 nonterminal 을 차례로 대치 .

parse : parser 의 출력 형태 중에 한가지 . left parse : leftmost derivation 에서 적용된 생성 규칙 번호 .

top-downtop-down parsing start symbol 로부터 sentence 를 생성

right parse : rightmost derivation 에서 적용된 생성 규칙 번호의 역순 . bottom-upbottom-up parsing sentence 로부터 nonterminal 로 reduce 되어 결국엔 start symbol 로 re

duce.

Page 9: 제  5  장  Context-Free  문법

Context-free Grammar Page 9

유도 트리유도 트리::= 문장이 유도되는 과정을 트리형태표현 .::= 문법에 적용되는 문장의 계층적구조 정의 : 유도트리 CFG G = (VN,VT,P,S) & VT

* a derivation tree.

1. nodes: symbol of V(VN VT)

2. root node: S(start symbol) 3. if A VN, then a node A has at least one descendent.

4. if A A1A2...An P, then A 가 subtree 의 root 가 되고 좌로부터

A1,A2,...,An 가 A 의 자 노드가 되도록 tree 를 구성

A1 A2

A

‥ ‥ An

Page 10: 제  5  장  Context-Free  문법

Context-free Grammar Page 10

A1 A2

A

A2 A1

A

유도트리의 노드 내부 (nonterminal) 노드 VN

외부 (terminal) 노드 VT {}

순서 트리 - child node 들의 위치가 순서를 갖는 트리 , 따라서 유도트리는 순서트리이다 .

Page 11: 제  5  장  Context-Free  문법

Context-free Grammar Page 11

예 ) G : E → E + T | T T → T * F | F F → ( E ) | a

: a + a * a 스트링 a + a * a 의 유도 트리 :

※ 각각의 유도 방법에 따라 derivation tree 모양은 변하지 않는다 . 즉 , 한 문장에 대한 tree 모양은 unique 하다 .

+

T

F

T F

E

aF

E

T

*

a a

Page 12: 제  5  장  Context-Free  문법

Context-free Grammar Page 12

Ambiguous Nondeterministic

(X)

(O)

Ambiguous( 모호한 ) 문법 문법 G 에 의해 생성되는 어떤 문장이 두개 이상의 유도 트리 (non

deterministic) 를 갖는다면 문법 G 는 모호하다 .

설명 : 같은 문장를 생성하는 트리가 2 개 이상 존재할 때

이 문법를 모호하다고 하며 , 결정적인 파싱을 위해 nondeterministic 한 문법을 deterministic 하게 변환해야 한다 .

nondeterministic

Page 13: 제  5  장  Context-Free  문법

Context-free Grammar Page 13

S

thenCif elseS S

thenCifb S

b a

a

1)S

thenCif S

thenCifb S else

b a

S

a

2)

“G: ambiguous 증명” 하나의 sentence 로 부터 2 개 이상의 derivation tree 생성 . ex) dangling elsedangling else problem:

G: S if C then S else S | if C then S | a

C b

: if b then if b then a else a

Page 14: 제  5  장  Context-Free  문법

Context-free Grammar Page 14

※ else : 일반적으로 right associativity 를 만족한다 . if 문장의 경우 자신과 가장 가까운 if 와 결합함으로 두개의 트리 중 일반적으로 2) 를 만족 .

일반적으로 다음과 같은 형태의 생성규칙이 있다면 모호성이 나타난다 .

생성형태 : A AA 문장형태 : AAA 트리형태 :

or

A

A α A

A α A A α A

A

A α A

Page 15: 제  5  장  Context-Free  문법

Context-free Grammar Page 15

모호한모호한 분명한 분명한 1) 새로운 nonterminal 을 도입해서 분명한 문법으로 변환 . 2) 이 과정에서 , 우선순위 & 결합법칙 규칙을 이용 .

비결정적 결정적

예 ) G : E E E | E + E | a

: a a + a 우선순위 방법을 적용

a +

1) + > *

a

E

E * E

E E

a

*

+

E E

E E

E

a

aa

2) * > +

Page 16: 제  5  장  Context-Free  문법

Context-free Grammar Page 16

새로운 nonterminal 의 도입

G : E E + T | T

T T * F | F

F a

+

T

F

T F

E

aF

E

T

*

a a

※ 그런데, 문법 의 모호성 을검사 할 수 있는 알고리즘 이존재하지 않으며 분명 하게바꾸는 형식적인 방법도 존재하지않는다 .

Page 17: 제  5  장  Context-Free  문법

Context-free Grammar Page 17

(Unambiguous) 분명한 문법으로 바꾼 예 :G : expression expression + term

┃ expression - term ┃ term term term * factor

┃ term / factor ┃ factor

factor primary ↑ factor ┃ primary

primary - primary ┃ element

element ( exp ) ┃ id

유도트리가 하나이므로 위 문법은 분명하다 .

Page 18: 제  5  장  Context-Free  문법

Context-free Grammar Page 18

id * id + id 의 유도트리 :

유도트리가 하나 이므로 위 문법은 분명하다 .

expression

expression expression

term factor

term factor

factor primary

primary element

element id

id

primary

element

id

+

+

Page 19: 제  5  장  Context-Free  문법

Context-free Grammar Page 19

5.3.1 필요 없는 생성 규칙 제거

5.3.2 - 생성 규칙제거

5.3.3 단일 생성 규칙 제거

5.3.4 문법의 기본적인 형태

5.3 5.3 문법 변환문법 변환 Text p.172

Page 20: 제  5  장  Context-Free  문법

Context-free Grammar Page 20

정의 : 만약 L(G) = L(G2) 이면 문법 G1 과 G2 는 동등하다 .

두가지 문법 변환 방법 대입 :

if A B, B 1 | 2 | 3 … | n P, then

P' = ( P - {A B } ) {A 1 | 2 | ... | n }.

확장 : A <=> A X, X or A X, X ex) P : S aA | bB

A bB | b

B aA | a

모든 문장은 대입과 확장기법을 통하여 동등한 문법으로 변환 할 수 있다 .

Page 21: 제  5  장  Context-Free  문법

Context-free Grammar Page 21

5.3.15.3.1 필요 없는 생성규칙 제거필요 없는 생성규칙 제거 문장을 생성하는데 적용할 수 없는 생성규칙들은 모두 제거할 수 있으며 필요 없는 생성 규칙이라 한다 . eliminated 의 정의 정의 : 문법심볼에 대하여 다음과 같은 형태가 존재하지 않으면 x 는 필요 없는 심볼이다 . ∃S Xy xy, ,x,y VT

*.

두가지 제거 방법 Terminating nonterminal : A , , where A VN and VT

*.

Accessible symbol : S X,   where X V and ∈ , V*.

Page 22: 제  5  장  Context-Free  문법

Context-free Grammar Page 22

Terminating nonterminal 을 구하는 방법 :

Algorithm terminating; begin

VN':= { A | A P, ∈ ∈ VT* };

repeat VN' := VN' { ∪ A | A P, ∈ (∈ VN' U VT )* }

until no change end.

Accessible symbol 을 구하는 방법 :

Algorithm accessible; begin

V ' := { S }; (* initialization *) repeat

V ' := V ' { X | some A X P, A ∈ ∈ V ' }

until no change end.

Text p.174

Text p.175

Page 23: 제  5  장  Context-Free  문법

Context-free Grammar Page 23

필요없는 생성규칙 제거 : Terminating nonterminal 알고리즘 적용 . Accessible symbol 알고리즘 적용 .

ex) S A | B

A aB | bS | b

B AB | BB

C AS | b

연습문제 Text p.2115.11 (1)

Page 24: 제  5  장  Context-Free  문법

Context-free Grammar Page 24

5.3.25.3.2 -- 생성규칙 제거생성규칙 제거 정의 : 다음과 같은 생성규칙을 - 생성규칙이라 한다 .

생성규칙의 형태가 A -> 인 경우 정의 :

CFC G=(VN,VT,P,S) 가 다음과 같은 조건을 가질 때 -free 라한다 .

(1) P 가 - 생성규칙을 갖지 않거나 ,

(2) S 하나만이 - 생성규칙을 가지며 , 다른 생성규칙의 오른쪽

에 S 가 나타나지 않아야 한다 .

Page 25: 제  5  장  Context-Free  문법

Context-free Grammar Page 25

Text p.178 -free 문법으로 변환 :

Algorithm -free;begin

VN := { A | A => , A VN }; (* nullable nonterminal *)

P' := P – { A | A VN };

for A 0B11B2... Bkk P∈ ' , where i ≠ and Bi VN do

if Bi P' then∈ P' = P' { A ∪ 0X1 1X2... Xkk | Xi = Bi or Xi = }else

P' = P' { A ∪ 0X1 1X2... Xkk | Xi = }end if

end for

if S VN then P ' := P ' { S∪ ' | S } end.

ex1) A AaA | ε ex2) S aAbB A aA | ε

B ε

+

Page 26: 제  5  장  Context-Free  문법

Context-free Grammar Page 26

5.3.5.3.33 단일단일 생성 규칙의 제거생성 규칙의 제거 정의 : 생성규칙의 형태가 A B 와 같이 생성규칙의 오른쪽에 한 개의 nonterminal 이 나오는 생성규칙 . Algorithm Remove_Single_Production;

begin

P' := P – { A B | A, B VN};

for each A VN do

VNA = { B | A B } ;

for each B VNA do for each B P' do (* not single production *) P' := P' { ∪ A α}

end for end for

end for end.

main idea : grammar grammar substitutionsubstitution.

Text p.180

+

Page 27: 제  5  장  Context-Free  문법

Context-free Grammar Page 27

ex) S aA | A

A bA | C

C c

S aA | bA | c

A bA | c

C c

정의 :

Context-free 문법 G = ( VN , VT, P, S ) 가 어떤 AVN 에 A A 형태의 유도

과정을 갖지 않을 때 cycle-free 하다고 한다 . 만약 G 가 cycle-free

하고

-free, 그리고 필요 없는 심벌을 가지지 않을 때 proper 하다고 한다 .

연습문제 Text p.2115.13 (1)

*

Page 28: 제  5  장  Context-Free  문법

Context-free Grammar Page 28

5.3.45.3.4 문법의 기본적인 형태문법의 기본적인 형태 정의 : CFG G = ( VN , VT, P, S ) 의 생성규칙이 다음과 같은 형태로 이루어져

있을 때 , G 를 정규 형태 (normal form) 혹은 촘스키 정규 형태 (CFN : Chomsky Normal Form) 라 한다 .

A BC 여기서 A,B,C VN

A a 여기서 a VT

만약 L(G) 라면 S 이고 S 는 생성규칙의 오른쪽에 나타나지 않는다 .

Conversion to CNFA → X1 X2....XK, K > 2⇒ A → X1´ <X2 ... XK> <X2...XK> → X2´ <X3 ... XK>

…… <XK-1...XK> → XK-1´ XK´ , where Xi´= Xi if Xi ∈ VN

add Xi´= Xi if Xi ∈ VT

ex) S → bA A → bAA | aS | a

Page 29: 제  5  장  Context-Free  문법

Context-free Grammar Page 29

Definition : CFG G = (VN, VT,P,S) 가 -free 이고 - 생성 규칙

이 존재하지 않는 A a, a VT, VN*

형태의 생성 규칙을 갖는다면 표준 형태 (standard form) 혹은 Greibach 정규 형태 (GNF : Greibach Normal Form) 이라 한다 .

Page 30: 제  5  장  Context-Free  문법

Context-free Grammar Page 30

5.4 CFG 5.4 CFG 표기법표기법☞ BNF(Backus-Naur Form), EBNF(Extended BNF), Syntax Diagram

BNF 특수한 meta symbol 을 사용하여 프로그래밍 언어의 구문을 명시하는 표기법 . meta symbol : 새로운 언어의 구문을 표기하기 위하여 도입된 심벌들 .

terminal symbol : ‘ ’ grammar symbol : VN ∪ VT

nonterminal symbol < > ::= ( 치환 )nonterminal symbol 의 rewriting | ( 또는 )

Page 31: 제  5  장  Context-Free  문법

Context-free Grammar Page 31

예 1) VN = {S, A, B}, VT = {a, b}

P = {S AB, A aA, A a, B Bb, B b}

BNF 표현 :

<S> ::= <A> <B>

<A> ::= a <A> | a

<B> ::= <B> b | b

예 2) Compound statement ( 복합문 )

BNF 표현 :

<compound_statement> ::= ‘{’<statement_list> ‘}’ <statement_list> ::= <statement_list> <statement> | <statement>

<S> ::= <A> <B> <A> ::= ' a ' <A> | ' a ' <B> ::= <B> ' b ' | ' b '

Page 32: 제  5  장  Context-Free  문법

Context-free Grammar Page 32

Extended BNF(EBNF) 특수한 의미를 갖는 meta symbol 을 사용하여 반복되는 부분이나 선택적인 부분을 간결하게 표현 . meta symbol

예 1) <compound_statement> ::= ‘{’ <statement> {<statement>} ‘}’

예 2) <if-st> ::= 'if' ‘(’ <expression> ‘)’ <statement> [‘else’ <statement>]

예 3) <exp> ::= <exp> + <exp> | <exp> - <exp> | <exp> <exp> | <exp> / <exp> <exp> ::= <exp> ( | | | / ) <exp>

반복되는 부분 (repetitive part): { } 선택적인 부분 (optional part): [ ] 괄호와 택일 연산자 (alternative): ( | )

Page 33: 제  5  장  Context-Free  문법

Context-free Grammar Page 33

Syntax dlagram ( 문법흐름도 , 구문 도표 ) 초보자가 쉽게 이해할 수 있도록 구문 구조를 도식화하는 방법 syntax diagram 에 사용하는 그래픽 아이템 :

원 : terminal symbol 사각형 : nonterminal symbol 화살표 : 흐름 경로

syntax diagram 을 그리는 방법 :1. terminal a

2. nonterminal A

a

A

Page 34: 제  5  장  Context-Free  문법

Context-free Grammar Page 34

3. A ::= X1X2... Xn

(1) Xi 가 nonterminal 인 경우 :

(2) Xi 가 terminal 인 경우 :

4. A ::= 1┃2┃...┃ n

α1

α2...

αn

A

X1 Xnz ····A X2

X1 Xn····A X2

Page 35: 제  5  장  Context-Free  문법

Context-free Grammar Page 35

5. EBNF A ::= {}

6. EBNF A ::= []

7. EBNF A ::= (1┃2)

α

A

A

α

α1

α2

βA

Page 36: 제  5  장  Context-Free  문법

Context-free Grammar Page 36

( 예 ) A ::= a | (B) B ::= AC C ::= {+A}

A CB

A

C

+

A

( B )

α

Page 37: 제  5  장  Context-Free  문법

Context-free Grammar Page 37

A

( A )

α

A +

Page 38: 제  5  장  Context-Free  문법

Context-free Grammar Page 38

5.5 5.5 푸시다운 오토마타푸시다운 오토마타

PDA(Push Down Automata) 는 인식기의

한 종류로 유한 상태 제어 , 입력 테이프

그리고 스택으로 구성되어있다 .

Page 39: 제  5  장  Context-Free  문법

Context-free Grammar Page 39

CFG 의 인식기 push-down list(stack), input tape, finite state control

a1 a2 ··· ai ··· an

Finite State Control

Z1

Z2

:

Zn

Stack

: input tape

Text p.197

Page 40: 제  5  장  Context-Free  문법

Context-free Grammar Page 40

Text p.197 정의 : PDA P = (Q, , , , q0, Z0, F),where, Q : 상태 심벌의 유한 집합 .

: 입력 알파벳의 유한 집합 . : 스택 심벌의 유한 집합 . : 사상 함수 Q ( {∪ }) Q *, q0 Q : ∈ 시작 상태 (start state), Z0 F∈ : 스택의 시작 심벌 , F ⊆ Q : 종결 상태 (final state) 의 집합이다 .

: Q ( {∪ }) Q * (q,a,Z) ={(p1, 1), (p2, 2), ... ,(pn, n)} 의미 : 현재 상태가 q 이고 입력 심벌이 a 이며 스택 top 심벌이 Z 일 때 , 다음 상태는 n 개 중에 하나이며 만약 (pi, i) 가 선택되었다면 그 의미는 다음과 같다 .

현재의 q 상태에서 입력 a 를 본 다음 상태는 pi 이다 . 스택 top 심볼 Z 를 i 로 대치한다 .

Page 41: 제  5  장  Context-Free  문법

Context-free Grammar Page 41

P 의 형태 : (q, , ) where, q : 현재 상태

: 입력 심볼 : 스택의 내용

P 의 이동 (move)ː┣ a : (q, a, Z) ┣ ( q', , ) a = : (q, , Z) ┣ (q', , ) <===> -move

※ ┣ : zero or more moves, ┣ : one or more moves

L(P) : 시작상태에서 를 다 본 상태가 종결 상태에 속하면 는 P 에 의해 인식 .

시작 : (q0, , Z0) 종결 : (q, , α), where q F,∈ ∈ *

L(P) = {ω | (q0, , Z0) ┣ (q, , ), q F, ∈ ∈ * }.

*

+

+

Page 42: 제  5  장  Context-Free  문법

Context-free Grammar Page 42

ex) P = ({q0, q1, q2}, {0, 1}, {Z, 0}, , q0, Z, {q0}),

where, (q0, 0, Z) = {(q1, 0Z)} (q1, 0, 0) = {(q1, 00)}

(q1, 1, 0) = {(q2, )} (q2, 1, 0) = {(q2, )}

(q2, , Z) = {(q0, )}

스트링 0011 의 인식 과정 :

(q0, 0011, Z) ┣ (q1, 011, 0Z) ┣ (q1, 11, 00Z) ┣ (qq22, 1, 0Z) ┣ (qq22, , Z)

┣ (qq00, , )

스트링 0n1n(n≥1) 의 인식 과정 :

(q0, 0n1n, Z) ┣ (q1, 0

n-11n, 0Z) ┣ n-1 (q1, 1n, 0nZ)

┣ (q2, 1n-1, 0n-1Z) ┣ n-1 (q2, , Z)

┣ (q0, , )

∴ L(P) = {0n1n | n 1}.

Page 43: 제  5  장  Context-Free  문법

Context-free Grammar Page 43

확장된 PDA

δ : Q × ( {∪ }) × * → Q × *

한번의 move 로 stack top 부분에 있는 유한 길이의 string 을 다른 string 으로 대치 .

(q, a, ) ┣ (q', , )

stack 이 empty 일 때도 move 가 발생

예 ) PDA = ({q0, qf}, {a, b}, {a, b, S, Z}, , q0, Z, {qf})

where, (q0, a, ) = {(q0, a)} (q0, b, ) = {(q0, b)} (q0, , ) = {(q0, S)} S : center mark※ (q0, , aSa) = {(q0, S)} (q0, , bSb) = {(q0, S)} (q0, , SZ ) = {(qf, )}

Text p.201

Page 44: 제  5  장  Context-Free  문법

Context-free Grammar Page 44

스트링 aabbaa 의 인식 과정 :

(q0, aabbaa, Z) (q┣ 0, abbaa, aZ)

┣ (q00, bbaa, aaZ)

┣ (q00, baa, baaZ)

┣ (q00, baa, SbaaZ)

┣ (q00, aa, bSbaaZ)

┣ (q00, aa, SaaZ)

┣ (q00, a, aSaaZ)

┣ (q00, a, SaZ)

┣ (q00, , aSaZ)

┣ (q00, , SZ)

┣ (qff, , )

∴ L = { R | {a, b}∈ +}.

Text p.201

Page 45: 제  5  장  Context-Free  문법

Context-free Grammar Page 45

Le(P) : stack 을 empty 로 만드는 PDA 에 의해 인식되는 string의 집합 . 즉 , 입력 심벌을 모두 보고 스택이 empty 일 때만 인식되는 string 의 집합 .

∴ Le(P) = { ┃ (q0, , Z0) ┣ (q, , ), q ∈ Q} .

Le(P’) = L(P) 인 P’ 의 구성 : (text p. 202)

P = (Q, , , , q0, Z0, F) ===> P’ = (Q∪{qe, q’}, , ∪{Z’}, ’, q’, Z’, ),

where ’ : 1) 모든 q ∈ Q, a ∈ ∪{}, Z ∈ 에 대해 , ’(q, a, Z) = (q, a, Z).

2) ’(q’, , Z’) = {(q0, Z0Z’)}. Z’ : bottom marker 3) 모든 q ∈ F, Z ∈ ∪{Z’} 에 대해 ,

’(q, , Z) 에 (qe, ) 를 포함 . 4) 모든 Z ∈ ∪{Z’} 에 대해 , ’(qe, , Z) = {(qe, )}

*

Page 46: 제  5  장  Context-Free  문법

Context-free Grammar Page 46

5.6 5.6 Context-free 언어와 PDA 언어 PDA 언어가 Context free 언어이다 . CFG <===> PDA

CFG ===> PDA (for a given context-free grammar, we can construct a PDA accepting L(G).)

Top-Down Method leftmost derivation, A

Bottom-Up Method rightmost derivation, ==>A

PDA ===> CFG

Page 47: 제  5  장  Context-Free  문법

Context-free Grammar Page 47

Top-Down Method CFG G 로부터 Le(R)=L(G) 인 PDA R 의 구성 For a given G = (VN, VT, P, S),

construct R = ({q}, VT, VN V∪ T, , q, S, ), where : 1) if A P, then ∈ (q,,A) 에 (q,) 를 포함 .

2) a V∈ T 에 대해 , (q, a, a) = {(q, )}.

ex) G = ({E, T, F}, {a, , +, (, )}, P, E), P : E E + T | T T T F | F F (E) | a

===> R = ({q}, , , , q, E, )

where : 1) (q, , E) = {(q, E + T), (q, T)} 2) (q, , T) = {(q, T F), (q, F)}

3) (q, , F) = {(q, (E)), (q, a)} 4) (q, t, t) = {(q, )}, t {a, +, ∈ , (, )}.

Text p.204

Page 48: 제  5  장  Context-Free  문법

Context-free Grammar Page 48

스트링 a + a a 의 인식 과정 :

(q, a + a a, E) ┣ (q, a + a a, E + T) ┣ (q, a + a a, T + T) ┣ (q, a + a a, F + T) ┣ (q, a + a a, a + T) ┣ (q, + a a, + T) ┣ (q, a a, T) ┣ (q, a a, T F) ┣ (q, a a, F F) ┣ (q, a a, a F) ┣ (q, a, F) ┣ (q, a, F)

┣ (q, a, a) ┣ (q, , )

※ 스택 top 은 세 번째 구성 요소의 왼쪽 .

Page 49: 제  5  장  Context-Free  문법

Context-free Grammar Page 49

Bottom-Up Method CFG ===> extended PDA(rightmost derivation)

ex) G = ({E, T, F}, {a, , +, (, )}, P, E),P : E E + T | T T T F | F F (E) | a

===> R = ({q, r}, VT, VN V∪ T {$}, ∪ , q, $, {r})

: 1) (q, t, ) = {(q, t)}, t {a, +, ∈ , (, )} shift 2) (q, , E + T) = {(q, E)} (q, , T) = {(q, E)} (q, , T * F) = {(q, T)} (q, , F) = {(q, T)} (q, , (E)) = {(q, F)} (q, , a) = {(q, F)} 3) (q, , $E) = {(r, )}

Page 50: 제  5  장  Context-Free  문법

Context-free Grammar Page 50

스트링 a + a a 의 인식 과정

(q, a + a a, $) ┣ (q, + a a, $ a) ┣ (q, + a a, $ F) ┣ (q, + a a, $ T) ┣ (q, + a a, $ E) ┣ (q, a a, $ E +) ┣ (q, a, $ E + a) ┣ (q, a, $ E + F) ┣ (q, a, $ E + T) ┣ (q, a, $ E + T ) ┣ (q, , $ E + T a) ┣ (q, , $ E + T F) ┣ (q, , $ E + T) ┣ (q, , $ E) ┣ (r, , )

※ 스택 top 은 세 번째 구성 요소의 오른쪽 .

Page 51: 제  5  장  Context-Free  문법

Context-free Grammar Page 51

Text p.207 PDA P 로부터 L(G) = Le(P) 인 CFG G 의 구성

Given PDA P = (Q, , , , q0, Z0, F)

===> Construct cfg G = (VN, VT, P, S)

where (1) VN = {[qZr] | q, r Q, Z∈ ∈} {∪ S}.

(2) VT = .

(3) P : ① (q, a, Z) 가 k 1 에 대해 (r, X1... XK) 를 가지면

[qZsk] a[r X1s1][s1X2s2] ... [Sk-1Xksk] 를 P 에 추가 .

s1, s2, ..., sk Q.∈

② (q, a, Z) 가 (r, ) 를 포함하면 생성규칙 [qZr] a 를 P 에 추가 . ③ 모든 q Q∈ 에 대해 S [q0Z0q] 를 P 에 추가 .

(4) S : start symbol.

Page 52: 제  5  장  Context-Free  문법

Context-free Grammar Page 52

Text p.207 결론

L 은 CFG G 에 의해 생성되는 언어 L(G) 이다 .

L 은 PDA P 에 의해 인식되는 언어 L(P) 이다 .

L 은 PDA P 에 의해 인식되는 언어 Le(P) 이다 .

L 은 extended PDA 에 의해 인식되는 언어 L(P) 이다 .