37
제 3 제 제제 제제 제제제제 제제 제제제제 제제

제 3 장 정규 언어

  • Upload
    etana

  • View
    88

  • Download
    2

Embed Size (px)

DESCRIPTION

컴파일러 입문. 제 3 장 정규 언어. 목 차. 3-1. 정규 문법과 정규 언어 3-2. 정규 표현 (Regular Expression) 3-3. 유한 오토마타 (Finite Automata:FA) 3-4. 정규 언어의 속성. 3-1. 정규 문법과 정규 언어. 정규 문법의 형태 left-linear grammar(LLG) : nonterminal 이 terminal 왼쪽에 나타나는 문법 right-linear grammar(RLG) : - PowerPoint PPT Presentation

Citation preview

Page 1: 제  3  장  정규 언어

제 3 장 정규 언어

컴파일러 입문컴파일러 입문

Page 2: 제  3  장  정규 언어

Regular Language Page 2

목 차목 차

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

Page 3: 제  3  장  정규 언어

Regular Language Page 3

3-1. 3-1. 정규 문법과 정규 언어정규 문법과 정규 언어 정규 문법의 형태

left-linear grammar(LLG) : nonterminal 이 terminal 왼쪽에 나타나는 문법

right-linear grammar(RLG) : nonterminal 이 terminal 오른쪽에 나타나는 문법

한 문법의 생성규칙이 LLG 와 RLG 가 혼합이 되어있으면 정규 문법이 아니다 . => context-free grammar

Page 4: 제  3  장  정규 언어

Regular Language Page 4

정의 3.1

AaB, Aa, 여기서 aVT 이고 A, BVN 이다 .

만약 S 이면 , S 가 다른 생성 규칙의 오른쪽에 나타나지 않아야 한다 .

정규 문법이 lexical analysis 에서 사용되는 이유

Token 의 구조는 보통 간단하므로 표현이 가능

context-free 문법보다는 정규 문법으로부터 효율적인 인식기를 쉽게 구현가능

compiler 의 front-end 를 쉽게 다룰 수 있는 크기의 프로그램으로 나누어 모듈러 하게 구성 가능

Page 5: 제  3  장  정규 언어

Regular Language Page 5

3-2. 3-2. 정규 표현정규 표현 (Regular (Regular Expression)Expression)

정의 3.2

정규표현의 기본요소는 ,, 그리고 terminal 심벌이다 .

는 공집합을 나타내는 정규표현 는 집합 {} 를 나타내는 정규표현 a(VT) 는 집합 {a} 를 나타내는 정규표현

만일 e1 과 e2 가 정규 언어 L1 과 L2 를 표현하는 정규표현 이라면 ,

(e1)+(e2) 는 L1L2 를 나타내는 정규표현 (union)

(e1) (e• 2) 는 L1 L• 2 를 나타내는 정규표현 (concatenation)

(e1)* 는 L1*={}L11L1

2L13L1

n…… 을 나타내는 정규표현

Page 6: 제  3  장  정규 언어

Regular Language Page 6

위의 정의된 것 이외에 어떠한 것도 정규 표현이 될 수 없다 . 단 (e1)•(e2) 의 정규 표현은 편의상 (e1)(e2) 로 나타내는 것이 일반적이며 , e1+ 는 e1•e1* 의 단축 표현이다 . 또한 , (e1)+(e1)

는 (e1)|(e1) 로도 표기된다 .

정리 3.1

, 가 정규 표현이고 , La 이면 , X=X+ 의 유일한 해는 X= * 이다 .

Page 7: 제  3  장  정규 언어

Regular Language Page 7

정규표현의 대수적 성질

+ = + (+)+ = +(+ ) () = () (+) = + ( + ) = + + = + = = = = = * = +* * = (+)* (*)* = * * + = * *++ = * (+)* = (* *)*

Page 8: 제  3  장  정규 언어

Regular Language Page 8

정규문법 G 가 생성하는 언어 L 를 나타내는 정규표현을 구하는 과정

정규문법으로부터 일련의 정규 표현식을 구성한다 X | | 일 때 , X = + +

구성된 정규 표현 식 중에 X=X+ 형태의 식은 X=* 로 푼다 .

위의 과정을 수행한 후 시작 심벌에 대한 정규 표현식이 있는 곳으로 식을 대입해가면 정규 표현의 공리를 이용하여 X=X+ 형태로 정리 한 후 역시 X=* 를 적용한다 .

