Pushdown Automaton: 두 판 사이의 차이
| 12번째 줄: | 12번째 줄: | ||
# 모두 일치하고 스택이 비면 해당 문자열은 PDA에 의해서 accept된다. | # 모두 일치하고 스택이 비면 해당 문자열은 PDA에 의해서 accept된다. | ||
이때, 모든 NFA는 PDA의 특수한 경우로 볼 수 있다. 왜냐하면 PDA는 스택을 가진 오토마타지만, 스택을 전혀 사용하지 않게 정의하면 그건 곧 NFA와 동일한 동작을 하기 때문이다. 이를 통해서 아래와 같은 명제가 성립한다: | 이때, 모든 NFA는 PDA의 특수한 경우로 볼 수 있다. 왜냐하면 PDA는 스택을 가진 오토마타지만, 스택을 전혀 사용하지 않게 정의하면 그건 곧 NFA와 동일한 동작을 하기 때문이다. 이를 통해서 아래와 같은 명제가 성립한다: | ||
Regular Languages <math>supseteq</math> Context-Free Languages | Regular Languages <math>\supseteq</math> Context-Free Languages | ||
==Formal Definition of nondeterministic PDA== | ==Formal Definition of nondeterministic PDA== | ||
2025년 10월 26일 (일) 17:55 판
상위 문서: Context-Free Languages
개요
정규 언어를 다루기 위해서는 FA(Finite Automaton)으로 충분하지만, 그보다 더 일반적인 언어인 CFG(Context-Free Languages)를 다루기 위해서는 PDA(Pushdown Automaton)[1]>가 사용된다. PDA는 FA의 한계를 보완하기 위해서 추가적인 기억 장치인 stack을 활용하며, 이를 통해서 추가적인 '기억'을 구현할 수 있다. 예를 들어 아래와 같은 언어를 고려해보자:
이는 아래와 같은 작동 과정을 거친다:
- 입력의 앞부분 w를 스택에 차례로 push 한다.
- w가 끝났다고 nondeterministically guess(추측)한다.
- 이후 입력의 나머지 부분을 읽으며, 스택에서 pop한 심볼과 비교한다.
- 모두 일치하고 스택이 비면 해당 문자열은 PDA에 의해서 accept된다.
이때, 모든 NFA는 PDA의 특수한 경우로 볼 수 있다. 왜냐하면 PDA는 스택을 가진 오토마타지만, 스택을 전혀 사용하지 않게 정의하면 그건 곧 NFA와 동일한 동작을 하기 때문이다. 이를 통해서 아래와 같은 명제가 성립한다:
Regular Languages Context-Free Languages
Formal Definition of nondeterministic PDA
PDA는 아래와 같은 5-튜플()로 정의할 수 있다:
- : 유한 상태 집합
- : 입력 알파벳
- : 스택 알파벳
- : : 전이 함수(transition function), 현재 상태와 입력 기호를 다음 상태로 매핑
- 현재 상태, 입력 알파벳, 스택의 top 알파벳에 따라 여러 쌍을 반환한다.
- : 시작 상태(start state)
- : 수용 상태 집합(a set of accept states)
이때 전이함수는 nondeterministic PDA 위에서 정의되므로 주어진 전이 함수 는 여러 쌍을 가질 수 있다. 이때 는 현재 상태가 q이고, 입력 알파벳이 w, 스택의 top 알파벳이 a일 때, 상태 r로 전이하며 스택에서 a를 pop하고 b를 push한다는 것을 의미한다. 만약 에서 이면 스택을 pop하지 않는 것이고, 이라면 스택에 push하지 않는 것이다. 이때 PDA의 스택이 비었는지를 직접 검사하는 것은 불가능하지만, 특수기호 $ 를 스택 바닥에 push하여 비어있음을 간접적으로 확인할 수 있다.
Computation of a PDA
PDA P가 입력 을 수용(accept)한다는 것은 일련의 상태열 과 스택 문자열열 이 존재해야 한다. 이를 위한 조건은 아래와 같다:
- : PDA는 처음에 초기 상태 에서 시작하고 스택이 비어있다.
- For , such that (
- 아래는 이를 쉽게 풀이한 것이다:
- 현재 스택의 내용이 형토로 되어 있다면(즉, top에 가 있다면)
- 입력 심볼 를 읽고,
- PDA의 전이함수 에 따라 를 pop하고 를 push하여 스택의 나머지 부분 t를 보존한다.
- 그 결과 PDA는 새로운 상태 에 도달한다.
- 즉, DA가 스택의 맨 위를 조작하며 상태를 바꾸는 한 단계의 이동 규칙을 수학적으로 적은 것이다.
- : 마지막으로 PDA가 모든 입력을 처리한 후 accept 상태 집합 F에 속하는 상태에 도달해있다.
Computation Example
Figure 1은 아래 언어를 나타내는 언어의 구현을 나타낸 것이다:
즉, a,b,c의 개수 관계가 i=j 또는 i=k인 문자열을 인식한다. 아래는 Figure 1에 나타난 PDA에 대한 설명이다:
- : 시작 시 스택에 기호 $ 삽입 (스택바닥표시).
- : a를 읽을 때마다 a를 push.
- : 전이를 통해 “a와 b 개수를 비교하는 경로”로 진입
- : b를 읽을 때마다 a를 popg하여 i=j인 경우를 처리.
- : i=k이므로 수용 상태에 계속 머무른다.
- : 다른 경로 (nondeterminism)로 두 경우 모두 처리 가능하도록 설계.
각주
- ↑ 해당 문서에서는 특별한 언급이 없는 이상 nondeterministic PDA를 기본으로 하여 서술한다.