푸시다운 오토마타
This presentation is the property of its rightful owner.
Sponsored Links
1 / 57

푸시다운 오토마타 PowerPoint PPT Presentation


  • 317 Views
  • Uploaded on
  • Presentation posted in: General

푸시다운 오토마타. 문맥 자유 문법. 문맥 자유 문법  문맥 자유 언어 유한 오토마타로 인식 불가능 유한 오토마타 : 유한 메모리 문맥 자유 언어 : 무한한 양의 정보 저장 능력 필요 L={a n b n : n>= 0} 모든 a 는 b 앞에 놓여야 함 a 의 개수 계산이 가능 하여야 함. 문맥 자유 문법. L={ww R } 심볼들의 순서열을 역순으로 저장하는 능력 필요 해결책 스택과 같은 작동 능력 필요 무한정의 저장 용량 허용. 푸시다운 오토마타. Input file.

Download Presentation

푸시다운 오토마타

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


4457804

푸시다운 오토마타


4457804

문맥 자유 문법

  • 문맥 자유 문법  문맥 자유 언어

    • 유한 오토마타로 인식 불가능

      • 유한 오토마타 : 유한 메모리

      • 문맥 자유 언어 : 무한한 양의 정보 저장 능력 필요

    • L={anbn : n>= 0}

      • 모든 a는 b 앞에 놓여야 함

      • a의 개수 계산이 가능 하여야 함


4457804

문맥 자유 문법

  • L={wwR}

    • 심볼들의 순서열을 역순으로 저장하는 능력 필요

  • 해결책

    • 스택과 같은 작동 능력 필요

    • 무한정의 저장 용량 허용


4457804

푸시다운 오토마타

Input file

Stack

Control unit


4457804

푸시다운 오토마타

  • 푸시다운 오토마타

    • 비결정적 문맥-자유 언어

    • 결정적 문맥-자유 언어

  • 결정적  비결정적


4457804

비결정적 푸시다운 오토마타


4457804

정의 7.1

비결정적 푸시 다운 인식기는 7개의 요소로 구성

M = ( Q, , , , q0, z, F)

Q : 제어 유닛의 내부 상태 집합

 : 입력 알파벳

: 스택 알파벳

 : 전이 함수 Q  (  {})    Q  *

q0Q : 제어 유닛의 초기 상태(start state)

z : 스택의 시작 심벌

FQ : 종료 상태(final state)의 집합


4457804

정의 7.1

 : 전이 함수 Q  (  {})  

  • 제어 유닛의 현재 상태(Q)

  • 읽혀질 심볼(), 전이 가능

  • 스택의 톱에 놓여 있는 심볼()

     Q  *

  • 제어 유닛의 다음 상태 (Q)

  • 스택의 톱에 놓여질 심볼 ()


4457804

예제 7.1

  • npda가 다음 전이를 포함

    • (q1,a,b) = {(q2,cd),(q3,)}

  • 현재 상태

    • 제어 유닛의 상태 : q1

    • 읽혀진 입력 심볼 : a

    • 스택의 톱에 있는 심볼 : b

  • 가능한 전이

    • (q2,cd)

      • 제어유닛의 상태 : q2

      • 문자열 cd가 스택의 톱에 있는 b를 교체

    • (q3,)

      • 제어 유닛의 상태 : q3

      • 스택의 톱에 심볼 b는 제거


4457804

예제 7.2

  • 다음과 같은 npda를 고려

    Q={q0,q1,q2,q3}, ={a,b}, ={0,1}, z=0, F={q3}

    그리고

    (q0,a,0)={(q1,10),(q3, )}

    (q0,,0)={(q3, )}

    (q1,a,1)={(q1, 11)}

    (q1,b,1)={(q2, )}

    (q2,b,1)={(q2, )}

    (q2,,0)={(q3, )}


4457804

예제 7.2

  • 전이 고려

    • 모든 가능한 입력 심볼과 스택 심볼의 조합에 대해서 규정되지 않음 => 공집합 간주

    • a가 읽혀지면 스택에 1을 하나 추가

      • (q1,a,1)={(q1, 11)}

    • b가 읽혀지면 1을 하나 제거

      • (q1,b,1)={(q2, )}, (q2,b,1)={(q2, )}

  • L={anbn : n>= 0}인식


4457804

순간적 묘사

  • 문자열을 처리하는 동안 npda의 연속적인 형상들을 설명하는 표기법

    (q,w,u)

    • q : 제어 유닛의 상태

    • w : 입력 문자열의 읽지 않은 부분

    • u : 스택의 내용(u의 가장 왼쪽 심볼이 스택의 탑)

  • 한 순간적 묘사로부터 다른 순간적 묘사로의 이동은 심볼 로 표기

    (q2,y)  (q1,a,b)일때 (q1,aw,bx) (q2,w,yx)