시작 심벌에 대한 정규 표현식을 X=X+ 형태로 고친 후 식을 X=* 로 풀면 * 가 정의된 정규문법으로부터 생성 될 수 있는 정규 언어가 된다 .

Page 9: 제  3  장  정규 언어

Regular Language Page 9

예제 1 G = ({S, R}, {a, b}, P, S) S aS S bR S R aS

1) S aS | bR | R aS

2) S = aS + bR + R = aS

3) S = aS + b(aS) + = aS + baS + = (a+ba)S + = (a+ba)*

예제 2 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)

Page 10: 제  3  장  정규 언어

Regular Language Page 10

예제 3 X1 = 0X2 + 1X1 + X2 = 0X3 + 1X2 X3 = 0X1 + 1X3

1) X3 = 1X3 + 0X1 = 1*0X1

2) X2 = 0(1*0X1) + 1X2 = 1X2 + 01*0X1 = 1*01*0X1

3) X1 = 0(1*01*0X1) + 1X1 + = 01*01*0X1 + 1X1 = (01*01*0 + 1)X1 + = (01*01*0 + 1)*

L(X1) = (01*01*0 + 1)*

Page 11: 제  3  장  정규 언어

Regular Language Page 11

3-3. 3-3. 유한 오토마타유한 오토마타 (Finite (Finite Automata:FA)Automata:FA)

정의 입력으로 String 을 받아 String 이 그 언어 문장이면 yes 아니면

no 라고 답하는 인식기

M = (Q, , , q0, F) Q : 상태 (State) 들의 유한 집합 : 입력 심볼의 유한 집합 : 사상 함수 (mapping function) q0: 시작 상태 (start 또는 initial state)(q0Q) F : 종결 (final state) 상태의 집합을 의미한다 .(FQ)

Page 12: 제  3  장  정규 언어

Regular Language Page 12

예제 M = ({q0, q1, q2}, {a, b}, , q0, {g2}) (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, a) = q1 (q1, b) = q0 (q0, a) = q1 (q1, b) = q1 (q0, b) = q2 yes

q0 q1

q2

a bq0 q1 q2

q1 q2 q0

q2 q0 q1

Transition diagram

Transition Table

a

aa

b

bb

Page 13: 제  3  장  정규 언어

Regular Language Page 13

DFA(Deterministic Finite Automata) DFA M = (Q,,, q0, F)

Q: 상태들의 유한 집합 : 입력 심벌의 유한 집합 : 전이 함수로 Q×Q, 즉 (q, a) = p 이다 . q0: 시작 상태 (q0 Q) F: 종결 상태의 집합을 의미한다 (F Q) 특징

한 상태에서 입력 Symbol 에 대해 하나의 다음 상태를 갖는다 . 에 의한 전이 (transition) 이 없다 .

FADFA(Deteministic Finite Automata)

NFA(Nondeteministic Finite Automata)

Page 14: 제  3  장  정규 언어

Regular Language Page 14

NFA(Nondeterministic Finite Automata)NFA M =(Q,, , q0, F)

Q: 상태들의 유한집합 : 입력 심벌의 유한 집합 : 전이 함수로 Q×2q, 즉 (q, a) = {p1,p2,···,pn} q0: 시작 상태로 q0Q 이며 F: 종결 상태의 집합을 의미하며 FQ 이다 .

예제

0 1q0

q1

q2

q3

qf

{q1, q2}{q1, q2}

{qf}

{qf}

{q1, q3}{q1, q3}

{qf}{qf}

00

q2

q1

q3

q0 qfstart 0,1

11

1

0,1 0,1

Page 15: 제  3  장  정규 언어

Regular Language Page 15

NFA 에서 DFA 로의 변환 NFA M = (Q,, , q0, F) DFA M´=(Q´,´,´,q0´,F´)

Q´ = 2Q(Q 의 부분 집합의 집합 : power set) Q´ 의 한 상태는 [q1, q2, ···,qi] 의 형태로 표시한다 . q0´ = [q0] F´= {qQ´ | q 는 F 의 상태들 중에 적어도 하나를 포함한다 .} ({q1, q2, ···, qi}, a) = {p1, p2, ···, pi} 이면 , ´([q1, q2, ···,qi], a) = [p1, p2, ···, pi] 이다 .

Page 16: 제  3  장  정규 언어

Regular Language Page 16

예제 21 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]

0 1q0q1

{q0,q1}

{q0}{q0,q1}

´ 0 1[q0][q1]

[q0, q1]

[q0,q1]

[q0,q1]

[q0][q0, q1][q0, q1]

00

1

1

A

C

B

0,1

1

A Cstart

