형식 언어ants.mju.ac.kr/2014spring/dm/ch10.pdf · 2015-08-06 · 10 • 제10장 형식...

32
형식 언어 우리는 한국어, 영어, 일어와 같은 자연 언어(natural language)에 대해서는 익숙하 게 알고 사용하고 있다. 언어는 다음과 같이 “S로부터 P라는 규칙에 의해서 만들어 지는 S*”으로 정의할 수 있다. S: 기호(symbol)들의 집합 S*: 집합 S의 기호들을 결합하여 만들어지는 유한 크기를 갖는 모든 문자열 P: 기호들이 결합되는 규칙 예를 들면 한국어는 S는 자음, 모음의 집합에 해당하며, S*은 자음과 모음을 규칙 P에 맞게 결합하여 만들어질 수 있는 모든 단어들과 문장들이다. 이러한 자연 언어들의 구문은 매우 복잡하여 그에 대한 모든 법칙을 규정하는 것 은 거의 불가능 하다. 하지만, 자바, C 등과 같은 프로그래밍 언어에서는 체계적으로

Upload: others

Post on 05-Feb-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

형식 언어

우리는 한국어, 영어, 일어와 같은 자연 언어(natural language)에 대해서는 익숙하

게 알고 사용하고 있다. 언어는 다음과 같이 “S로부터 P라는 규칙에 의해서 만들어

지는 S*”으로 정의할 수 있다.

S: 기호(symbol)들의 집합

S*: 집합 S의 기호들을 결합하여 만들어지는 유한 크기를 갖는 모든 문자열

P: 기호들이 결합되는 규칙

예를 들면 한국어는 S는 자음, 모음의 집합에 해당하며, S*은 자음과 모음을 규칙

P에 맞게 결합하여 만들어질 수 있는 모든 단어들과 문장들이다.

이러한 자연 언어들의 구문은 매우 복잡하여 그에 대한 모든 법칙을 규정하는 것

은 거의 불가능 하다. 하지만, 자바, C 등과 같은 프로그래밍 언어에서는 체계적으로

Page 2: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

정의된 규칙에 따라서 만들어지는 구문의 집합으로 언어를 규정하는 것이 가능하다.

이러한 언어를 형식 언어(formal language)라고 한다.

언어의 문장(S*)이 만들어지는 규칙의 집합을 문법(syntax)이라고 한다. 규칙에

맞게 만들어진 문장은 문법적으로 맞는 문장이다. 언어의 구문에는 문법 외에 또 다

른 요소로서 “의미(semantics)"가 존재한다. 어떤 구문이 문법적으로는 올바른 문장

이라도 의미론의 관점에서는 틀린 문장일 수 있다.

예제 10.1 “나는 학교에 간다.”는 구문론의 관점(문법적으로)에서나 의미론의 관점에서나

올바른 문장이다.

하지만, “소리없는 소리는 칼 끝에 앉아 큰 소리를 지르고 있었다”는 문장은

문법적으로는 올바른 문장이지만 전혀 의미 없는 문장이다. 물론 시와 같은 특

수한 종류의 문장에서는 이러한 문장도 용납되기도 하지만.

예제 10.2 “Going to the store John George to sing.”는 구문론의 관점(문법적으로)으로나

의미론의 관점에서나 틀린 문장이다.

“Noiseless blue sounds sit cross-legged under the mountaintop.”은 문법적으로는

올바른 문장이지만 올바른 의미를 갖고 있지 않다.

예제 10.3 다음과 같은 수식은 문법적으로 올바른 수식이다.

((3+2)÷(4x7))÷9

(2+3)+4

하지만 다음의 수식은 문법적으로 톨린 수식이다.