4457804

정의 7.2

  • 푸시다운 오토마타에 의하여 승인되는 언어

  • M = ( Q, , , , q0, z, F)를 비결정적 푸시다운 오토마타라 하자. M에 의하여 인식되는 언어는 집합

    L(m)={w*:(q0,w,z) (p,,u),pF,u*}

    즉, M에 의하여 인식되는 언어는 M이 입력심볼을 다 읽고 종료 상태에 놓일 수 있는 문자열의 집합이다. 스택의 내용 u는 인식과는 무관

*

M


4457804

예제 7.3

  • 언어

    L={w{a,b}*:na(w)=nb(w)}

    에 대한 npda를 구성

    • a와 b의 순서는 고려할 필요 없음


4457804

예제 7.3

  • Npda M=({q0,qf},{a,b},{0,1,z},,q0,z,{qf})

    (q0,,z)={(qf,z)}

    (q0,a,z)={(q0,0z)}

    (q0,b,z)={(q0,1z)}

    (q0,a,0)={(q0,00)}

    (q0,b,0)={(q0, )}

    (q0,a,1)={(q0,)}

    (q0,b,1)={(q0,11)}


4457804

예제 7.3

  • 문자열 baab 의 유도과정

    (q0,baab,z) (q0,aab,1z) (q0,ab,z)

    (q0,b,0z) (q0,,z) (qf,,z)


4457804

예제 7.4

  • 언어

    L={wwR:w {a,b)+}

    에 대한 npda를 구성

    • 스택을 이용하여 입력 심볼의 삽입된 역순으로 회수될 수 있음을 이용

      • 문자열의 첫 부분을 읽을때 연속적인 심볼들을 스택에 삽입

      • 두번째 부분에서 현재 입력 심볼을 스택의 탑 십볼과 비교하여 두 심볼이 일치하면 처리 계속 수행


4457804

예제 7.4

  • npda M=({q0,q1,q2},{a,b},{a,b,z},,q0,z,{q2})

    (q0,a,z)={(q0,az)}

    (q0,b,z)={(q0,bz)}

    (q0,a,a)={(q0,aa)}

    (q0,b,a)={(q0,ba)}

    (q0,a,b)={(q0,ab)}

    (q0,b,b)={(q0,bb)}

    문자열의 중간을 추측하는 전이는 상태를 q0에서 q1

    (q0,,a)={(q1,a)}

    (q0,,b)={(q1,b)}


4457804

예제 7.4

wR과 스택의 내용이 일치하는지를 확인하는 전이들

(q1,a,a)={(q1, )}

(q1,b,b)={(q1,)}

마지막으로 성공적인 일치를 인식하는 전이

(q1,,z)={(q2,z)}


4457804

예제 7.4

  • abba를 승인하는 일련의 이동

    (q0,abba,z) (q0,baa,az) (q0,ba,baz)

    (q1,ba,baz) (q1,a,az) (a1,,z) (q2,z)

  • 문자열의 중간의 위치 결정을 위한 전이

    • 순간적 묘사(q0,ba,baz)는 두가지 선택

      • (q0,b,b)={(q0,bb)}를 이용 (q0,ba,baz) (q0,a,bbaz)

      • (q0,,b)={(q1,b)}를 이용 (q0,ba,baz) (q1,ba,baz)


4457804

푸시다운 오토마타와문맥-자유 언어

문맥-자유언어 npda


4457804

문맥-자유 언어에 대한 NPDA

  • 문맥-자유 언어

    • 그 언어를 인식하는 npda가 존재함을 보임

      • 언어가 Greibach 정규형인 문법에 의하여 생성된다고 가정

      • 언어에 속한 모든 문자열의 좌측우선 유도이용

    • 문자열 유도과정

      • 문장형태의 오른쪽 부분에 있는 변수들을 스택에 유지

      • 단말로 이루어진 왼쪽 부분은 읽은 입력과 일치시킴


4457804

문맥-자유 언어에 대한 NPDA

  • 스택에 시작심볼 입력

  • 생성규칙 A->ax

    • 스택의 탑에 변수 A가 있어야 함

    • 입력 심볼은 단말 a

    • 스택의 변수는 제거되고 변수들의 문자열 x로 교체


4457804