0,1start

Page 17: 제  3  장  정규 언어

Regular Language Page 17

예제 22

[0]

0 1 2 3

1. NFA 의 시작상태가 0 이므로 DFA 의 시작상태는 [0] 이 된다 .

start

a,b

a b b

start

2. 상태 [0] 에서 a 를 보고 갈 수 있는 상태 집합은 {0, 1} 이고 [0,1] 은 새로운 상태이므로 새로운 상태로 만들어 지시선을 연결한다 .

[0] [0, 1]

상태 [0] 에서 b 를 보고 갈수 있는 상태 집합은 {0} 이고 , [0] 은 기존의 상태와같으므로 지시선만 그린다 .

[0]start [0, 1]a

b

start a

Page 18: 제  3  장  정규 언어

Regular Language Page 18

3. 상태 [0, 1] 에서 a 를 보고 갈 수 있는 상태 집합은 {0, 1} 이므로 지시선만 그린다

[0]start [0, 1]a

b a

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

[0]start [0, 1]a

b a

[0, 2]b

4. [0, 2] 에서 a 를 보고 갈 수 있는 상태 집합은 {0, 1} 이므로 지시선만 그린다 .

[0]start [0, 1]a

b a

[0, 2]b

a

Page 19: 제  3  장  정규 언어

Regular Language Page 19

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

[0]start [0, 1]a

b a

[0, 2]b

a[0, 3]

b

5. [0, 3] 에서 a 를 보고 갈 수 있는 상태 집합은 {0, 1} 이고 , b 를 보고 갈 수 있는상태는 {0} 이므로 새로 만들지 않고 지시선만 만든다 .

[0]start [0, 1]a

b a

[0, 2]b

a[0, 3]

b

a

b

Page 20: 제  3  장  정규 언어

Regular Language Page 20

상태 전이표 표현

a b[0]

[0, 1][0, 2][0, 3]

[0, 1][0, 1][0, 1][0, 1]

[0][0, 2][0, 3]

[0]

더 이상 새로운 상태가 추가되지 않으며 NFA 의 종결 상태 3 을 포함하는상태 [0, 3] 은 DFA 의 종결 상태로 표시한다 .

[0]start [0, 1]a

b a

[0, 2]b

a[0, 3]

b

a

b

Page 21: 제  3  장  정규 언어

Regular Language Page 21

예제 17

NFA M = ({q0, q1, q2, q3, qf}, {0, 1}, , q0, {qf})

0 1q0

q1

q2

q3

qf

{q1, q2}{q1, q2}

{qf}

{qf}

{q1, q3}{q1, q3}

{qf}{qf}

1) 우선 NFA 중 여러 상태가 나타나는 것을 고르면 , {q1, q2} 와 {q1, q3} 를 고를 수 있다 . 나오는 집합의 원소의 입력심벌별로 모두 합집합을 취한다 .

0 1{q1, q2}{q1, q3}

{q1, q2, qf}{q1, q2}

{q1, q3}{q1, q3, qf}

2) 합집합을 구한 상태에서 새로운 상태가 있으므로 나오는 집합의 원소의 입력심벌별로 모두 합집합을 취한다 .

0 1{q1, q2, qf}{q1, q3, qf}

{q1, q2, qf}{q1, q2, qf}

{q1, q3, qf}{q1, q3, qf}

Page 22: 제  3  장  정규 언어

Regular Language Page 22

[q1,q3,qf]

3) 처음 종결자를 원소로 갖는 상태는 모두 종결자가 된다 .

4) 시작 상태에서 도달 할 수 없는 상태는 제거한다 .

0 1[q0]

[q1, q2][q1, q3]

[q1, q2, qf][q1, q3, qf]

[q1, q2][q1, q2, qf]

[q1, q2][q1, q2, qf][q1, q2, qf]

[q1, q3][q1, q3]

[q1, q3, qf][q1, q3, qf][q1, q3, qf]

[q0]

[q1,q2] [q1,q2,qf]

[q1,q3]1

1 1

1

0

0

0

Page 23: 제  3  장  정규 언어

Regular Language Page 23

-NFA => DFA -closure

S 가 하나 일 때 , -closure(S) : S 와 S 로부터 레이블이 쓰인 지시선으로 도달 할 수 있는 모든 상태 포함 S 가 하나이상의 상태 -closure(T) : -closure(q)

예제 21qT

A B C D

a

a

a

closure(A) = {A, B, D}closure(T) = closure({A, C}) = closure(A) closure(C)

= {A, B, D} {C, D} = {A, B, C, D}

