3. 정규 언어(Regular Language)

Slides:



Advertisements
Similar presentations
13 강 논리회로 2 과목 전자계산기 구조 강사 이 민 욱. 13 강 논리회로  논리회로 1. 부울 대수 (Boolean Algebra) 에서 사용하는 기본 연산자 ① 논리부정 : NOT ( ` ) 논리부정은 F = NOT A 의 표현을 F =A` 로 표현 ② 논리곱.
Advertisements

6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
제 5 장 구문 정의  프로그래밍 언어의 기본 문자 집합  Alphabet 문자 (A-Z) 26 개 + 아라비아 숫자 (0 - 9) 10 개  예 ) Fortran : 기본 문자 집합 + 13 개의 특수문자 (=+ - * / ( ),. $ ‘ : 공백 ) Algol60.
언어와 문법 (languages, grammar)
컴파일러 입문 제 5 장 Context-Free 문법.
3주 강의 Lexical Elements, Operators, and the C System
적분방법의 연속방정식으로부터 Q=AV 방정식을 도출하라.
제2장 주파수 영역에서의 모델링.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
(Numerical Analysis of Nonlinear Equation)
유한 오토마타 Finite Automata
Tel : Office : 2공학관 408호 오토마타 및 형식언어 김 현 성 Tel : Office : 2공학관 408호
제  2 장  어휘 분석.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
- 1변수 방정식의 solution 프로그램 (Bisection method, Newton-Raphson method)
디지털논리실습 기본 논리 게이트 부울대수 조합회로.
2. 형식언어 (Formal Language)
Regular Expression and Context-free Grammar
DS020 오토마타형식언어 Chapter 6. Simplification of Context-Free Grammars and Normal Forms Exercises October 16, 2003.
6. 구문 분석 (syntax analysis)
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Error Detection and Correction
Discrete Math II Howon Kim
6장. printf와 scanf 함수에 대한 고찰
Tail-recursive Function, High-order Function
CH 4. 확률변수와 확률분포 4.1 확률 확률실험 (Random Experiment, 시행, Trial) : 결과를 확률적으로 예측 가능, 똑 같은 조건에서 반복 근원사상 (Elementary Event, e) : 시행 때 마다 나타날 수 있는 결과 표본공간.
행렬 기본 개념 행렬의 연산 여러가지 행렬 행렬식 역행렬 연립 일차 방정식 부울행렬.
디 지 털 공 학 한국폴리텍V대학.
일차방정식의 풀이 일차방정식의 풀이 순서 ① 괄호가 있으면 괄호를 먼저 푼다.
Register, Capacitor.
2. 형식언어 (Formal Language)
Ⅲ. 이 차 방 정 식 1. 이차방정식과 그 풀이 2. 근 의 공 식.
프로그래밍 개요
5. Context-free 문법 5-1. 서 론 5-2. 유도와 유도 트리 5-3. CFG표기법.
술어명제의 해석  ∧ ∨ → ↔  =.
벡터의 공간 이문현.
27장. 모듈화 프로그래밍.
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
쉽게 배우는 알고리즘 7장. 상호 배타적 집합의 처리.
8장. 상호 배타적 집합의 처리.
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Discrete Math II Howon Kim
3. 정규 언어(Regular Language)
합집합과 교집합이란 무엇인가? 01 합집합 두 집합 A, B에 대하여 A에 속하거나 B에 속하는 모든 원소로 이루어진 집합을 A와 B의 합집합이라고 하며, 기호 A∪B로 나타낸다. A∪B ={x | x∈A 또는 x∈B}
1. 2진 시스템.
Fitting / Matrix / Excel
2. Boole 대수와 논리 게이트.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
평 면 도 형 삼각형 다각형 원과 부채꼴 다각형과 원 학습내용을 로 선택하세요 다각형과 원
미분방정식.
1. 선분 등분하기 (1) 주어진 선분 수직 2등분 하기 ① 주어진 선분 AB를 그린다. ② 점 A를 중심으로 선분AB보다
에어 PHP 입문.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Chapter 1 단위, 물리량, 벡터.
1. 접선의 방정식 2010년 설악산.
1. 정투상법 정투상법 정투상도 (1) 정투상의 원리
Part 2 개념적 데이터 모델 Copyright © 2006 by Ehan Publishing Co. All rights reserved.
쉽게 배우는 알고리즘 2장. 점화식과 점근적 복잡도 분석
12 그리드 시스템.
제 3장. Regular Languages 와 Regular Grammars
3장 (2) 구문과 의미론 순천향대학교 컴퓨터공학과 하상호.
I. 수와 식 1. 유리수와 순환소수.
수치해석 ch3 환경공학과 김지숙.
DNA Implementation of Version Space Learning
수학 2 학년 1 학기 문자와 식 > 미지수가 2개인 연립방정식 ( 3 / 4 ) 대입법으로 풀기.
버스와 메모리 전송 버스 시스템 레지스터와 레지스터들 사이의 정보 전송을 위한 경로
교착 상태 해결 : 교착 상태 탐지 교착 상태 탐지(Deadlock Detection)
진리표를 이용한 타당성 증명 진리표(truth table) : 단순 문장들이 진리값을 상이하게 가질 수 있는 가능한 모든 경우를 남김없이 열거한 표 (ex) 오늘은 날씨가 맑거나 비가 올 것이다. 오늘은 날씨가 맑다 비가 온다 오늘은 날씨가 맑거나 비가 올 것이다. T.
7 생성자 함수.
Presentation transcript:

