720 likes | 2.13k Views
2. 형식언어와 유한 오토마타. 형식언어의 기초 형식문법 문법의 표기법 정규 문법 , 문법 도표 , BNF, EBNF 표기법 정규언어와 유한 오토마타 유한 오토마타 , DFA 와 NFA, 동치 , 상태수 최소화 정규 문법 , 정규 표현과 유한 오토마타의 동치. 2.1 형식언어 (Formal Language) 기초. 정의들. 형식언어 - 어떤 알파벳 (alphabet) 에서 얻은 기호 (symbol) 들로 구성되는 문자열 (string) 들의 집합 알파벳 : 기호들의 유한 집합
E N D
2. 형식언어와 유한 오토마타 • 형식언어의 기초 • 형식문법 • 문법의 표기법 • 정규 문법, 문법 도표, BNF, EBNF 표기법 • 정규언어와 유한 오토마타 • 유한 오토마타, DFA와 NFA, 동치, 상태수 최소화 • 정규 문법, 정규 표현과 유한 오토마타의 동치
2.1 형식언어(Formal Language) 기초 • 정의들 형식언어 - 어떤 알파벳(alphabet)에서 얻은 기호(symbol)들로 구성되는 문자열(string)들의 집합 알파벳: 기호들의 유한 집합 문자열: 알파벳을 구성하는 기호들의 0 또는 1개 이상 나열(sequence)된 것 알파벳, 문자열의 예 집합 T = {a,b,c}가 주어졌을 때 집합 T는 기호 a,b,c들의 집합이므로 알파벳이다. 그리고 T로부터 만들어지는 문자열들은 “a,b,c,ab,ac,ca,aabc,….”등이다. an이란 a가 n개 나열된 문자열을 나타낸다. T*에서ε를 제외한 모든 문자열 문자열의 길이가 0 언어 (Language) 알파벳 T에 대한 언어 L은 T*(T의 star closure)의 부분집합이다. 즉, 알파벳 T = {a,b,c}가 주어졌을 때 L1 = {ε, a, aa}, L2 = {anbn | n => 1}등은 언어이다. T* = T+ (T dagger) + ε
2.1 형식언어 기초(Con’t) • 정의들 알파벳: T = { a, b, c } 일 때, 문자열(w) : , a, ca, abc, ... an = aaaaa ..… a 이며, T* = { , a, b, c, aa, ab, ac, …} 이고, T+ = { a, b, c, aa, ab, ac, …} 알파벳 T에 대한 언어 L은 T*의 부분 집합이다. 형식언어 : L T* |w|는 문자열의 길이, w는 임의의 문자열 |w|는 w의 cardinality, 임의의 문자열 u, v에 대해 u· = ·u이고, u··v = uv이다.
2.1 형식언어 기초(Con’t) • 정의들 a* = { , a, aa, aaa, aaaa, … } 이며, (a | b)* 일 때, 부분 집합들은 = { , a, aa, aaa, aaaa, … b, bb,bbb, bbbb, … ab, aab, aabb, abb, …} 이며, 이는 anbm으로 축약(정규방정식)
2.2 형식 문법(Formal Grammar) • 문법을 살펴볼 수 있는 예 (식별자 : Identifier) • 문법 규칙이 존재한다. • 첫 글자는 영문자 • 영문자 + 숫자 • 8자 이내 ABC := E * 3.14 + ABC / E;
2.2 형식 문법(Con’t) • 형식언어를 생성하기 위한 규칙 Grammar Symbol : Vocabulary 형식문법 G = (VN, VT , P, S) 단, VN : 논터미널(non-terminal) 기호들의 유한집합 VT : 터미널 기호의 유한집합 P : 생성규칙(production rule)의 집합 S : 시작기호(start symbol)
> 2.2 형식 문법(Con’t) • 형식문법 예 [예] G = ( {S, A}, {0, 1}, P, S ) P : S 0 | 0AS A SS | 10 | S1A Q :문법 G에서 ‘0’이 허용되는 문자열인가 ? S 0 S 0 Directly derive
> 2.2 형식 문법(Con’t) • 형식문법 예 [예] G = ( {S, A}, {0, 1}, P, S ) P : S 0 | 0AS A SS | 10 | S1A Q : 문법 G에서 ‘0000’이 허용되는 문자열인가 ? S 0AS 0SSS 0000 S 0000 S 0000 + 한 번 이상 derive
> 2.2 형식 문법(Con’t) • 형식문법 예 [예] G = ( {S, A}, {0, 1}, P, S ) P : S 0 | 0AS A SS | 10 | S1A Q : 문법 G에서 ‘001100’이 허용되는 문자열인가 ? S 0AS 0S1AS 0S110S 001100 S 001100 S 001100 + 한 번 이상 derive
> > > > 2.2 형식 문법(Con’t) • Derivation 한번 이상의 유도 0번 이상의 유도 직접 유도 α1은 αn을 생성(produce) 또는 유도(derive)한다. αn은 α1으로 reduce된다 + * * α1 αn
2.2 형식 문법(Con’t) • 문법의 4 종류(Chomsky 계층구조) • 생성 규칙의 형태에 가해지는 제한에 따라 구분 • Type 0 : 생성규칙에 어떠한 제한이 없다 • 다만, α β일 때, α는 ε(Empty) String이 될 수 없다. • Type 1 : αβ일 때, β의 길이가 α의 길이보다 길다 • 즉, |α| <= |β| (Context-Sensitive Grammar : CSG) • Type 2 : Context Free Grammar (CFG, 구문분석) • 모든 생성 규칙은 A α의 형태를 갖음 • A는 Nonterminal, α는 V*에 속하는 String • 생성규칙 좌측은 Nonterminal, 우측은 Terminal, Nonterminal로 구성 • Type 3 : Regular Grammar(RG, 정규문법, 어휘분석) • A tB 또는 A t (A,B ∈ VN, t ∈ VT*) : Right-Linear(우선형 문법) • A Bt 또는 A t (A,B ∈ VN, t ∈ VT*) : Left-Linear(좌선형 문법)
, |||| A , A VN A tB 2.2 형식 문법(Con’t) • 문법 4종류 포함관계 UnrestrictedGrammar Context-sensitive Grammar Context-Free Grammar Regular Grammar
2.2 형식 문법(Con’t) • 인식기(Recognizer)와 언어 • 문법이 주어지면, 그 문법에 맞는 언어를 생성할 수 있다. • 즉, 하나의 컴파일러를 만드는 것은 주어진 언어를 인식하는 인식기를 만드는 작업
2.2 형식 문법(Con’t) • 어떤 종류의 문법? 정규 문법인지? [예] G1 = ( {S, A, C}, {a, b, c}, P, S ) P : S A A abC bB bb A aABC CB BC bC bb 정규문법 미 준수 터미널 기호 하나와 non 터미널 기호 하나로 이루어지지 않음 왼쪽 부분이 하나의 non 터미널 기호로 이루어지지 않음 Type 2 미 준수 But, , |||| 만족 Type 1 문법 : CSG
2.2 형식 문법(Con’t) • 어떤 종류의 문법?(Con’t) [예]G2 = ( {S, C}, {a, b}, P, S ) P : S aCa C b C aCa But, A , A VN 정규문법 미 준수 type 2 (CFG) 문법 [예]G3 = ( {S, B, C}, {a, b}, P, S ) P : S aS | aB B bC C aC | a A tB type 3 우선형 정규 문법
2.2 형식 문법(Con’t) • 정규 문법에 따른 정규 표현식 • 유도과정 [예] G3 = ( {S, B, C}, {a, b}, P, S ) P : S aS | aB B bC C a | aC S aB abC abaC abaaC abam [예]G3 = ( {S, B, C}, {a, b}, P, S ) P : S aS | aB B bC C a | aC S aB abC aba abam , aba aba [예] G3 = ( {S, B, C}, {a, b}, P, S ) P : S aS | aB B bC C a | aC S aS aaS anS [예] G3 = ( {S, B, C}, {a, b}, P, S ) P : S aS | aB B bC C a | aC S aba S abam S anS anS, abam, aba anS, abam, aba anabama
2. 3 문법의 표기법 • 정규언어 • 정규 표현 • 문법 도표 • BNF 표기법 • EBNF 표기법
2. 3 문법의 표기법(계속) • 정규언어(Regular Language) • Chomsky 문법구조에서 Type 3에 해당되는 언어 • 정규 문법에 의해 생성되는 언어 • 정규문법, 정규 표현, 유한 오토메타로 표현 가능 • 정규 문법 • Type 3에 해당되는 정규언어의 문법 • 어휘 분석 과정에서 인식되는 토큰의 구조를 표현 • 형태 • 생성 규칙의 오른쪽에 있는 Nonterminal의 위치에 따라 • 우선형 문법(RLG : Right-Linear Grammar) • 좌선형 문법(LLG : Left-Linear Grammar) • 따라서, 모든 RLG는 그와 동등한 LLG를 만들 수 있으며, 그 역도 성립 A aB B Cd
2. 3 문법의 표기법(계속) • 정규문법(계속) • 문법 예 RLG : A tB, A t LLG A Bt, A t, 여기서 A,B ∈ VN이고 t ∈ VT* G1 : S 000S | 000 RLG G2 : S S000 | 000 LLG But, 다음 문법에 해당되는 언어는 정규언어가 아니다. G : S aR | c R Sb L(G) = {ancbn | n ≥ 0} Context-Free 언어(Type 2) RLG, LLG가 Mixed
2. 3 문법의 표기법(계속) • 정규 문법(계속) • 모든 RLG는 그와 동등한 LLG를 만들 수 있음(역도 성립) • RLG 형태가 언어의 구조를 더 자연스럽게 표현함 • 따라서, 정규 문법을 우선형 문법으로 재정의함. S S 1) A aB, A a, 여기서 a ∈ VT이고 A, B ∈ VN이다. 2) 만약 S ε이면, S가 다른 생성 규칙의 오른쪽에 나타나지 않아야 한다.( ε-Free 문법) 보충 우선형 형태의 생성규칙 A tB, t ∈ VT*에서, t a1a2…an, ai ∈ VT라 하면, 생성규칙 A a1a2…anB를 다음과 같이 정규 문법 형태로 풀어서 쓸 수 있음 A a1A1 A1 a2A2 …. An-1 anB S abcA↔ S aS1, S1 bS2, S2 cA A bcA↔ A bA1, A1 cA A cd↔ A cA2, A2 d above Example another Example
2. 3 문법의 표기법(계속) • 정규 문법(계속) • 선형 문법에서 t = ε인 경우, • 2가지 생성규칙 형태 발생가능 • A B 형태 (single production) • A ε형태 (epsilon production) • 구문 분석 과정에서 제거 대상이 됨 • 즉, 정규언어는 다음 방식에 의해 생성 • 모두 동일한 의미를 나타냄 • 언어 L은 우선형 문법에 의해 생성된다. • 언어 L은 좌선형 문법에 의해 생성된다. • 언어 L은 정규 문법에 의해 생성된다.
2. 3 문법의 표기법(계속) • 정규표현(Regular Expression) • 정규 언어를 표현하기 위한 하나의 방법 • 정규 언어에 속해 있는 스트링의 모양을 직접 기술하는 형태 • 기본 원소와 연산자로 구성 • 기본 원소 : Φ (공집합), ε, terminal symbol • 스트링 구조 연산자 : +(union), *(closure), ·(concatenation) • 연산자 순위 : + < · < * • 문법이 주어졌을 때 주어진 문법이 정규 문법일 경우, 그 문법이 생성하는 언어를 구할 수 있다. • 정규 문법으로부터 일련의 정규 표현식을 유도함으로써 가능 • 따라서, 정규 문법과 정규 표현은 같은 종류의 언어를 나타냄
2. 3 문법의 표기법(계속) • 정규표현(계속) • 정규 문법을 가장 잘 나타냄 • Φ은 공집합 {Φ}를 나타냄 • ε은 {ε}을 나타냄 • a ∈ VT인 a는 집합 {a}를 나타냄 • 만일 P와 Q가 정규언어 LP, LQ를 표현한다면, • (P + Q)는 LP ∪ LQ를 나타냄 • (P · Q)는 LP· LQ를 나타냄 • (P*)는 {ε} ∪ LP1 ∪ LP2 ∪ LP3 …을 나타냄 • *, · , | (정규표현 구성 연산자) • P+는 P·P*의 단축형 (zero or more) • (P+Q)는 (P|Q)로도 표현(택일) • P·Q는(·)를 생략하고 PQ로 간단히 표현(연결) 정규표현 예) - (a+b)*abb , 00*(0+1)*1
2. 3 문법의 표기법(계속) [정규문법] : X → αX | β • 정규문법을 정규표현으로…. α*β - 문자열을 유도해 보면 X → β X → αX → αβ → ααX → ααβ → αααX → αααβ → ααααX → ααααβ X = α*β
2. 3 문법의 표기법(계속) • 문법 도표(Syntax Diagram) • 문법을 도식화하는 방법 • 사각형 : Nonterminal, 타원 : Terminal, 지시선 : 다음 기호를 보기 위한 역할 P : V0 aV1 V1 bV0|a
2. 3 문법의 표기법(계속) • BNF/EBNF 표기법 • BNF : Backus Normal Form • Backus Naur Form • ALGOL 60의 문법 표기법 • Nonterminal : < , >로 표현 • 대체 : ::= • 양자택일 : | • EBNF : Extended BNF • BNF의 반복 표현되는 부분을 표현 • 메타기호 • {a} : 0번 이상 반복 : a* • [a] : a가 나타나지 않거나 한번 나타남 : a 1 0
2. 3 문법의 표기법(계속) • BNF/EBNF 표기법(계속) • 식별자(Identifier) • 문법 • 첫 글자는 영문자, 또는 영문자 + 숫자 , 그리고 8자 이내 • 식별자에 대한 BNF ABC := E * 3.14 + ABC / E; <식별자> ::= <영문자> | <식별자><영문자> | <식별자><숫자> <영문자> ::= a | b | c | …. | z <숫자> ::= 0 | 1 | 2 | … | 9 첫 자가 영문자로 시작되며, 두 번째 문자부터 영문자 또는 숫자가 온다.
2. 3 문법의 표기법(계속) • EBNF를 이용한 식별자(Identifier) 표현 • 식별자의 길이가 제한 7 0 예) abc <식별자> ::=<영문자> {<영숫자>} <영문자> {<영문자>|<숫자>} <영문자> {<영문자>} - 1번 <영문자> <영문자> <영문자> - 2번 abc <식별자> ::= <영문자> {<영숫자>} <영숫자> ::= <영문자> | <숫자> <영문자> ::= a | b | c | … | y | z <숫자> ::= 0 | 1 | 2 | … | 8 | 9 7 0 <식별자> ::= <영문자> {<영숫자>} <영숫자> ::= <영문자> | <숫자> <영문자> ::= a | b | c | … | y | z <숫자> ::= 0 | 1 | 2 | … | 8 | 9 7 0 예) a5c <식별자> ::=<영문자> {<영숫자>} <영문자> {<영문자>|<숫자>} <영문자> <숫자><영문자> a5c 7 0 7 0
2. 4 정규 언어와 유한 오토마타 • 유한 오토마타(Finite Automata : FA) • 시스템이 변화할 수 있는 상태가 유한 개 • 정규 언어를 받아들이는 인식기 어휘 분석기 Yes 인식 가능 문자열 w 유한 오토마타 No w ∈ L(T) 인식 불가능
2.4 정규 언어와 유한 오토마타(계속) • 정규 문법, 정규표현, 유한 오토마타의 관계 정규표현 정규문법 동치관계 유한오토마타 서로 변환될 수 있음
2.4 정규 언어와 유한 오토마타(계속) • 유한 오토마타(Finite Automata : FA) 표현법 • 정의에 따른 5가지 구성 요소로 사용(형식적인 방법) M = (Q, Σ, δ, q0 , F) 단, Q = 상태들의 유한 집합 Σ = 입력 기호들의 유한 집합 q0 = 시작 상태(Start State, Initial State)로 q0 ∈ Q F = 종결 상태들의 집합으로 F ∈ Q δ(델타) = 상태 전이함수(State Transition Function) 즉, Q ∑ 2Q(Q의 멱집합)
2.4 정규 언어와 유한 오토마타(계속) • 유한 오토마타(Finite Automata : FA) 표현법 • 상태 전이 함수 • Q(상태) ⅹ ∑(입력기호) 2Q (power set of Q) • 즉, δ(q, a) = {p1, p2, …, pn}는 q상태에서 입력 a를 본 • 다음 상태(next state)는 p1부터 pn중에 하나를 선택할 수 있다는 의미 • 결정적 FA(deterministic FA : DFA) • 비결정적 FA(nondeterministic FA : NFA)가 있음 • 멱집합?집합A에 대하여 A의 모든 부분집합을 원소로 하는 집합, P(A)로 쓰거나 2^A 으로 표현- 예를 들면 A={1,2} 라 하면 A의 모든 부분집합은 φ,{1},{2},{1,2} 4개가 됨. • 멱집합은 이것을 원소로 하는 집합임. 따라서 P(A)={φ,{1},{2},{1,2}}
2.4 정규 언어와 유한 오토마타(계속) • 유한 오토마타(Finite Automata : FA) 표현법(계속) • 상태 전이도(Transition Diagram)(비 형식적인 방법) • 식별자 규칙을 상태전이도로 표현 • 각 상태를 노드로 표현, 종결 상태는 이중 원으로 표현, 시작은 시작 지시선(유향 그래프) 사용 • 이동함수 δ(q, a) = p표현은 상태 q에서 p로 가는 레이블에 a인 지시선으로 표현 식별자 ABC := E * 3.14 + ABC / E; - 첫 자는 영문자, 다음부터 영자와 숫자의 조합
a b c b q0 q1 q1 q1 7, a, 8 q0 q1 2.4 정규 언어와 유한 오토마타(계속) • 유한 오토마타(Finite Automata) • 상태전이도 예 Q : abc는 식별자인가? abc 는 식별자이다 Q : b7a8는 식별자인가? b7a8 는 식별자이다
a b c … z 0 1 … 9 q0 q1 q1 q1 q1 …q1 … q1 q1 q1 …q1 q1 q1 …q1 2.4 정규 언어와 유한 오토마타(계속) 유한오토마타(Finite Automata)형식적 표현 M = (Q, Σ, δ, q0 , F) 단, Q = { q0, q1 } Σ = { a, b, c, …, z, 0, 1, …, 9 } q0= q0 F = { q1} δ전이함수 위의 상태전이 함수의 형태는 결정적 유한 오토마타(Deterministic Finite Automata[DFA])와 비결정적(Nondeterministic Finite Automata[NFA])를 구분한다.
2.4 정규 언어와 유한 오토마타(계속) • 유한오토마타(Finite Automata) • 결정적 유한 오토마타(DFA) • ε에 의한 상태 전이가 없다. • δ(q, a) = ( P1, P2, ….., Pn}에서 n = 1이다. • 즉, 어떤 상태에서 하나의 입력 기호에 대해서 오직 한 개의 다음 상태가 결정된다. • 비 결정적 유한 오토마타(NFA) • ε에 의한 상태 전이가 있거나, • δ(q, a) = (P1, P2, ….., Pn}에서 n ≥ 1이다. • 즉, 어떤 상태에서 하나의 입력 기호에 대해서 다음 상태가 두 개 이상이다.
1 1 q1 q0 0 0 0 0 q2 0 1 2.4 정규 언어와 유한 오토마타(계속) NFA(Non Deterministic FA) M = (Q, Σ, δ, q0 , F) 단, Q = { q0, q1, q2 } Σ = { 0, 1 } q0= q0 F = { q2} 이해 : q0에서 입력 기호 0을 본 다음 상태는 q0와 q2가 된다. Start 하나의 입력 기호에 여러 개의 다음 상태가 나옴 구현하기도 어렵고, 구현하더라도 인식하는데 시간이 소요됨 DFA로 변환하여 사용함 상태전이도
1 0 1 q1 q0 0 q3 1 0 q2 1 0 2.4 정규 언어와 유한 오토마타(계속) 전이함수 확장 DFA(Deterministic FA) δ(q0, 1001) = δ(q1, 001) = δ(q3, 01) = δ(q1, 1) = q0∈ F 이므로 인식 M = (Q, Σ, δ, q0 , F) 단, Q = { q0, q1, q2, q3} Σ = { 0, 1 } q0= q0 F = { q0} Start Q : 문장 ‘1001’과 ‘100001’을 인식하는가? 상태전이도 하나의 입력 기호에 하나의 다음 상태가 나옴 0과 1의 개수가 짝수개인 문자열을 인식
2.4 정규 언어와 유한 오토마타(계속) NFA(Non Deterministic FA) M = (Q, Σ, δ, q0 , F) 단, Q = { q0, q1, q2, q3,q4} Σ = { 0, 1 } q0= q0 F = { q2, q4} 0/1 1 q1 1 Start 0/1 q0 q2 • δ(q1, 0) = Ø, δ(q3, 1) = Ø의 의미 • q1에서 입력 0은 없다. • q3에서 입력기호 1은 없다. 상태전이도 q3 q4 0 0 0/1
0/1 1 q1 1 NFA(Non Deterministic FA) Start 0/1 q0 q2 입력 ‘01001’ 문자열 에 대한 상태 전이 상태전이도 q3 q4 0 0/1 0 1 0 0 1 q0 q0 q0 q0 q0 q0 1 0 1 0 0 q3 q1 q3 q3 q1 0 q4 ‘01001’을 모두 본 후 나온 상태는 {q0, q1, q4} ∩ F = { q4} 그러므로, ‘01001’은 주어진 NFA에 의해 인식됨 1 q4 여러가지 경우가 있다??? NFA
q2 0 0 0 0, 1 0, 1 0, 1 q0 q1 qf 1 q3 1 1 비결정적 유한 오토메타(NFA) • 다음 규칙을 지키는 언어를 정의하기 위한 전이함수 확장 NFA M = ({q0,q1,q2,q3,qf}, {0, 1}, δ, q0, {qf}) δ(q2,1)은 정의되지 않음을 의미 전이함수 상태전이도 전이함수를 확장하지 않고 상태전이도를 그대로 적용할 수도 있다.
q2 0 0 0 q0 q1 qf 0, 1 0, 1 0, 1 1 q3 1 1 비결정적 유한 오토메타(NFA) • 전이 함수 확장(단계 1 : 입력으로 스트링이 오도록 확장) • δ(q, ε) = { q } • δ(q, xa) = {p∈ δ(q, x)}∪δ(p, a) , 여기서, x ∈ ∑*이고 a ∈ ∑ (입력기호)이다. • 즉, q상태에서 스트링 xa를 본다는 것은 x를 전부 본 상태에서 a를 본 상태들의 합집합과 • 같음을 의미 가능한상태를 전부 확인한 후, 해당되는 상태로 …. Q0에서는 입력 기호에 관계없이 q1, q2, q3로 전이 가능 그러나, 입려기호 1로갈수 있는 곳은 q1, q3 뿐. δ(q0, 1001) = δ(q1,001) ∪ δ(q3, 001) = δ(q1, 01) ∪ δ(q2, 01) ∪ Φ = δ(q1, 1) ∪ δ(q2, 1) ∪ δ(qf, 1) = {q1, q3, df} 둘 다 ‘1’로 도달
q2 0 0 0 q0 q1 qf 0, 1 0, 1 0, 1 1 q3 1 1 비결정적 유한 오토메타(NFA) • 전이 함수 확장(단계 2 : 한 개의 상태를 여러 상태로 확장) k δ( {p1, p2, …., pk}, x) = ∪ δ(pi, x) 즉, 일련의 상태에서 스트링 x를 본다는 것은 각각의 상태에서 x를 본 상태들의 합집합과 같음을 의미 i = 1 단계 1(이전 내용) δ(q0, 1001) = δ( {q1, q3}, 001) = δ( {q1, q2}, 01) = δ( {q1, q2, qf}, 1) = {q1, q3} ∪ ø ∪{qf} = {q1, q3, qf} = δ(q1,001) ∪ δ(q3, 001) = δ(q1, 01) ∪ δ(q2, 01) ∪ Φ = δ(q1, 1) ∪ δ(q2, 1) ∪ δ(qf, 1) = {q1, q3, df}
q2 0 0 0 q0 q1 qf 0, 1 0, 1 0, 1 1 q3 1 1 비결정적 유한 오토메타(NFA) • 유한 오토마타 M에 의해 인식되는 스트링 전체를 모아 놓은 집합을 M에 의해 인식되는 언어라하고, 다음과 같이 표기함 Accept : L(M) = (x | δ(q0, x) ∩ F(종결상태) ≠ Φ } Q : NFA M은 스트링 1011을 인식하는가? δ( {q0}, 1011) = δ( {q1, q3}, 011) = δ( {q1, q2}, 11) = δ( {q1, q3, qf}, 1) = {q1, qf} ∩ F ≠ø A : NFA M은 스트링 1011을 인식한다.
2.4 정규 언어와 유한 오토마타(계속) • DFA와 NFA 정리 • NFA가 DFA보다 언어의 구조를 쉽게 표현함 • 반면, 구현은 DFA가 용이 • 따라서, 서로 변환이 요구됨 변환 DFA NFA
2.4 정규 언어와 유한 오토마타(계속) • DFA와 NFA의 동치관계 • DFA와 NFA는 서로가 동등하다. • Equivalent • 정리에 대한 증명 • DFA ⊂ NFA 이므로 NFA ⊂ DFA 임을 증명해 주면 된다. • DFA는 NFA이다. 그렇다면, NFA가 DFA인가? • ε- 전이가 있는 경우, 없는 경우로 구분
NFA를 DFA로의 변환 • ε전이가 없는 경우 • NFA M = (Q, ∑, δ, q0, F)에 인식되는 언어를 L이라 하면, L을 인식하는 DFA M’= (Q’, ∑’, δ’, q0’, F’)은 다음과 같이 구성됨 • Q’ = 2Q(Q의 부분 집합의 집합(Power set)) • 즉, Q’의 한 상태는 [q1,q2,…,qi]형태로 표현 • q0’ = [q0] : NFA의 시작상태와 동일 • F’ = {q ∈ Q’ | q는 F의 상태들 중에 적어도 하나를 포함하는 상태} • 전이함수 • δ( {q1,q2,…,qi}, a ) = { p1,p2,…,pj }이면, • δ’( [q1,q2,…,qi], a ) = [ p1,p2,…,pj ]이다.
NFA를 DFA로의 변환(Con’t) • NFA를 DFA로 변환 (형식적) 전이함수 확장 방식(이전내용) NFA M = ( {q0,q1}, {0,1}, δ, q0, {q1} ) • Q’ 은 공집합을 제외한 2Q {q0}, {q1}, {q0,q1} • 시작상태 q0’ = [q0] • F’ 는 F의 상태들 중에 적어도 하나를 포함하는 상태 {q1}, {q0,q1} 전이 함수 δ’ : δ’([q0],0) = δ({q0},0) = {q0,q1} = [q0,q1] δ’([q0],1) = δ({q0},1) = {q0} = [q0] δ’([q1],0) = δ({q1},0) = Φ δ’([q1],1) = δ({q1},1) = {q0,q1} = [q0,q1] δ’([q0,q1],0) = δ({q0,q1},0) = {q0,q1} = [q0,q1] δ’([q0,q1],1) = δ({q0,q1},1) = {q0,q1} = [q0,q1]
NFA를 DFA로의 변환(Con’t) • 상태 전이도 A B C 필요없는 상태 제거 B 0,1 0,1 1 1 1 start start 0 0 A A C C
a,b Start a b b 3 1 0 2 NFA를 DFA로의 변환(Con’t) • 상태 전이도를 이용하여 변환하기(비형식적) Start [0] 1) NFA의 시작 상태가 ‘0’이므로 DFA의 시작상태는 ‘[0]’ b 1)상태’[0]’에서 ‘a’를 보고 갈 수 있는 상태는 ‘{0,1}’이고, ‘[0,1]’은 새로운 상태이므로 추가하고 지시선 추가 2)상태’[0]’에서 ‘b’를 보고 갈 수 있는 상태는 ‘{0}’이고, ‘[0]’은 기존 상태이므로 지시선만 추가 Start a [0] [0,1] 이 경우, [0,1]에서 ‘0’상태만해당 b a Start b 1)상태’[0,1]’에서 ‘a’를 보고 갈 수 있는 상태는 ‘{0,1}’이고, ‘[0,1]’은 기존 상태이므로 지시선만 추가 2)상태 ‘[0,1]’에서 ‘b’를 보고 갈 수 있는 상태는 ‘{0,2]’이고, ‘[0,2]’는 새로운 상태이므로 추가하고 지시선 추가 a [0,2] [0] [0,1]