예제 7.5

  • 다음 생성규칙을 갖는 문법으로 생성된 언어를 인식하는 pda를 구성

    S->aSbb|a


4457804

예제 7.5

  • 문법을 Greibach 정규형으로

    S->aSA|a

    A->bB

    B->b

  • 오토마타의 상태 {q0, q1, q2}

    q0 : 초기상태, q2 : 종료상태

    시작심볼 : S

    시작 심볼을 위한 전이 정의 (q0,,z)={(q1,Sz)}

S->aSbb|a


4457804

예제 7.5

  • S->aSA

    입력으로 a를 읽는 동안, 스택에서 S를 제거하고 SA로 교체

  • S->a

    단순히 S를 스택에서 제거하고 a를 읽음

    => (q1,a,S)={(q1,SA),(q1,)}


4457804

예제 7.5

  • A->bB, B->b

  • (q1,b,A)={(q1,B)}

    (q1,b,B)={(q1,)}

  • 스택의 시작심볼이 스택의 탑에 나타나면 유도의 완료를 뜻하고 pda는 다음 전이에 의하여 종료 상태에 놓임

  • (q1,,z)={(q2,)}


4457804

정리 7.1

  • 모든 문맥-자유 언어 L에 대하여, L=L(M)인 npda M이 존재한다.


4457804

정리 7.1

  • 언어 L이 -자유인 문맥-자유 언어라면, L에 대한 Greibach 정규형인 문맥-자유 문법이 존재 => G=(V,T,S,P)

  • 문법의 좌측우선 유도를 시뮬레이션 하는 npda 구성 가능

    M=({q0,q1,qf},T,VU{z},,q0,{qf})

    • 입력 알파벳은 G의 단말들의 집합과 동일

    • 스택 알파벳은 문법의 변수들의 집합 포함


4457804

정리 7.1

  • 전이함수

    • M의 첫번째 이동 후 스택이 시작심볼 S

      (q0,,z)={(q1,Sz)}

    • P에 속한 각 생성규칙 A->au

      (q1,u)  (q1,a,A)

      • M은 입력 a를 읽고 변수 A를 스택에서 u로 교체

    • 마지막 종료상태를 위해

      (q1,,z)={(qf,z)}


4457804

정리 7.1

  • M이 모든 w  L(G)를 승인하는 것을 보이기 위해, 좌측우선 유도를 다음과 같이 보일 수 있다

    S => w

    이면

    (q1,w,Sz) (q1,,z)

    이고,

    (q0,w,z) (q1,w,Sz) (q1,,z) (qf,,z)

    따라서 L(G)  L(M)이다.

*


4457804

정리 7.1

  • 만약 L이면, npda에서 빈 문자열이 승인되도록 전이

    (q0,,z)={(qf,z)}

    를 추가하면 된다.


4457804

예제 7.6

  • 다음의 문법을 고려해보자

    S->aA

    A->aABC|bB|a

    B->b

    C->c


4457804

S->aA

A->aABC|bB|a

B->b

C->c

예제 7.6

  • 문법이 이미 Greibach 정규형

  • 전이규칙

    • 시작 : (q0,,z)={(q1,Sz)}

    • 종료 : (q1,,z)={(qf,z)}

    • 나머지

      (q1,a,S)={(q1,A)}

      (q1,a,A)={(q1,ABC),(q1,)}

      (q1,b,A)={(q1,B)}

      (q1,b,B)={(q1,)}

      (q1,c,C)={(q1,)}


4457804

  • 시작 : (q0,,z)={(q1,Sz)}

  • 종료 : (q1,,z)={(qf,z)}

  • 나머지

  • (q1,a,S)={(q1,A)}

  • (q1,a,A)={(q1,ABC),(q1,)}

  • (q1,b,A)={(q1,B)}

  • (q1,b,B)={(q1,)}

  • (q1,c,C)={(q1,)}

예제 7.6

  • aaabc를 위한 이동

    (q0,aaabc,z) (q1,aaabc,Sz)

    (q1,aabc,Az)

    (q1,abc,ABCz)

    (q1,bc,BCz)

    (q1,c,Cz)

    (q1,,z)

    (qf,,z)


4457804

PDA에 대한 문맥-자유 문법

  • 정리 7.1의 과정을 거꾸로 적용

    • 스택의 내용은 문장 형태의 변수 부분을 반영

    • 이미 처리된 입력은 문장 형태의 단말인 접두부

    • 논의를 단순하게 하기 위한 조건

      조건1) npda는 단 하나의 종료 상태를 갖고 스택이 비어야만 종료 상태로 이동 가능

      조건2) 모든 전이는 (qi,a,A)={c1,c2,…,cn)} 의 형태를 가짐

      • ci = (qj, ), 스택의 내용을 한 심볼씩 감소

      • ci = (qj, BC), 스택의 내용을 한 심볼씩 증가