3. 정규 언어(Regular Language) 3-1. 정규 문법과 정규 언어 3-2. 정규 표현(Regular Expression) 3-3. 유한 오토마타(Finite Automata:FA) 3-4. 정규 언어의 속성

3-1. 정규 문법과 정규 언어 정규 문법의 형태 left-linear grammar(LLG) : nonterminal이 terminal 왼쪽에 나타나는 문법 ABt, At right-linear grammar(RLG) : nonterminal이 terminal 오른쪽에 나타나는 문법 AtB, At  한 문법의 생성규칙이 LLG와 RLG가 혼합이 되어 있으면 정규 문법이 아니다. => context-free grammar(Type 2) <예1> p68|p72 G1 : S  000S | 000 G2 : S  S000 | 000

정의 3.1 정규 문법 AaB, Aa, 여기서 aVT이고 A, BVN이다. 정의 3.1 정규 문법 AaB, Aa, 여기서 aVT이고 A, BVN이다. 만약 S이면, S가 다른 생성 규칙의 오른쪽에 나타나지 않아야 한다.(-free 문법) <예 2> 우선형 문법을 정규문법 형태로 변환(p70|74) S  abcA  S  aS1, S1  bS2, S2 cA A  bcA  A  bA1, A1  cA A  cd  A  cA2, A2 d <예 3> L = {anbm | n, m  1}은 정규 언어이다. (p70|74) S  aS | aA A  bA| b

정규 문법이 lexical analysis에서 사용되는 이유 Token의 구조는 보통 간단하므로 정규 문법으로도 표현이 가능 context-free 문법보다는 정규 문법으로부터 효율적인 인식기를 쉽게 구현가능 compiler의 front-end를 쉽게 다룰 수 있는 크기의 프로그램으로 나누어 모듈러하게 구성 가능 4

3-2. 정규 표현(Regular Expression) 1. 정규표현의 기본요소는 ,, 그리고 terminal 심벌. 는 공집합을 나타내는 정규표현 는 집합 {}를 나타내는 정규표현 aVT는 집합{a}를 나타내는 정규표현 2. 만일 e1과 e2가 정규 언어 L1과 L2를 표현하는 정규표현이라면, (e1)+(e2)는 L1 L2를 나타내는 정규표현(union) (e1) • (e2)는 L1• L2를 나타내는 정규표현(concatenation) (e1)*는 L1* ={} L11  L12  L13 L1n ……를 나타내는 정규표현(closure)

정리 3.1 위의 정의된 것 이외에 어떠한 것도 정규 표현이 될 수 없다. 위의 정의된 것 이외에 어떠한 것도 정규 표현이 될 수 없다. 단, (e1) • (e2)의 정규 표현은 편의상 (e1)(e2)로 나타내는 것이 일반적이며, e1+는 e1•e1*의 단축 표현이다. 또한, (e1)+(e2)는 (e1)|(e2)로도 표기된다. <예 4> p72|77, <예 5> p72|77, <예 6> p73|77 정리 3.1 , 가 정규 표현이고, L()이면, X = X + 의 유일한 해는 X= *이다. <예 7> p74|79