(2+(3-)x4

다음의 수식은 문법적으로는 맞지만 의미론적으로는 틀린 수식이다.

(4+2)-(0÷0)

언어의 의미의 문제는 다른 차원의 문제로서 여기서는 취급하지 않으며 오직 문

법에 대해서 논의하도록 한다. 이 장에서는 프로그래밍 언어와 같은 형식 언어가 만

들어지는 문법의 체계에 대해서 살펴본다.

Page 3: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.1 형식 언어와 문법 • 3

10.2 문법

형식 언어의 문법을 설명하기 전에 먼저 문법을 기술하는데 사용할 용어들에

대해서 살펴보자.

정의 10.1(symbol):

(alphabet vocabulary):

(string):

( ):

(empty string): 0 λ .

( Ø .)

여기서 문자열과 단어(문장)는 동일한 용어라고 할 수 있다.

예제 10.4 위의 용어들을 한국어에 적용하면 다음과 같다.

알파벳 V={ , , , ,..., , , ,...} (즉 자음과 모음의 집합)

단어(혹은 문장) V*={λ, 국어, 나는 간다, 물, ...}

이 예에서 보는 바와 같이 공 문자열(즉, 빈칸)도 문자열의 집합에 속한다. 그

리고 알파벳 V로부터 생성되는 단어들의 집합은 V*로 표시한다.

어떤 특정 언어를 나타내는 방법으로는 언어를 구성하는 모든 단어들, 즉 V*로

표시할 수 있다. 언어를 표현하는 또 다른 방법으로 언어를 생성하는 문법으로 표시

하는 방법이 있다.

정의 10.2

Page 4: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

4 • 제 10장 형식 언어와 유한상태 기계

- (phase-structure grammar) G 4 , (V, T, S, P) .

V: ( )

T: (terminal symbol)

S: (start symbol, seed)

P: (production rule): → .

알파벳 V는 단말 기호의 집합 T와 비단말 기호의 집합 N으로 구성된다. 단말 기

호는 다른 기호로 데체될 수 없는 기호인데 반해서 비단말 기호는 다른 비단말 기호

혹은 단말 기호로 대체될 수 있다. 따라서 언어의 단어(문자열 혹은 문장)는 최종적

으로 단말 기호로서 구성된다. 시작 기호는 비단말 기호 중 하나로서 생성 규칙이 적

용되는 출발점의 기호이다.

생성 규칙은 단어가 생성되는 규칙을 정의한다. 생성 규칙 w→w‘은 “w는 w’으로

대체된다”를 의미한다. 즉 w'은 w에서 생성된다고 할 수 있다.

예제 10.5 다음과 같은 문법 G로부터 aaa가 생성된다.

G = (V, T, S, P)

V={a, b, A, S}

T={a, b}

S = S0

P={S→aA, S→b, A→aa}

그러면 생성 규칙 A→aa를 이용하여 시작 기호 S0로부터 S0→aA→aaa와 같이

aaa를 생성할 수 있다.

예제 10.6 다음과 같은 구문 문법 G로 정의된 언어는 문자열 aaabbb(a3b3)을 포함한다.

G = (V, T, S, P)

V={a, b, S}

T={a, b}

S = S0

P={S0→aS0b, S0→ab}

Page 5: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.1 형식 언어와 문법 • 5

그러면 생성 규칙을 이용하여 시작 기호 S0로부터 S0→aS0b→aaS0bb→aaabbb

와 같이 생성된다.

예제 10.7 다음과 같은 구문 문법 G로 정의된 언어는 문자열 0101010을 포함한다.

G = (V, T, S, P)

V={S, A, B, 0, 1}

T={0,1}

S = S0

P={S0→AB0, A→BB, B→01, AS0→1}

그러면 생성 규칙을 이용하여 S0→AB0→A010→BB010→0101010와 같이 생

성된다.

예제 10.8 다음과 같은 구문 문법 G로 정의된 언어에서 “Jill drives frequently."는 문법적

으로 맞는 문장인지 살펴 보자.

G = (V, T, S, P)

V= T N

T={John, Jill, drives, jogs, carelessly, rapidly, frequently}

N={sentence, noun, verbphrase, verb, adverb}

S = "sentence"

P: <sentence> → <noun> <verbphrase>

<noun> → John

<noun> → Jill

<verbphrase> → <verb><adverb>

<verb> → drives

<verb> → jogs

<adverb> → carelessly

<adverb> → rapidly

<adverb> → frequently

Page 6: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

6 • 제 10장 형식 언어와 유한상태 기계

그러면 생성 규칙에 의해서 시작 기호 <sentence>로부터 다음의 문장이 생성

된다.

<sentence> → <noun> <verbphrase>

→ Jill <verb> <adverb>

→ Jill drives frequently

따라서 “Jill drives frequently."는 문법 G에 맞는 문장이다.

이상의 예제에서 보는 바와 같이 언어는 언어를 구성하는 문자열(단어 혹은 문장)

을 생성하는 규칙, 즉 문법으로 표현할 수 있다. 문법 G=(V, T, S, P)에 의해서 적법

하게 구성된 문장들의 집합을 문법 G의 언어라고 하며 L(G)로 표시한다.

예제 10.9 위의 예제 10.5에서 정의된 문법 G에 의해 생성되는 언어 L(G)는 다음과 같이

구할 수 있다 .

생성 S0→aA와 A→aa 를 이용하면, aaa를 유도할 수 있고, 생성 S0→b로부터

b를 유도할 수 있다. 그러므로 L(G) ={b, aaa} 이다.

시작 기호(S)에서부터 문법적으로 적합한 문장을 도출하는 과정은 유도 트리

(derivation tree)에 의해 시각적으로 표현할 수 있다.

예제10.10 예제 10.8에서 정의된 문법 G에 의해 “Jill drives frequently."라는 문장이 생성

되는 과정을 유도 트리를 사용하여 보일 수 있다.

sentence

noun verbphrase

verb adverbJill

drives frequently

sentence

noun verbphrase

verb adverbJill

drives frequently

Page 7: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.1 형식 언어와 문법 • 7

예제 10.11문자열 “abbbbbbc"는 언어 L(G)에 속하는 적법한 문자열인지 유도 트리를 이

용하여 살펴 볼 수 있다.

G = (V, T, S, P)

V={v0, w, a, b, c}

T={a, b, c}

S = v0

P: v0 → aw

w → bbw

w → c

v0

a w

b w

b

b

b w

bb w

c

구조 문법은 생성 규칙에 따라서 분류할 수 있는데, 여기서는 4가지 종류로 나누

어 본다. 먼저 유형 0 문법은 그 생성 규칙에 아무런 제약이 없다. 유형 1 문법은 w1

→w2의 생성 규칙에서 w2의 길이가 w1의 길이 보다 길거나 같으며, 혹은 w1 → λ 형

태인 경우이다. 유형 2 문법은 w1→w2에서 w1은 단말 기호가 아닌 단일 기호(single

symbol)인 경우이다. 유형 3 문법은 w1→w2 생성 규칙에서 A, B가 비단말 기호이고

a가 단말 기호일 때

A → aB 혹은 A → a

혹은

Page 8: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

8 • 제 10장 형식 언어와 유한상태 기계

A → λ인 경우이다.

예제 10.12G=(V, T, S, P)의 문법에서

V={A, B, s, a, b}, T={a, b}, S=s

생성 규칙 P가

s → aB

B → bA

B → b

A → aB

A → a

인 경우 이 문법은 유형3의 문법에 해당한다.

예제 10.13G=(V, T, S, P)의 문법에서

V={A, B, s, a, b}, T={a, b}, S=s

생성 규칙 P가

s → aBa

B → aBa

B → b

인 경우 이 문법은 유형2의 문법에 해당한다.

예제 10.14G=(V, T, S, P)의 문법에서

V={A, B, s, a, b}, T={a, b}, S=s

생성 규칙 P가

s → aAB

AB → bB

B → b

A → aB

인 경우 이 문법은 유형1의 문법에 해당한다.

Page 9: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.1 형식 언어와 문법 • 9

예제 10.15G=(V, T, S, P)의 문법에서

V={A, B, s, a, b}, T={a, b}, S=s

생성 규칙 P가

s → aAB

A → b

A → AB

인 경우 이 문법은 유형0의 문법에 해당한다.

이 네 가지 유형의 문법 간의 관계는 아래의 그림과 같다.

그림 10-1 문법의 유형

유형 2 문법에서, 왼편에 나오는 비단말 기호는 나머지 문자열에 관계없이 나타날

때 마다 자유롭게 대치될 수 있으므로 문맥 자유 문법(context-free grammar)이라 하

며, 이 문법에 의해 생성되는 언어를 문맥 자유 언어라고 한다. 유형 3 문법은 정규

문법(regular grammar)이라 하며, 이 문법에 의해 생성된 언어를 정규 언어(regular

language)라고 한다. 문맥자유 문법과 정규문법은 프로그래밍 언어에서 매우 중요한

역할을 한다. 특히 문맥 자유 문법은 거의 모든 프로그래밍 언어의 구문을 정의하는

데 사용된다.

Page 10: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10 • 제 10장 형식 언어와 유한상태 기계

10.3 문법의 표현

문맥 자유 문법을 정의하기 위해서 BNF (Backus Naur Form) 형식과 문법 다이어

그램(syntax diagram)을 많이 사용한다.

BNF 형식은 이것을 만든 John Backus 와 Peter Naur 의 이름을 따서 이름 붙여졌

다. BNF에서는 모든 비단말 기호들은 < >로 둘러싸여 표기된다. 생성을 표기하기 위

해 → 대신 ::= 기호를 사용한다. 같은 비단말 기호로부터 생성될 수 있는 여러 개의

문자열을 하나로 묶어서 표기하는데, 각기 다른 생성 문자열 사이에 | 를 사용하여

분리한다. 예를 들면, A a, A AB를 BNF 형식으로는 <A>::=a|AB 로 표기한다.

예제10.16 C 언어에서 사용되는 signed integer를 표기하기 위한 생성 규칙을 BNF 형식으

로는 아래와 같이 기술된다.

<signed integer> ::= <sign><integer>

<sign> ::= +|

<integer> ::= <digit>|<digit><integer>

<digit> ::= 0|1|2|3|4|5|6|7|8|9

예제10.17 예제10.8의 문법은 BNF로 다음과 같이 표시할 수 있다.:

<sentence> ::= <noun><verbphrase>

<noun> ::= John | Jill

<verbphrase>::=<verb><adverb>

<verb> ::= drives | jogs

<adverb> ::= carelessly | rapidly | frequently

Page 11: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.1 형식 언어와 문법 • 11

예제10.18 예제10.11의 문법은 BNF로 다음과 같이 표시할 수 있다.:

<v0> ::= a<w>

<w> ::= bb<w> | c

예제10.19 Linux에서 파일 이름을 나타내는 지정자를 생성하는 문법은 다음과 같이 BNF

로 표시할 수 있다.

G=(V, S, identifier, P)

V={identifier, remaining, digit, letter, a, b, c, ..., z, 0, 1, 2, ...,9}

T = {a, b, c, ..., z, 0, 1, 2, ...,9, }

P: <identifier> ::= <letter> | <letter> <remaining>

<remaining> ::= <letter> | <digit> | <letter><remaining> | <digit><remaining>

<letter> ::= a | b | c | d | ... | z |

<digit> ::= 0 | 1 | 2 | 3 | ... | 8 | 9

이 문법에 의해서 “hw1.c"와 같은 파일 이름이 생성될 수 있다. 유도 트리를

사용하여 "hw1.c"가 생성되는 과정을 보이면 다음과 같다.

Page 12: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

12 • 제 10장 형식 언어와 유한상태 기계

identifier

letter remaining

letter remaining

digit remaining

letter remaining

h

w

1

letter

c

문법 다이어그램은 문자열이 생성되는 과정을 시각적으로 표현한 것이다. BNF 표

기법에서 비단말 기호를 <>으로 표현한 것처럼 문법 다이어그램에서는 비단말 기호

는 사각형으로 그리고 단말 기호는 원으로 표시한다.

그리고 생성되는 과정은 화살표로서 표시한다. 같은 비단말 기호로부터 생성될 수

있는 여러 개의 문자열은 하나로 묶어서 표기하는데, 각기 다른 생성 문자열들을 병

렬로 놓고 화살표로 표시한다.

예제10.20 다음의 BNF 표기에 의한 생성 규칙은 문법 다이어그램으로 다음과 같이 표시

할 수 있다.

<w> ::= <w1><w2><w3>

w w1 w2 w3

예제10.21

Page 13: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.1 형식 언어와 문법 • 13

다음의 BNF 표기에 의한 생성 규칙은 문법 다이어그램으로 다음과 같이 표시

할 수 있다.

<w> ::= <w1><w2> | <w1>a | bc<w2>

w w1

w1 w2

a

b c w2

예제10.22 다음의 BNF 표기에 의한 생성 규칙은 문법 다이어그램으로 다음과 같이 표시

할 수 있다.

<w> ::= ab<w>

w

b a

예제10.23 다음의 BNF 표기에 의한 생성 규칙은 문법 다이어그램으로 다음과 같이 표시

할 수 있다.

<w> ::= ab | ab<w>

w ba

예제10.24 예제10.11의 문법을 문법 다이어그램으로 다음과 같이 표시할 수 있다.

Page 14: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

14 • 제 10장 형식 언어와 유한상태 기계

예제10.25 예제10.8의 문법을 문법 다이어그램으로 다음과 같이 표시할 수 있다.

Page 15: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.4 정규 집합과 정규 문법 • 15

10.4 정규식과 정규 집합

기호의 집합 I로부터 일정한 규칙(문법)에 의해서 생성되는 유한 개수의 기호들로

이루어진 단어(문장)들의 집합이 바로 이 문법의 언어이다. 이러한 문법에는 유형3

의 정규 문법(regular grammar)이 있다는 것을 언급하였다.

정규 문법은 이 절에서 설명하고자 하는 정규식(regular expression)과 밀접한 관계

가 있다. 한마디로 말하면 정규 문법은 정규식으로 표현될 수 있으며 정규 문법에 의

해서 생성되는 언어는 정규식에 의해서 만들어지는 정규 집합(regular set)과 동일하

다. 다음은 이러한 관계를 보여준다.

I I*기호들의 집합

(알파벳)문자열의 집합

(정규 집합)정규 문법

(정규식)

정규식을 정의하기 위해서 사용되는 용어와 표기법을 먼저 정리해 보자.

I : 기호(symbol)들의 집합(알파벳)

I*: 집합 I의 기호들을 결합하여 만들어지는 유한 크기를 갖는 모든 문자열의 집합

λ ; 공 문자열(empty string)

αβ : 문자열 α와 문자열 β의 연결(concatenation)

α β : 두 문자열 α, β의 합집합

(α)* : 문자열 α가 유한 개수만큼 반복되어 만들어지는 문자열

λ (α)*, (α)* α*

예제10.26 a* = { λ, a, aa, aaa, aaaa, ...}

a(b c) = {ab, ac}

Page 16: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

16 • 제 10장 형식 언어와 유한상태 기계

ab(bc)* = {ab, abbc, abbcbc, abbcbcbc, ...}

정규식은 다음과 같이 재귀적으로 정의된다.

정의 10.2 (정규식)1. λ .

2. x I , x .

3. α β αβ .

4. α β α β .

5. α β α* .

정의 10.3 (정규 집합)I

I* .

예제10.27 I = {0, 1}일 때 다음과 같은 정규식에 의한 정규 집합을 구하라.

(1) 0*(0 1)* : 공 문자열을 포함하여 0과 1로 이루어진 모든 문자열

(2) 00*(0 1)*1 : 0으로 시작하고 1로 끝나는 0과 1로 구성된 모든 문자열

즉, {01, 0(0과 1로 구성된 모든 문자열)1}

예제10.28 I = {0, 1}이고 정규식 (01)*(01 1*)일 때 다음 중 정규 집합 I*에 속하지 않는 것

을 찾아내라.

(1) 1111

(2) 01

(3) 010101

Page 17: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.4 정규 집합과 정규 문법 • 17

(4) 01010101000000

(5) 011

(6) 001

(6)번을 제외한 모든 문자열은 I*에 속한다.

예제10.29 I = {a, b, c}일 때 왼쪽에 주어진 정규식에 의한 정규 집합에 속하는 문자열인지

판단하라.

(1) a*b*c bbbc

(2) abcccc (abc c)*

(3) aacccc ((a b) c)*

(4) ac (ab* c*)

(5) ababac (ab)*c

5번은 제외한 모든 문자열은 정규 집합에 속한다.

이제까지 정규 문법과 정규식과 정규 문법에 대해서 설명하였다. 정규 문법과 정

규 집합은 밀접한 관계가 있으며 다음의 정리는 이 둘 사이의 관계를 설명한다.

정리 10.1L이 정규 문법 G에 의해서 생성되는 언어 L(G)라면 L(G)는 정규 집합이다. 또한 이 명

제의 역도 성립한다. 다시말하면 정규 문법의 생성 규칙은 정규식으로 표현할 수 있다.

예제10.30 다음과 같이 BNF로 표시된 생성 규칙은 정규식 a(bb)*c와 동일하다.

<v0> ::= a<w>

Page 18: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

18 • 제 10장 형식 언어와 유한상태 기계

<w> ::= bb<w> | c

예제10.31 다음과 같은 문법 다이어그램으로 표시된 생성 규칙은 정규식 a b c*와 동일하

다.

w b

a

c

Page 19: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.2 출력이 있는 유한 상태 기계 • 19

10.6 유한 상태 기계

컴퓨터를 포함하여 여러 가지 종류의 디지털 장치(digital machine)들을 모델링 하

는 도구로 유한 상태 기계(finite state machine)라는 구조가 널리 사용되고 있다. 유한

상태 기계는 상태들의 집합(유한 집합), 입력 문자열(input string), 상태와 입력에 따

라 다음 상태를 결정하는 전이 함수(transition)로 구성되어 있다. 이것을 기호로서 다

음과 같이 유한 상태의 구성 요소를 나타낼 수 있다.

유한 상태 기계: (S, I, f)

S: 상태의 집합

I: 입력의 집합

f: 상태 전이 함수, 즉 f: S x I S로서 다음과 같이 표기한다.

f(Si, Xi) = Sj, Si, Sj∊S, Xi∊I

만약 인간을 유한 상태 기계로 모델링한다면 먼저 인간이 가질 수 있는 상태를 정

해야 한다. 인간이 갖는 상태는 희노애락의 감정 상태를 비롯해서 수많은 상태가 존

재한다. 하지만 유한 상태 기계에서는 유한개의 상태를 가져야 하므로 인간의 상태

를 단순화하여 배고플 때와 배부를 때의 두 상태 만을 고려해 보자. 배고픈 상태와

배부른 상태에 도달하기 위한 입력으로는 간단히 식사와 운동만을 고려해 보자. 그

러면 현재의 상태에서 식사와 운동이라는 입력이 주어지면 상태의 변화가 발생하게

되는데 이것이 유한 상태 기계를 결정하는 전이 함수가 된다. 이렇게 단순하게 정의

된 인간의 유한 상태 기계를 그림으로 표현하면 다음과 같다.

배 부른상태

배 고픈상태

운동

식사

Page 20: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

20 • 제 10장 형식 언어와 유한상태 기계

유한상태 기계가 사용되는 분야로는 철자법 조사, 문법 조사, 음성 인식 등을 포

함하여 컴퓨터 관련 분야에서 광범위하게 사용되고 있다. 유한 상태 기계를 이해하

기 위해서 가장 간단한 실제 예로서 디지털 회로 중의 하나인 플립 플롭(flip-flop)을

생각해 보자. 플립 플롭은 두 가지 상태와 두 가지 입력으로 구성되며 입력에 대해서

한 상태에서 다른 상태로 전이하는 장치이다. 플립 플롭은 다음과 같은 유한 상태 기

계로서 표현할 수 있다.

플립 플롭: (S, I, f)

S = {0, 1}

I = {0, 1}

f : f(0,0)=0, f(1,0)=1, f(0,1)=1, f(1,1)=0

유한 상태 기계를 이해하기 쉽게 표현하는 방법으로 상태 전이 테이블(state

transition table)로 표현하는 방법과 비방향 그래프(digraph)의 상태 도표로 표현하는

방법이 있다. 그림10-2는 플립 플롭을 이 두 가지 방법으로 표현한 것이다.

10 01

그림10.2 플릴 플롭(flip-flop) 유한 상태 기계

유한 상태 기계는 출력이 있는 경우와 없는 경우 두 가지로 구분된다. 출력이 있

는 유한 상태 기계는 각 상태의 입력에 대해서 출력이 존재하는 것이다. 위에서 예를

든 단순화한 인간의 경우 식사라는 입력이 주어지면 에너지라는 출력이 발생하고,

운동이라는 입력이 주어지면 땀이라는 출력이 발생한다. 따라서 출력이 있는 유한

상태 기계의 경우 출력={에너지, 땀}이라는 요소가 유한 상태 기계를 정의하는데 추

가되어야 한다.

정의 10.4

Page 21: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.2 출력이 있는 유한 상태 기계 • 21

M = (S, I, O, f, g, s0) S,

I, O,

f,

g, s0 .

예제10.32 아래의 상태 전이 테이블은 S = {S0, S1, S2, S3}. I = {0, 1}, O = {0, 1}인 유

한 상태 기계를 기술하고 있다. 추이 함수 f의 값 들은 처음 두 행에 표시되어

있고 출력 함수 g의 값 들은 마지막 두 행에 표시되어 있다.

위의 상태 테이블에 표시된 유한상태 기계에 대한 상태 도표는 아래와 같이

구해질 수 있다.

Page 22: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

22 • 제 10장 형식 언어와 유한상태 기계

예제10.33 아래 그림에 있는 상태 도표를 보고 이에 맞는 상태 전이 테이블을 구하라.

이 상태 도표에 해당하는 상태 전이 테이블은 다음과 같다.

유한상태 기계가 입력 문자열을 처리할 때, 시작 상태에서 출발하여 전이 함수에

따라 다음의 상태가 결정되고, 출력 함수에 따라 다음의 출력이 결정되는 일련의 과

정을 거친다. 입력 문자열을 왼쪽에서 오른쪽으로 읽어 나감에 따라 각 입력 기호는

Page 23: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.3 출력이 없는 유한 상태 기계 • 23

하나의 상태에서 또 다른 상태로 기계를 이동 시킨다. 각 출력 함수는 출력을 생성하

므로 입력 문자열은 출력 문자열을 생성시킨다.

입력 문자열이 X=X1X2...Xk 라고 가정하자. 이 입력을 읽으면, S1 = f(S0, X1) 이므

로 기계는 S0 상태에서 S1 상태로 이동하고, S2 = f(S1, X2) 이므로 기계는 S1 상태에

서 S2 상태로 다시 이동하고, 이와 같은 일을 계속하여 상태 Sk = f(Sk-1, Xk) 에서 끝

난다. 이와 같은 일련의 추이는 출력 문자열 Y1Y2...Yk를 생성한다. 여기서, S0에서 S1

으로의 추이에 대응하는 출력은 Y1 = g(S0, X1) 이고, S1에서 S2로의 추이에 대응하는

출력은 Y2 = g(S1, X2) 등과 같다. 일반적으로 j=1, 2,..., k에 대해서 Yj = g(Sj-1, Xj) 이

다. 따라서 입력 문자열 X에 대응하는 출력을 Y라 할 때 g(X) = Y 형태로 출력 함수

g의 정의를 확장할 수 있다.

예제10.34 예제 10.30에 있는 유한상태 기계에 문자열 101011을 입력 시킬 때 생성되는

출력 문자열을 구하라.

위의 예제에서 보듯이 출력이 있는 유한 상태 기계는 입력 문자열을 읽어서 0과

1로 구성된 문자열을 출력함으로써 언어를 인식하는데 사용될 수 있다. (0일 경우 인

식이 안됨, 1일 경우 인식됨.)

10.7 유한 상태 오토마타와 언어

출력이 없는 유한 상태 기계는 유한 상태 오토마타(automata)라고도 하는데, 출력

이 없는 대신 최종 상태가 있다는 점에서 출력이 있는 유한 상태 기계와 다르다.

Page 24: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

24 • 제 10장 형식 언어와 유한상태 기계

정의 10.5M=(S, I, f, S0, F) S,

I, f,

S0, S F .

유한상태 오토마타의 상태 도표(state diagram에서 최종 상태는 두개의 원으로 표

시된다.

예제 10.35 S = {S0, S1, S2, S3}, I = {0, 1}, F = {S0, S3}이고, 전이 함수 f는 아래의 상태 테

이블과 같이 정의되는 유한상태 오토마타의 상태 도표를 구하라.

Page 25: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.3 출력이 없는 유한 상태 기계 • 25

최종 상태는 유한 상태 기계가 받아드릴 수 있는 상태(acceptance states)를 의미하

는데 이러한 유한 상태 기계를 특별히 무어 기계(Moore machine)라고도 한다.

정의 10.6I* w S0 , f(S0, w)

F w M=(S, I ,f, S0, F)

. M ( ) M

L(M) .

Page 26: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

26 • 제 10장 형식 언어와 유한상태 기계

예제 10.36 다음의 유한상태 오토마타 M1, M2, M3에 의해 인식되는 언어 L(M1)을 구하라.

M1의 최종 상태는 S0가 유일하다. 그러므로 L(M1)을 구하기 위해서는 S0에서 S0로 가는 문자열을 구하면 된다. 그것은 하나 이상의 1로 구성되는 문자열이다. 즉 L(M1) = {1n | n = 0, 1, ...} 이다.

예제 10.37

다음의 유한상태 오토마타 M2에 의해 인식되는 언어 L(M2)을 구하라.

Page 27: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.3 출력이 없는 유한 상태 기계 • 27

M2의 최종 상태는 S2 이다. 그러므로 L(M2)는 S0 에서 S2로 가는 문자열을 구하면 된다. 그것은 문자열 1과 01이다. 즉 L(M2) = {1, 01}이다.

예제 10.38 다음의 유한상태 오토마타 M3에 의해 인식되는 언어 L(M3)을 구하라.

M3에서 최종 상태는 S0 와 S3 이다. 먼저 S0에서 S0로 가는 문자열은 {0n | n =0, 1, ... }이다. S0에서 S3로 가는 문자열은 n개 이상의 0이 나온 후 10이 나오고 그 다음에는 0또는 1이 임의의 개수만큼 나오는 것이다. 즉 L(M3) = {0n10w | n = 0, 1, ..., 그리고 w는 0과 1로 된 임의의 문자열}이다.정리 10.1에서 정규 문법 G로부터 생성되는 언어 L(G)는 정규 집합이라고 말하였

다. 이제 정규 문법과 유한 상태 오토마타와의 관계에 대해서 밝혀보자.

정리 10.2 정규 문법 G=(V, I, S0, P)가 있을 때 L(G)과 동일한 집합인 L(M)을 갖는 유한 상태 오

토마타 M이 존재한다. 즉,

G={V, I, S0, P) ≡ M={S, I, f, S0, F}

이며 또한

Page 28: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

28 • 제 10장 형식 언어와 유한상태 기계

L(G) ≡ L(M)이 성립한다.

따라서 정리 10.2에 의하면 어떤 유한 상태 오토마타 M이 주어졌을 때 L(M)을 생

성하는 정규 문법 G를 구할 수 있으며, 역으로 어떤 과제가 정규식으로 표현할 수

있으면 이 과제를 수행하는 유한 상태 오토마타를 만들 수 있다.

먼저 첫 번째 경우, 유한 상태 오토마타 M에서 G를 구하는 방법을 살펴보자. M에

서 다음과 같이 G를 구할 수 있다.

M ={S, I, f, S0, F} → G = {V, I, S0, P)

(1) M의 입력 문자열의 집합(I)은 G의 단말 기호가 된다.

(2) M의 S는 G의 비단말 기호가 된다. 즉, G의 V는 M의 S와 I의 합집합이 된다.

V=S⋃I

(3) G의 생성 규칙 P는 다음과 같이 구한다.

Si, Sj ∈ S, x ∈ I일 때

만약 f(Si, w) = Sj 이면, Si → wSj

만약 f(Si, w) ∈ T이면, Si → w

예제 10.39 다음과 같은 상태 도표를 갖는 유한 상태 오토마타가 인식하는 언어의 정규

문법을 구하라.

정규 문법 G=(V, I, S0, P)

V = {S0, S1, S2, 1, 2, 3}

I = {1, 2, 3}

P: S0 → 1S1

S1 → 2S2

S2 → 3S2

S1 → 2

Page 29: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.3 출력이 없는 유한 상태 기계 • 29

S2 → 3

예제 10.40 다음과 같은 상태 도표를 갖는 유한 상태 오토마타가 인식하는 언어의 정규

문법을 구하라.

정규 문법 G=(V, I, S0, P)

V = {S0, S1, S2, a, b}

I = {a, b}

P: S0 → aS0

S0 → bS1

S1 → aS1

S1 → bS2

S2 → aS2

S2 → bS2

S1 → b

S2 → a

S2 → b

이 언어의 정규 문법 G는 정규식 a*ba*b(a b)*으로 표현할 수 있다.

역으로 어떤 과제가 주어졌을 때 이 과제를 수행하는 유한 상태 기계를 설계할 수

있다. 이 과제가 정규식 혹은 BNF 혹은 문법 다이어그램으로 표현될 수 있다면 이

정규 문법이 생성하는 언어를 인식하는 유한 상태 오토마타를 만들 수 있다.

예제 10.41 입력 문자열 집합 {0, 1}에서 문자열 001을 인식하는 유한 상태 오토마타 M

을 만들어라. 즉, I={0, 1}, L(M) = {001}이다.

Page 30: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

30 • 제 10장 형식 언어와 유한상태 기계

예제 10.42 입력 문자열 집합 {0, 1}에서 L(M) = {w| w는 01과 10을 포함하고 있는 문자

열}을 인식하는 유한 상태 오토마타를 만들어라.

이와 같이 만들어진 유한 상태 오토마타는 최적의 오토마타라고 할 수는 없다. 불

필요한 상태가 있기 때문에 최소의 상태의 수를 갖는 유한 상태 오토마타를 만들 수

있다. 여기서는 최적의 기계를 찾는 방법은 더 이상 언급하지 않는다. 관심있는 독자

는 관련 문헌을 참고하기 바란다.

지금까지 살펴본 유한 상태 오토마타는 현재의 상태에서 하나의 입력에 대하여

그 다음 상태가 전이함수에 의해서 유일하게 결정된다. 이러한 유한 상태 오토마타

를 결정적(deterministic)이라고 부른다. 이와는 다르게 다음의 상태가 여러 가지로 가

능한 경우가 있는데 이러한 유한상태 오토마타를 비결정적(non-deterministic)이라고

부른다,

Page 31: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

10.3 출력이 없는 유한 상태 기계 • 31

예제 10.43 아래의 상태 테이블에 해당하는 비결정적 유한상태 오토마타의 상태도표를 구

하라. 최종 상태는 S0과 S4이다.

예제 10.44 위의 비결정적 유한상태 오토마타에 의해 인식되는 언어를 구하라.

시작 상태 S0에서 최종상태 S0로 가는 추이는 입력 0이 들어올 때이다. 0개 이

상의 0만 연속해서 들어오는 모든 문자열을 이 기계는 인식한다. S4도 최종 상

태이므로 S0에서 입력 문자열로 도달할 수 있는 상태의 집합 중에서 S4가 들어

Page 32: 형식 언어ants.mju.ac.kr/2014Spring/DM/ch10.pdf · 2015-08-06 · 10 • 제10장 형식 언어와 유한상태 기계 10.3 문법의 표현 문맥 자유 문법을 정의하기

32 • 제 10장 형식 언어와 유한상태 기계

있는 모든 문자열이 인식된다. 이러한 문자열은 0개 이상의 0이 연속해서 나오

고 01 또는 11이 나오는 경우뿐이다. 즉 이 기계에서 인식되는 언어는 {0n0n

010n11| n > 0}이다.