4457804

PDA에 대한 문맥-자유 문법

  • Variable의 형식 => (qiAqj)

  • Npda가 v를 읽고 상태를 qi에서 qj로 바꾸는 동안 A를 스택에서 제거

    (qiAqj) => v

  • 인식

    (q0zqf) => w

*

*


4457804

PDA에 대한 문맥-자유 문법

  • (qi,a,A)={c1,c2,…,cn)} 의 형태를 가짐

    • ci = (qj, ) => (qiAqj) -> a

    • ci = (qj, BC) => (qiAqj) -> a(qiBqk)(qkCqj)


4457804

예제 7.7

  • 다음 전이를 가진 npda를 고려

    (q0,a,z)={(q0,Az)}

    (q0,a,A)={(q0,A)}

    (q0,b,A)={(q1,)}

    (q1,,z)={(q2,)}


4457804

(q0,a,z)={(q0,Az)}

(q0,a,A)={(q0,A)}

(q0,b,A)={(q1,)}

(q1,,z)={(q2,)}

(q0,a,z)={(q0,Az)}

(q3,,z)={(q0,Az)}

(q0,a,A)={(q3,)}

(q0,b,A)={(q1,)}

(q1,,z)={(q2,)}

예제 7.7

PDA -> CFG 조건1, 2 적용 => 조건1 만족, 조건 2 적용


4457804

(q0,a,z)={(q0,Az)}

(q3,,z)={(q0,Az)}

(q0,a,A)={(q3,)}

(q0,b,A)={(q1,)}

(q1,,z)={(q2,)}

(q0Aq3)->a

(q0Aq1)->b

(q1zq2)-> 

예제 7.7


4457804

(q0,a,z)={(q0,Az)}

(q3,,z)={(q0,Az)}

(q0,a,A)={(q3,)}

(q0,b,A)={(q1,)}

(q1,,z)={(q2,)}

(q0zq0)->a(q0Aq0)(q0zq0)|a(q0Aq1)(q1zq0)|

a(q0Aq2)(q2zq0)|a(q0Aq3)(q3zq0)

(q0zq1)->a(q0Aq0)(q0zq1)|a(q0Aq1)(q1zq1)|

a(q0Aq2)(q2zq1)|a(q0Aq3)(q3zq1)

(q0zq2)->a(q0Aq0)(q0zq2)|a(q0Aq1)(q1zq2)|a(q0Aq2)(q2zq2)|a(q0Aq3)(q3zq2)

(q0zq3)->a(q0Aq0)(q0zq3)|a(q0Aq1)(q1zq3)|

a(q0Aq2)(q2zq3)|a(q0Aq3)(q3zq3)

예제 7.7


4457804

(q0,a,z)={(q0,Az)}

(q3,,z)={(q0,Az)}

(q0,a,A)={(q3,)}

(q0,b,A)={(q1,)}

(q1,,z)={(q2,)}

(q3zq0)->(q0Aq0)(q0zq0)|(q0Aq1)(q1zq0)|

(q0Aq2)(q2zq0)|(q0Aq3)(q3zq0)

(q3zq1)->(q0Aq0)(q0zq1)|(q0Aq1)(q1zq1)|

(q0Aq2)(q2zq1)|(q0Aq3)(q3zq1)

(q3zq2)->(q0Aq0)(q0zq2)|(q0Aq1)(q1zq2)|(q0Aq2)(q2zq2)|(q0Aq3)(q3zq2)

(q3zq3)->(q0Aq0)(q0zq3)|(q0Aq1)(q1zq3)|

(q0Aq2)(q2zq3)|(q0Aq3)(q3zq3)

예제 7.7


4457804

  • (q0,a,z)={(q0,Az)}

  • (q0,a,A)={(q0,A)}

  • (q0,b,A)={(q1,)}

  • (q1,,z)={(q2,)}

예제 7.7

  • 문자열 aab의 인식(pda)

    (q0,aab,z) (q0,ab,Az)

    (q3,b,z)

    (q0,b,Az)

    (q1,,z)

    (q2,,)


4457804

(q0zq2)->a(q0Aq0)(q0zq2)|a(q0Aq1)(q1zq2)|

a(q0Aq2)(q2zq2)|a(q0Aq3)(q3zq2)

(q3zq2)->(q0Aq0)(q0zq2)|(q0Aq1)(q1zq2)|