정규표현의 대수학적 성질(p73|78)  + = + ( +) + =  + ( + )  + = + ( +) + =  + ( + ) ()  = () (+) =  +  ( + )  =  +    +  =   +  =   =  =   =  =  * = +* * = ( +)* (*)* = * * +  = * * + + = * ( + )* = (**)*

정규문법 G가 생성하는 언어 L(G)를 나타내는 정규 표현을 구하는 과정 1. 정규문법으로부터 일련의 정규 표현식을 구성한다 X  |  |  일 때, X =  +  +  로 변환 2. 구성된 정규 표현식 중에 X =X +  형태의 식은 X=*로 푼다. 3. X 대신에 * 를 대입한다. 정규 표현의 공리를 이용하여 X =X + 형태로 정리한 후, 역시 X=*를 적용한다. 이 과정은 시작 심벌에 대한 정규 표현식이 있는 곳으로 계속 진행한다. 4. 시작 심벌에 대한 정규 표현식을 X=X +  형태로 고친 후, 식을 X=*로 풀면 *가 정의된 정규문법으로부터 생성될 수 있는 정규 언어 L(G)가 된다. 문법 G 언어 L(G) 정규표현

<예 8> p75~76|80~ <예 9> p76|81 G = ({S, R}, {a, b}, P, S) S aS S  bR S   R  aS 1) S  aS | bR |  2) S = aS + bR +  R = aS 3) S = aS + b(aS) +  = aS + baS +  = (a+ba)S +  = (a+ba)* <예 9> p76|81 G = ({S, A, B}, {a, b}, P, S) S aA | bB | b A  bA |  B  bS 1) S = aA + bB + b A = bA +  = b* B = bS 2) S = ab*+b(bS) + b = ab* + bbS + b = bbS + ab* + b = bbS + (ab* + b) = (bb)*(ab*+b)

<추가 예> X1 = 0X2 + 1X1 +  … (1) X2 = 0X3 + 1X2 … (2) = (01*01*0 + 1)* L(X1) = (01*01*0 + 1)*

3-3. 유한 오토마타(Finite Automata:FA) 정의 입력으로 String을 받아 String이 그 언어의 문장이면 “yes” 아니면 “no”라고 답하는 인식기(recognizer) FA M = (Q, , , q0, F) Q : 상태(State)들의 유한 집합  : 입력 심볼의 유한 집합  : 사상 함수(mapping function) or 상태전이 함수 q0: 시작 상태(start 또는 initial state) (q0Q) F : 종결(final state) 상태의 집합을 의미한다. (FQ)

q0 q1 q2 a b 예제 : M = ({q0, q1, q2}, {a, b}, , q0, {g2}) <예 11,12,13> (q0, a) = q1 (q0, b) = q2 (q1, a) = q2 (q1, b) = q0 (q2, a) = q0 (q2, b) = q1 입력 : aba 이라면 (q0, a) = q1 (q1, b) = q0 (q0, a) = q1   no 입력 : ababb 이라면 (q0, b) = q2   yes q0 q1 q2  Transition diagram  Transition Table a b

정의 3.8 유한 오토마타(DFA) M에 의해 인식되는 스트링 전체를 모아 놓은 집합을 M에 의해 인식되는 언어라고 말하고, L(M)으로 표기한다. L(M) = { x | (q0 , x)  F } <예 3.14> & <예 3.15> P86, 87 13

유한오토마타를 상태 전이 함수에 따라 분류 DFA(Deterministic Finite Automata) (결정적 유한 오토마타) FA NFA(Nondeterministic Finite Automata) (비결정적 유한 오토마타)

DFA(Deterministic Finite Automata) (결정적 유한 오토마타) DFA M = (Q,,, q0, F) Q : 상태들의 유한 집합  : 입력 심벌의 유한 집합  : 전이 함수로 Q×Q, 즉 (q, a) = p 이다. q0 : 시작 상태 (q0 Q) F : 종결 상태의 집합을 의미한다(F Q) 특징 한 상태에서 입력 Symbol에 대해 하나의 다음 상태를 갖는다. 에 의한 전이(transition)가 없다.