Page 24: 제  3  장  정규 언어

Regular Language Page 24

예제

1

3

2

4

a b

c

a b cclosure(1)={1, 3, 4}

closure(2)={2}

closure(3)={3, 4}

closure(2)={2}

closure(4)= {4}

closure(3)={3, 4}

closure(3)={3, 4}

closure(4)= {4}

Page 25: 제  3  장  정규 언어

Regular Language Page 25

DNF 의 상태 수 최소화 초기의 동치관계

종결상태 , 미 종결상태로 구분

같은 입력에 대해서 서로 다른 동치로 가는 지시선이 존재하면 , 또 분할 하여 새로운 동치류 구성

새로운 M´ 형성

41,3,4 2

3,4

a b

c

Page 26: 제  3  장  정규 언어

Regular Language Page 26

예제

A

E

C

D

Ba

b b

b

a

ab b

a

a

1. 1 : {A, B, D}

2 : {C, E}

1 : {A, B, D} 2 : {C, E}ab

1 1 11 2 2

1 12 2

1:{A} 2:{B, D} 3:{C, E}ab

22

2 23 3

2 23 3

2.

1 2 3a,b

aa

b

b

Page 27: 제  3  장  정규 언어

Regular Language Page 27

오토마타 변환하는 방법

어떤 상태로 들어오는 지시선 없이 나가는 지시선만 갖는 도달 불가능한 상태 (inaccessible state) 는 모두 제거한다 .

동치 관계를 이용하여 구별되지 않는 상태들을 하나로 합친 후 새로운 유한 오토마타를 구성한다 .

Page 28: 제  3  장  정규 언어

Regular Language Page 28

3-4. 3-4. 정규 언어의 속성정규 언어의 속성 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 (A,a) = B; if A a (A, a) = f

Page 29: 제  3  장  정규 언어

Regular Language Page 29

예제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 : SF : {f}

0 1S {S, f} {B, F}B {S, f} -A - -

Page 30: 제  3  장  정규 언어

Regular Language Page 30

FA => RGM = (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; 예제

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 q r

10

1

0

1,0

정규문법

Page 31: 제  3  장  정규 언어

Regular Language Page 31

유한 오토마타와 정규 표현 유한 오토마타로 부터 정규문법을 구한다 구한 정규 문법으로부터 정규 표현을 얻는다 .

유한 오토마타로부터 정규표현을 얻는 과정 오토마타에서 상태 전이표를 구한다 . 상태 전이표로부터 정규문법으로 변환한다 정규문법을 정규식으로 쓴다 .

P = 01 + 1p ---- (1) q = 0r + 1p ---- (2) r = 0r + 1r + ---- (3)

정규표현식을 풀어서 정규 표현으로 나타낸다 . 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)*

Page 32: 제  3  장  정규 언어

Regular Language Page 32

정규표현 => 유한 오토마타

정규 표현 , a 에 대해 ,

정규표현 N1+N2, N1•N2, N* 에 대해 N1 + N2

i f :

i fa

a :

i f

N2

N1

N1+N2 :

Page 33: 제  3  장  정규 언어

Regular Language Page 33

N1•N2

N*

N2N1 fN1•N2 :

Ni f

N* :

예제

start

a

b

Page 34: 제  3  장  정규 언어

Regular Language Page 34

-NFA 를 간단화

A 에서 나가는 다른 지시선이 없을 때 A, B 는 같은 상태로 취급 될 수 있다 .

다음과 같은 형태도 하나의 상태로 줄일 수 있다 .

A B

A Ba B A C

A B Aa

a

Page 35: 제  3  장  정규 언어

Regular Language Page 35

두 개의 경로가 같은 곳으로 이동하는 다음의 경우도 간단화 할 수 있다 .

a* 를 인식하는 경우 다음과 같이 간단히 나타낼 수 있다 .

S

C D

A B

F S F

a

b

a,b

A B C A

a a

Page 36: 제  3  장  정규 언어

Regular Language Page 36

1 2

a

b

(ab)* :

3 4

b

a

(ba)* :

따라서 , (ab)*(ba)* 인식하는 -NFA

1 2 3 4

a

b

b

a

예제

(ab)*(ba)*:

Page 37: 제  3  장  정규 언어

Regular Language Page 37

-NFA 를 DFA 로 변환 상태 전이표를 이용하여 바꾸면

a b A=[1,3] B=[2] C=[4] D=[3]

[2]

[3]

[4][1, 3]

[4]

a

A B

C D

start

b

ba

b

상태전이도로 표현하면