(q0Aq2)(q2zq2)|(q0Aq3)(q3zq2)

(q0Aq3)->a

(q0Aq1)->b

(q1zq2)-> 

예제 7.7

  • 문자열 aab의 인식(CFG)

    (q0zq2) => a(q0Aq3)(q3zq2)

    => aa(q3zq2)

    => aa(q0Aq1)(q1zq2)

    => aab(q1zq2)

    => aab


4457804

정리 7.2

  • 만약 어떤 npda M에 대하여 L = L(M) 이면, L은 문맥-자유 언어이다

  • 증명은 교재참조


Pda cfg

결정적 PDA와 결정적 CFG


4457804

결정적 PDA

  • 이동에 있어서 선택의 여지가 없는 PDA


4457804

정의 7.3

  • PDA M = ( Q, , , , q0, z, F)이 다음의 제약 조건을 만족하면 결정적 PDA

  • (q,a,b)는 많아야 한 개의 원소를 포함

    • 주어진 입력 심볼과 스택 톱 심볼에 대하여 많아야 하나의 이동만이 존재

  • 만약 (q,,b)가 공집합이 아니면, 모든 c   에 대하여 (q,c,b)는 공집합이어야 함

    • 어떤 형상에서  전이가 가능할 경우, 어떤 입력을 사용하는 이동도 주어지지 않아야 함


Fa pda

FA와 PDA의 차이점

  • 전이를 유지

    • 스택의 탑 심볼이 다음 이동을 결정하는 데 영향을 줌 => 전이 가능

  • 전이가 공집합 일수도 있음

    • 종말형상이 있을 수도 있음

  • 결정성 => 언제든지 많아야 하나의 가능한 이동이 존재


4457804

정의 7.4

  • L=L(M)인 dpda M이 존재하고 오직 그럴 때에만 언어 L을 결정적 문맥-자유 언어라 한다.


4457804

예제 7.8

  • 다음 언어는 결정적 문맥-자유 언어이다.

    L={anbn : n>= 0}

    => PDA가 존재함을 보임


4457804

예제 7.8

  • 아래와 같은 전이를 갖는 pda M=({q0,q1,q2}, {a,b},{0,1},,q0,0,{qf})는 주어진 언어를 인식한다.

    (q0,a,0)={(q1,10)}

    (q1,a,1)={(q1,11)}

    (q1,b,1)={(q2,)}

    (q2,b,1)={(q2, )}

    (q2,,0)={(q0,)}

    M은 정의 7.4의 조건을 만족하고 따라서 결정적이다.


4457804

예제 7.4

  • L={wwR:w {a,b)+}

  • npda M=({q0,q1,q2},{a,b},{a,b,z},,q0,z,{q2})

    (q0,a,z)={(q0,az)} (q0,b,z)={(q0,bz)}

    (q0,a,a)={(q0,aa)} (q0,b,a)={(q0,ba)}

    (q0,a,b)={(q0,ab)} (q0,b,b)={(q0,bb)}

    문자열의 중간을 추측하는 전이는 상태를 q0에서 q1

    (q0,,a)={(q1,a)} (q0,,b)={(q1,b)}

    wR과 스택의 내용이 일치하는지를 확인하는 전이들

    (q1,a,a)={(q1, )} (q1,b,b)={(q1,)}

    마지막으로 성공적인 일치를 인식하는 전이

    (q1,,z)={(q2,z)}

비결정적


4457804

오토마타의 동치

  • DFA  NFA

  • PDA  NPDA


4457804

예제 7.9

  • 결정적 문맥-자유 언어 L1과 L2에 대해서

    L = L1 U L2

    언어 L이 결정적 문맥-자유 언어 인가?

  • 아니다.

  • 두 언어를 인식하는 PDA에서 한 입력 심볼과 스택 심볼에 대해서 하나 이상의 전이가 존재할 수 있다.(두개의 PDA 전이 함수를 합침으로 해서 결정적 문맥-자유 언어의 합집합은 비 결정적 문맥-자유 언어가 될 수 있다)


4457804

결정적 문맥-자유 문법

  • 결정적 문맥-자유 언어

    • DCFG의 효율적인 파싱이 가능

      • 퇴각 검색(backtracking)이 발생하지 않으므로 파싱에 대한 컴퓨터 프로그램을 쉽게 할 수 있음

    • S문법의 확장인 LL문법을 이용하여 컴파일러 구현

      • 입력을 왼쪽에서 오른쪽으로 스캔하여 좌측우선 유도를 구성하면서 파싱


  • Login