NFA(Nondeterministic Finite Automata) NFA M =(Q,, , q0, F) (비결정적 유한 오토마타) NFA M =(Q,, , q0, F) Q : 상태들의 유한집합  : 입력 심벌의 유한 집합  : 전이 함수로 Q×2q, 즉 (q, a) = {p1,p2,···,pn} q0 : 시작 상태로 q0Q이며 F : 종결 상태의 집합을 의미하며 FQ이다. 특징 한 상태에서 입력 Symbol에 대해 여러 개의 다음 상태를 가질 수 있다. 에 의한 전이(transition)도 가능

NFA(Nondeterministic Finite Automata) <예 18> p83|89 q2 q1 q3 q0 qf start 0,1 1 

NFA에 의해 인식되는 언어를 정의하기 위해 전이함수는 2 단계로 확장 (p89~91) [단계 1] 입력으로 스트링이 올 수 있도록 확장 (q, ) = {q} (q, xa) =  p (q, x) (q, a) 여기서, x* 이고 a이다. 이것은 q 상태에서 스트링 xa를 본다는 것은 x를 다 본 각각의 상태에서 a를 본 상태들의 합집합과 같다는 것을 의미. <예 19> p90 18

( {p1, p2, …, pk}, x) =  i=1k (pi, x) [단계 2] 한 개의 상태를 여러 상태로 확장 ( {p1, p2, …, pk}, x) =  i=1k (pi, x) 즉, 일련의 상태에서 스트링 x를 본다는 것은 각각의 상태에서 x를 본 상태들의 합집합과 같다는 것을 의미. <예 20> p90 19

정의 3.12 유한 오토마타(NFA) M에 의해 인식되는 스트링 전체를 모아 놓은 집합을 M에 의해 인식되는 언어라고 말하고, L(M)으로 표기한다. L(M) = { x | (q0 , x)  F   } <예 3.21> P91 20

정리 3.2 NFA에서 DFA로의 변환(p86|92~ ) NFA M = (Q,, , q0, F) DFA M´=(Q´,, ´,q0´,F´) Q´ = 2Q (Q의 부분 집합의 집합 : power set) Q´의 한 상태는 [q1, q2, ···, qi]의 형태로 표시한다. q0´ = [q0] F´ = {qQ´ | q는 F의 상태들 중에 적어도 하나를 포함한다.} ({q1, q2, ···, qi}, a) = {p1, p2, ···, pi}이면, ´( [q1, q2, ···,qi] , a) = [p1, p2, ···, pi]이다.

A B A C C <예 22> 방법-1 : NFA => DFA(p93~ ) NFA M = ({q0, q1}, {0, 1}, , q0, {q1}) 1) Q´ = {[q0], [q1], [q0,q1]} 2) q0´ = [q0] 3) F´ = {[q1], [q0,q1]} 4) ´ : ´([q0], 0) = ({q0}, 0) = {q0, q1} = [q0, q1] ´([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] 1 A B start 1 0,1 1 A C start 0,1 C

<예 23> 방법 – 2 : NFA => DFA (p89|95 ) 1 2 3 start a,b a b 1. NFA의 시작 상태가 0이므로 DFA의 시작 상태는 [0]이 된다. [0] start 2. 상태[0]에서 a를 보고 갈 수 있는 상태 집합은 {0, 1}이고 [0,1]은 새로운 상태이므로 새로운 상태로 만들어 지시선을 연결한다. [0] [0, 1] start a 상태[0]에서 b를 보고 갈 수 있는 상태 집합은 {0}이고, [0]은 기존의 상태와 같으므로 지시선만 그린다. [0] start [0, 1] a b

3. 상태[0, 1]에서 a를 보고 갈 수 있는 상태 집합은 {0, 1}이므로 지시선만 그린다 a b [0, 1] [0] a start 상태[0, 1]에서 b를 보고 갈 수 있는 상태 집합은 {0, 2}이고, [0, 2]는 새로운 상태이므로 다음과 같이 추가하고 지시선을 연결한다. a b [0, 1] [0, 2] [0] a b start 4. 상태 [ 0, 2]에서 a를 보고 갈 수 있는 상태 집합은 {0, 1}이므로 지시선만 그린다. a b b [0, 1] [0, 2] [0] a start a

상태 [0, 2]에서 b를 보고 갈 수 있는 상태 집합은 {0, 3}이고, [0, 3]은 새로운 상태이므로 다음과 같이 추가하고 지시선을 연결한다. [0] start [0, 1] a b [0, 2] [0, 3] 상태 [0, 3]에서 a 를 보고 갈 수 있는 상태 집합은 {0, 1}이고, b를 보고 갈 수 있는 상태는 {0}이므로 새로 만들지 않고 지시선만 만든다. [0] start [0, 1] a b [0, 2] [0, 3]

6. 더 이상 새로운 상태가 추가되지 않으며, NFA의 종결 상태 3을 포함하는 상태 [0, 3]은 DFA의 종결 상태로 표시한다. [0] start [0, 1] a b [0, 2] [0, 3]  상태 전이표 표현

<예제 24> 방법-3 : (예 18)의 NEA를 DFA로 변환(p97) NFA M = ({q0, q1, q2, q3, qf}, {0, 1}, , q0, {qf}) 1) 우선 NFA 중 여러 상태가 나타나는 것을 고르면, {q1, q2}와 {q1, q3}를 고를 수 있다. 나오는 집합의 원소의 입력 심벌별로 모두 합집합을 취한다. 2) 합집합을 구한 상태에서 새로운 상태가 있으므로 나오는 집합 원소의 입력 심벌별로 모두 합집합을 취한다.

B D A 1 C E 3) 처음 종결자를 원소로 갖는 상태는 모두 종결자가 된다. 3) 처음 종결자를 원소로 갖는 상태는 모두 종결자가 된다. 4) 시작 상태에서 도달할 수 없는 상태는 제거한다. B D [q1,q2,qf] [q1,q2] A [q0] 1 1 1 [q1,q3,qf] [q1,q3] 1 1 C E

-NFA => DFA로 바꾸는 방법(p92|97~ ) <정의 3.13> -closure -closure(S) : S와 S로부터 레이블이 으로 쓰인 지시선으로 도달할 수 있는 모든 상태 포함 T가 하나 이상의 상태집합 -closure(T) : -closure(q) < 예제 25> (p92|98) qT a b a  a  A B C D  - closure(A) = {A, B, D} - closure(T) = - closure({A, C}) = - closure(A)  - closure(C) = {A, B, D}  {C, D} = {A, B, C, D}

<예제 26> (p93|99) -NFA => DFA b 1 4 c 3   d a b c e - closure(1) ={1, 3, 4}≡[1,3,4] -closure(2) ={2} ≡ [2] f -closure(3) ={3, 4}≡[3,4] closure(2) -closure(4) = {4} ≡[4] closure(3) ={3, 4}≡ [3,4] closure(4) = {4} ≡ [4] A B C D

DFA의 상태 수 최소화 (p95|100~) 초기의 동치관계 A B D [4] [1,3,4] [2] [3,4] a b c C DFA의 상태 수 최소화 (p95|100~) 초기의 동치관계 종결상태, 미종결 상태로 구분 같은 입력에 대해 서로 다른 동치로 가는 지시선이 존재하면, 또 분할 하여 새로운 동치류 구성 2번 과정 반복, 더 분할되지 않으면 새로운 DFA M´ 형성 DFA M´=(Q´,, ´, q0´, F´)

<예제 27> p96~97|102~103 a A E C D B a b 1. 1 : {A, B, D} 2 : {C, E} 1 2 3 a,b a b 2. X Y Z X Y Z

<예제 27> 계속 3. 더 이상 분할되지 않으므로 X=[A], Y=[B,D], Z=[C,E]로 놓고 DFA M’ 구성 M’ = ( {X, Y, Z}, {a, b}, δ' , X, {Z} ) δ' a b X Y Z 1 2 3 a,b a b X Y Z

축약된 오토마타 변환하는 방법(p97|103) 연습 3.11(1), (2) (p126) 어떤 상태로 들어오는 지시선 없이 나가는 지시선만 갖는 도달 불가능한 상태(inaccessible state)는 모두 제거한다. 동치 관계를 이용하여 구별되지 않는 상태들을 하나로 합친 후 새로운 유한 오토마타를 구성한다. 연습 3.11(1), (2) (p126)

3-4. 정규 언어의 속성 정규 문법, 정규 표현, 유한 오토마타의 관계 3.4.1 3.2 3.4.2 정규 문법 유한 오토마타 정규 문법, 정규 표현, 유한 오토마타의 관계 정규 문법 3.4.1 3.2 유한 오토마타 정규 표현 3.4.2

3.4.1 정규 문법과 유한 오토마타 RG FA (1) (2) (1) RG : G(VN, VT, P, S) => M (Q,, , q0, F) Q : VN  {f}, f : 새로 만들어진 종결상태  : VT q0 : S ; F : if  L(G) then {f} else {S, f}  : if A  aB  P, (A,a) = B; if A  a  P, (A, a) = f ※  함수의 개수는 정규문법의 생성규칙의 개수와 같다. 즉, |  | = | P |

<예제 29> (p101|107) : 정규 문법과 동등한 FA 구성 G = ({S,B}, {0, 1}, P, S) P : S  0S S  1B S  0 S 1 B  0S B  0 => M : (Q, , , q0, F) Q : VN  {f} = {S, B, F}  : VT = {0, 1} q0 : S F : {f}

M = (Q,, , q0, F)  G = (VN, VT, P, S) (2) 유한 오토마타 FA  정규문법 RG M = (Q,, , q0, F)  G = (VN, VT, P, S) VN : Q; VT : ; S : q0; P : if (q, a) = r then q ar; if q F then q;  <예 30> P102|108 DFA  정규 문법 p q r 1 1,0 G = (VN, VT, P, S) VN : Q = {p, q, r} VT :  = {0, 1} S : q0 = p P : p 0q, p  1p q  0r, q  1p r 0r, r  1r, r    정규문법 ※ 생성규칙의 개수는 전이함수의 개수 + 종결상태의 개수, 즉 | P | = |  | + | F |

3.4.2 유한 오토마타와 정규 표현(p109~) (1) FA => 정규 표현 (b) 구한 정규 문법으로부터 정규 표현을 얻는다. 유한 오토마타로부터 정규표현을 얻는과정(계속) 1. 오토마타에서 상태 전이표를 구한다. 2. 상태 전이표로부터 정규문법으로 변환한다 (1) (2) 정규 문법 (a) (b) 정규 표현 FA

유한 오토마타로부터 정규표현을 얻는 과정 (계속) 3. 정규문법을 정규표현식으로 쓴다. P = 01 + 1p ---- (1) q = 0r + 1p ---- (2) r = 0r + 1r +  ---- (3) 4. 정규 표현식을 풀어서 정규 표현으로 나타낸다. r = 0r + 1r +  = (0+1)r +  = (0+1)* q = 0r + 1p = 0(0+1)* + 1p p = 0q + 1p = 0(0(0+1)* + 1p) + 1p = 00(0+1)* + 01p + 1p = (01 + 1)p + 00(0+1)* = (01+1)*00(0+1)*   L(M) = (01+1)*00(0+1)*

(2) 정규표현 => 유한 오토마타(p104|111~ ) 정규 표현의 정의로부터 NFA(-NFA) 구성 간단화 방법 적용 => 크기를 줄임 (c) -NFA를 DFA로 변환

(a) 정규표현의 정의로부터 -NFA 구성 방법 정규표현 N1+N2, N1•N2, N*에 대해 N1 + N2   : i f i a f a :  N2 N1  N1+N2 : i f  

<예 31> 위의 방법에 의해 정규 표현 (a + b)*를 인식하는 FA 구성 p105~106|112~113  N1•N2 N*  N1•N2 : N1 N2 f    i N f N* :  <예 31> 위의 방법에 의해 정규 표현 (a + b)*를 인식하는 FA 구성 p105~106|112~113   a    start   b 

(b) -NFA를 간단화 (p106|113 ~ ) A에서 나가는 다른 지시선이 없을 때 A, B는 같은 상태로 취급될 수 있다. 다음과 같은 형태도 하나의 상태로 줄일 수 있다.  A B : A, B는 같은 상태 a  a A B C A C  a a A B  A 

두 개의 경로가 같은 곳으로 이동하는 다음의 경우도 간단화 할 수 있다. a*를 인식하는 경우 다음과 같이 간단히 나타낼 수 있다. a  A B  a,b S F S F  C D   b a a   A B C  A 

< 예제 33> (p109|115) (ab)*(ba)*: 2 a b (ab)* : 3 4 (ba)* : 따라서, (ab)*(ba)*를 인식하는-NFA 1 2 3 4 a b 

(c) -NFA를 DFA로 변환 상태 전이표를 이용하여 바꾸면 상태 전이도로 표현하면 a A B start a b b C