90
Lecture 02: 형식 언어 및 정규 언어 Kwang-Man Ko [email protected] , compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2019

Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko [email protected],

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

Lecture 02: 형식 언어 및 정규 언어

Kwang-Man [email protected], compiler.sangji.ac.kr

Department of Computer Engineering

Sang Ji University

2019

Page 2: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

언어(Language)

잘 정의된 언어(Well-defined Language)

– 문장들의 집합

– 알파벳(alphabet)

알파벳 T : 심볼들의 유한 집합

– T1 = {ㄱ, ㄴ, ㄷ, ... , ㅎ, ㅏ, ㅑ, ... , ㅡ,ㅣ}

– T2 = {A, B, C, ... , Z, a, b, c, …, z}

Page 3: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

스트링(string)

– T에 속하는 하나 이상의 심볼들을 연결한 것.

– T = { a, b}

• a, b, aa, ab, ba, bb, aaa, ...

스트링 길이(Length)

– 스트링을 이루는 심볼들의 개수

– ω의 길이, |ω|

Page 4: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

스트링 접속(concatenation)

– 스트링을 연속으로 연결한 것.

– u, v : u = a1a2 ... an, v = b1b2 ... bm

• u . v = a1a2 ... anb1b2 ... bm

• u를 prefix, v를 suffix라 함

• 접속 연산은 교환 법칙을 만족하지 않음

• |uv| = |u| + |v|

Page 5: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

Empty String

– 스트링의 길이가 영(zero)

– ε(epsilon)으로 표기

• uε = u = εu

• uεv = uv

– empty 스트링을 λ(lambda)로 표시

Page 6: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

T*

– Empty 스트링을 포함하여 T에 속하는 심볼로 이루어질 수

있는 모든 스트링의 집합

– T-start

T+

– T*에서 Empty 스트링을 제외한 모든 스트링의 집합.

– T+ = T* - {ε}

– T-dagger

Page 7: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

T = {0}

– T* = {ε, 0, 00, 000, ...}

– T+ = { 0, 00, 000, ...}

T = {a, b}

– T* = {ε, a, b, aa, ab, ba, bb, aaa, aab, ... }

– T+ = {a, b, aa, ab, ba, bb, aaa, aab, ...}

– T*는 알파벳 T에 속하는 심볼로부터 만들 수 있는 스트

링의 전체 집합(universal set)

Page 8: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

언어(language)

– 알파벳 T에 대해, 언어 L 은 T*의 부분 집합

• T*중에 속하는 스트링 중에 특정한 형태만 모아 놓은 집

– 유한 언어 : 스트링의 개수가 유한개

– 무한 언어 : 스트링의 개수가 무한개

Page 9: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

T = {a, b}

– L1 = T* = {ε, a, b, aa, ab, ... }

– L2 = {a, ba, aba}

– L3 = {ap | p는 솟수(prime number)}

– L4 = {anbn | n≥1}

형식 언어(formal language)

– 의미의 개념은 포함하지않고 단지 스트링들의 집합

– 형식언어(formal Language), 단지 스트링 집합

– 문법구조만 고려

Page 10: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

언어 L과 L'의 곱(product): LL'

– L에 속하는 스트링과 L’ 에 속하는 스트링 접속

– 교환 법칙은 성립하지 않음

– LL' = {xy | x∈L 그리고 y∈L'}.

언어 L의 거듭제곱(power)

– 순환적(recursive)으로 정의

– L0 = {ε}, Ln = LLn-1 for n≥1

Page 11: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

L*(Reflexive transitive closure)

– L* = L0 ∪ L1 ∪ L2 ∪ ...∪ Ln ∪… =

L+(transitive closure)

– L+ = L1 ∪ L2 ∪ ... ∪ Ln ∪ ... = L* - L0

Page 12: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

결론

– 언어마다 알파벳 T가 존재

– T로부터 만들 수 있는 스트링 전체 집합 : T*

– 언어

• 어떤 규칙에 맞는 특정한 형태의 스트링을 모아 놓은 집

합.

– 문장(sentence)

• 유한 언어에 속하는 스트링

Page 13: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

문법(Grammar)

Nonterminal, VN

– 스트링을 생성하는데 사용되는 중간 과정의 심볼

– 언어의 구조를 정의하는데 사용

Terminal, VT

– 정의된 언어의 알파벳

Terminal + Nonterminal

– 문법심볼(Grammar Symbol)

– V(Vocabulary)

Page 14: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

문법 정의

G = (VN, VT, P, S)

– VN : Nonterminal 심볼의 유한 집합

– VT : Terminal 심볼의 유한 집합

– VN ∩ VT = , VN ∪ VT = V

– P : 생성 규칙(production rule)의 유한 집합

– α → β, α∈V+, β∈V*

– S : VN에 속하는 심볼로서 시작 심볼

Page 15: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

G = ( {S, A}, {a, b}, P, S )

P : S → aAS S→a

A → SbA A → ba A → SS

– nonterminal 집합 : {S, A}

– terminal 집합 : {a, b}

– 시작 심볼 : S

– 생성 규칙 : 5개

Page 16: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

축약표기

– 생성 규칙의 왼쪽(LHS)이 같은 경우

– α → β1, α→β2, α → β1 | β2

– S → aAS | a

– A → SbA | ba | SS

• Nonterminal 심볼 : 대문자

• Terminal 심볼 : 소문자

• 시작 심볼 : 대문자 S

Page 17: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

유도(derivation), ⇒, ⇒*, ⇒+

– ⇒, 직접 유도(directly derive)

• 생성 규칙을 한 번 적용하여 다른 스트링으로 대치

• α→β가 존재, γ, δ ∈ V*이면,γαδ ⇒ γβδ

– ⇒*, 영 번 이상의 유도

– ⇒+, 한 번 이상의 유도

문장형태 vs. 문장

Page 18: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

S => aA (S -> aA)

=> abS (A -> bS 를 적용)

=> abbB (S -> bB 를 적용)

=> abbaS (B -> aS 를 적용)

=> abba (S -> ε 을 적용)

– 문장 형태 : S, aA, abS, abbB, abbaS, abba

– 문장 : abba(terminal로 구성 )

Page 19: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

L(G)

– 문법 G에 의해 생성되는 언어

– L(G) = {ω | S ⇒* ω, ω∈VT*}

G1 = ( {S}, {a}, P, S )

– P : S -> a | aS

S ⇒ a a ∈ L(G1)

S ⇒ aS ⇒ aa aa ∈ L(G1)

S ⇒ aS ⇒ aaS ⇒ aaa aaa ∈ L(G1)

– L(G1) = {an | n≥1}

Page 20: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

문법과 언어의 관계

Grammar Languagedesign

generation

Page 21: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

문법의 분류

촘스키(Noam Chomsky) 문법 분류

– Type 0 문법

• Unrestricted Grammar; UG

– Type 1 문법

• Context Sensitive Grammar; CSG

– Type 2 문법

• Context Free Grammar; CFG

– Type 3 문법

• Regular Grammar; RG

Page 22: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

Type 0 문법 : Unrestricted Grammar

• 생성 규칙에 제한을 두지 않음

• 생성 규칙 α→β에서 α는 empty 스트링이 될 수 없음

Type 1 문법 : Context Sensitive Grammar

• 생성 규칙 α→β에서 β의 길이가 α의 길이보다 길다.

• |α| ≤ |β|

Page 23: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

– Type 2 문법 : Context Free Grammar; CFG

• 생성 규칙 A→α 형태

– A는 Nonterminal 심볼, α는 V*에 속하는 스트링

• 생성 규칙 좌측(LHS) : 하나의 Nonterminal 심볼

• 생성 규칙 우측(RHS) : Nonterminal + Terminal

– Type 3 문법 : Regular Grammar; RG

• A → tB or A → t, t ∈ VT*이고 A, B∈VN ; 우선형

• A → Bt or A → t, t ∈ VT*이고 A, B∈VN : 좌선형

Page 24: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

문법, 언어, 인식기(recognizer)

Grammar Language Recognizer

Type 0

(unrestricted)

recursively

enumerable set

Turing

machine

Type 1

(context-sensitive)

context-sensitive

language

linear bounded

automata

Type 2

(context-free )

context-free

language

PushDown

Automata

Type 3

(regular)

regular

language

Finite

Automata

Page 25: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

정규 언어(Regular Language)

상지대학교 컴퓨터정보공학부

고 광 만

([email protected])

Page 26: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

Contents

정규 문법과 정규 언어

정규 표현(Regular Expression)

유한 오토마타(Finite Automata)

정규 언어의 속성

Page 27: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

정규 문법과 정규 언어

정규 문법(Regular Grammar)

– 촘스키(Chomsky, N.) 문법 규칙-Type 3

– 토큰 구조 표현(어휘 분석 단계)

정규 문법의 형태

① 우선형 문법(right-linear grammar; RLG)

• Nonterminal이 Terminal 뒤에 나타남

• RLG: A -> tB, A -> t

② 좌선형 문법(left-linear grammar; LLG)

• Nonterminal이 Terminal 앞에 나타남

• LLG: A -> Bt, A -> t (A,B ∈ VN 이고 t ∈ VT*)

Page 28: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

– G1 : S -> 000S | 000 : RLG

– G2 : S -> S11 | 11 : LLG

RLG <===> LLG

Page 29: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

참고

– 문법의 생성 규칙이 우선형 형태의 규칙과 좌선형 형태의규칙이 혼합되어 있으면 정규 문법이 아님.

– 예, 정규 문법이 아님.

G : S -> aR | c

R -> Sb

• L(G) = {ancbn | n ≥ 0} : context-free 언어

• G : context-free 문법

Page 30: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

우선형 문법

– RLG: A -> tB, A -> t (A, B ∈ VN, t ∈ VT*)

우선형 문법에서 t =ε인 경우

– 생성 규칙 : A -> B

• 단일 생성 규칙(single production)

– 생성 규칙 : A -> ε

• ε-생성 규칙(epsilon production)

Page 31: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

같은 종류의 언어 생성

– 언어 L은 우선형 문법에 의해 생성

– 언어 L은 좌선형 문법에 의해 생성

– 언어 L은 정규 문법에 의해 생성

=> 정규 언어(Regular Language)

L = {anbm | n,m ≥ 1}, 정규 언어

S -> aS | aA

A -> bA | b

– 언어 L을 생성하는 정규 문법이 존재

Page 32: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

정규 문법이 사용되는 이유

– 토큰의 구조는 간단하므로 정규 문법으로 표현 가능

– Context-Free Grammar보다는 정규 문법으로부터 인식기의 구현이 쉬움.

– 모듈러하게 구성할 수 있음

Page 33: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

정규 표현(Regular Expression)

정 의

– 정규 문법 G를 대수학적인 성질로 표현

– 정규 언어에 속해있는 스트링의 모양을 직접 기술

– 정규 문법은 문법이 나타내는 언어의 형태를 체계적으로 구하여 정규 표현으로 나타낼 수 있음.

정규 문법(Regular Grammar)

정규 표현(Regular Grammar)

유한 오토마타(Finite Automata)

Page 34: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

정규 표현 정의

1. 정규 표현의 기본 요소 : Φ, ε, terminal 심볼

– Φ : 공집합을 나타내는 정규 표현

– ε : 집합 {ε}을 나타내는 정규 표현

– a∈VT : 집합 {a}를 나타내는 정규 표현

2. e1, e2가 정규 언어 L1과 L2의 정규 표현

– (e1) + (e2) : L1∪L2의 정규 표현(union)

– (e1) . (e2) : L1. L2의 정규 표현(concatenation)

– (e1)*L1* = {ε}∪L1

1∪L12∪L1

3 ...∪L1n의 정규 표현, (closure)

Page 35: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

정규 표현의 예

– 정규 표현 : ab*

• a가 나오고 b가 0번 이상 나오는 스트링

• {abn| n≥0}

– 정규 표현 : (0+1)*

• {0,1}*

– 정규 표현 : (a+b)*abb

• a와 b로 이루어지는 모든 스트링 뒤에 abb가 나오는 언어

Page 36: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

명칭(identifier)의 정규 표현

– 특정한 형태의 스트링을 표현하는데 유용

– letter={A,B, ..., Z,a,b, ...,z}, digit={0,1,2, ..., 9}

– letter(letter+digit)*

Page 37: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

정규 표현의 대수학적인 성질

A1) α+β = β+α

A2) (α+β) + γ = α+ (β+γ)

A3) (αβ) = α(β)

A4) α(β+γ) = αβ+αγ

A5) (β +γ)α = βα +γα

A6) α +α = α

A7) α +Φ = α

A8) αΦ = Φ = Φα

A9) εα = α = αε

A10) α* = ε+αα*

A11) α* = (ε + α)*

A12) (α*)* = αβ*

A13) α* +α = α*

A14) α* + α+ =α*

A15) (α + β)* = (α*β*)*

Page 38: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

정규 표현식

– 계수가 정규 표현인 식

– 예, αi, βi(i = 1,2,3, …)가 정규 표현일 때

• X = α1X +α2Y +α3

• Y = β1X +β2Y +β3

Page 39: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

X = αX +β의 해(Solution)

– X =α*β 대입

X = αX + β

= α(α*β)+β

= α+β+β

= (α+ +ε)β

= α*β

Page 40: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

L(G)를 나타내는 정규 표현 생성 과정

정규 문법으로부터 정규 표현식 구성

– 정규 문법 : X ->α|β|γ

– 정규 표현식 : X = α + β + γ 변환

X =αX +β을 X =α*β 변환

– X = αX +β 형태로 정리

– 시작 심볼에 대한 정규 표현식을 X =α*β로 변환

– α*β

• 정규 문법으로부터 생성될 수 있는 정규 언어

Page 41: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

G = ( {S, R}, {a,b}, P, S )

– S → aS | bR | ε

– R → aS

정규 표현식

S = aS + bR +ε .... (1)

R = aS .... (2)

– X = αX +β 형태의 식이 존재하지 않음

Page 42: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

시작 심볼 S에 대해, 식 (2)를 식 (1)에 대입.

S = aS + b(aS) +ε

= aS + baS +ε

= (a+ba)S +ε

변환 과정에 의해 L(G) 구성

– S = (a+ba)S +ε = (a+ba)*

– L(G) = (a+ba)*

Page 43: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

G = ( {S,A,B}, {a,b}, P, S )에 대한 L(G) ?

정규 문법

S → aA | bB | b

A → bA |ε

B → bS

정규 표현식

S = aA + bB + b .... (1)

A = bA +ε .... (2)

B = bS .... (3)

Page 44: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

X = αX +β형태의 식 (2)를 풀면

A = bA +ε = b*ε = b* .... (4)

식 (4)와 (3)을 식 (1)에 대입

S = aA + bB + b

= ab* + bbS +b

= bbS + (ab* + b)

= (bb)*(ab* + b)

L(G) = (bb)* (ab* + b)

Page 45: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

정규 표현 ?

정규 표현식

X1 = 0X2 + 1X1 +ε .... (1)

X2 = 0X3 + 1X2 .... (2)

X3 = 0X1 + 1X3 .... (3)

식 (3)에서

X3 = 1X3 + 0X1

= 1*0X1 .... (4)

Page 46: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

식 (2)에 식(4)를 대입

X2 = 01*0X1 + 1X2 = 1X2 + 01*0X1

= 1*01*0X1 .... (5)

식 (5)를 식 (1)에 대입

X1 = 01*01*0X1 + 1X1 +ε

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

= (01*01*0 + 1)*

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

Page 47: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

유한 오토마타(Finite Automata; FA)

언어 인식기(Language Recognizer)

– 스트링을 받아 스트링이 그 언어의 문장, "Yes"

– 인식기 중에 가장 간단한 형태

– 어휘 분석기의 고안/구현

a0 a1 a2 ... ai ai+1 ai+2 ... aninput

Input head

Auxiliary Storage

Finite State Control

Page 48: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

FA M = (Q, Σ, δ ,q0, F)

구성 요소

– Q : 상태(state)들의 유한 집합

– Σ : 입력 심볼의 유한 집합

– δ : 사상 함수(mapping function)

• Q×Σ→2Q(power set of Q)

• δ(q, a) = {p1 ,p2 , . . . ,pn}

• q 상태에서 입력 a를 본 다음 상태는 p1부터 pn중 하나

선택

– q0 : 시작 상태(start 또는 initial state) (q0∈Q)

– F: 종결 상태의 집합 (F⊆Q)

Page 49: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

상태 전이 함수(state transition function)

– 결정적 유한 오토마타(Derteministic FA; DFA)

– 비결정적 유한 오토마타(Nonderteministic FA; NFA)

DFA 정의

– 전이 함수 δ(q, a)가 다음 상태로서 오직 한 상태만 갖는 경

– δ(q, a) = {p}, δ(q, a) = p

Page 50: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

DFA M = (Q, Σ ,δ, q0, F)

구성 요소

– Q : 상태(state)들의 유한 집합

– Σ: 입력 심볼의 유한 집합

– δ : 사상 함수(mapping function)

• Q×Σ → Q

• δ(q, a) = p

• q 상태에서 입력 a를 본 다음 상태는 p.

– q0 : 시작 상태(start 또는 initial state) (q0∈Q)

– F: 종결 상태의 집합 (F⊆Q)

Page 51: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

M = ( {q0, q1, q2}, {a, b} , δ, q0, {q2} )

δ(q0, a) = q1 δ(q0, b) = q2

δ(q1, a) = q2 δ(q1, b) = q0

δ(q2, a) = q0 δ(q2, b) = q1

– 상태수, 3개 : q0, q1, q2

– 입력 심볼 : a, b

– 시작 상태 : q0

– 종결 상태 : q2

Page 52: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

상태 전이표(transition table)

– FA의 전이 함수를 행렬(matrix) 형태로 표현

– 행과 열은 각각 상태 집합과 입력 심볼 표시

– 행과 열이 교차하는 위치 : 다음 상태

전이 함수에 대한 상태 전이표

δ a b

q0 q1 q2

q1 q2 q0

q2 q0 q1

Page 53: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

전이 함수 확장

– Q×Σ→Q ⇒ Q×Σ*→Q

– 한 개의 심볼을 스트링으로 확장

• δ(q, ε) = q

• δ(q, xa) = δ( δ(q,x) , a)

상태 q0에서 스트링 aba를 인식

– δ(q0, aba) = δ(δ(q0, ab), a)

= δ(δ(δ(q0, a), b), a)

Page 54: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

δ(q0, x) = p인 경우

– q0로부터 x를 본 다음 상태, p

– p가 종결 상태에 포함(p∈F)

• 스트링 x는 M에 의해 인식(accept).

– 시작 상태에서 주어진 스트링을 다본 상태가 종결 상태이

면 스트링 인식

Page 55: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

M에 의해 인식되는 언어, L(M)

– DFA M에 의해 인식되는 스트링 전체를 모아 놓은 집합

– L(M) 정의

• L(M) = {x| δ(q0, x) ∈ F}.

Page 56: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

M = ( {p, q, r}, {0, 1}, δ, p, {r} )에 의한 스트링 1001, 0110 인

식 ?

– 오토마타 상태 전이표

δ 0 1

p q p

q r p

r r r

Page 57: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

δ(p,1001)

=δ(p, 001) = δ(q, 01) =δ(r, 1) = r ∈ F

스트링 1001은 M에 의해 인식

δ(p,0110)

=δ(p, 110) = δ(p, 10) = δ(p, 0) = q ∈ F

스트링 0110은 M에 의해 인식되지 못함

Page 58: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

상태 전이도(state transition diagram)

상태 전이도

– 각 상태를 노드(node)로 표현

– 전이 함수 δ(q,a) = p

• 상태 q에서 p로 이동, 레이블이 a인 지시선 사용

– 종결 상태 : 이중 원, 시작 상태 : start 지시선

상태 전이도 표현

– 스트링을 인식 과정을 표현한 흐름도

– 스트링을 받아 들이는 인식기를 고안하는데 사용

Page 59: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

상태 전이도

명칭에 대한 상태 전이도

start p q r0

1

1

0

0, 1

start Sletter

letter, digit

A

Page 60: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

비결정적 유한 오토마타

비결정적 유한 오토마타(NFA)

– 입력 심볼에 대한 다음 상태가 여러개 존재

– 다음 상태를 선택하기 위하여 여러 가지 가능성을 고려

NFA M

– Q : 상태들의 유한 집합

– Σ : 입력 심볼의 유한 집합

– δ : 전이 함수 Q×Σ→2Q, δ(q, a) = {p1, p2, ... ,pn}

– q0 : 시작 상태로 q0∈Q

– F : 종결 상태의 집합

Page 61: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

상태 전이표

– δ(q, a) = Φ, δ(q, a)는 정의되지 않았음.

– q 상태에서 a라는 입력 심볼이 나올 수 없음

δ 0 1

q0 {q1, q2} (q1, q3}

q1 {q1, q2} {q1, q3}

q2 {qf} Φ

q3 Φ {qf}

qf {qf} {qf}

Page 62: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

NFA에 대한 상태 전이도

– 노드 : q0, ..., qf

– 입력 심볼 : 0, 1

– 시작 상태 : q0, 종결 상태 : qf

– 전이 함수 δ

start q0

q1

q2

q

3

qf

0 0 0, 1

11

0, 1

1

0

0,1

Page 63: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

NFA에 의한 전이 함수 확장-1

– δ(q,ε) = {q}

– δ(q,xa) = ∪ δ(p,a) p∈δ(q,x)

• x를 다 본 상태들에서 a를 본 상태 집합의 합집합

δ(q0,1001) = δ(q1, 001) ∪ δ(q3, 001)

= δ(q1, 01) ∪ δ(q2, 01) ∪ Φ

= δ(q1, 1) ∪ δ(q2, 1) ∪ δ(qf, 1) = {q1, q3, qf}

Page 64: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

NFA M은 스트링 1011을 인식 ?

δ({q0}, 1011) = δ({q1, q3}, 011)

= δ({q1, q2}, 11)

= δ({q1, q3}, 1)

= δ{q1, q3, qf}.

– {q1, q3, qf} ∩ {qf}≠ Φ

∴ 1011은 M에 의해 인식

Page 65: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

인식 과정을 트리 구조로 표현

Page 66: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

NFA에서 DFA로 변환

NFA에서 DFA로 변환

– NFA는 언어의 구조를 쉽게 표현할 수 있음

– DFA보다 프로그램으로 구현하기가 어려움

– NFA에 대해 같은 언어를 인식하는 DFA 구현 가능

NFA에서 스트링을 인식 과정

– 상태 집합에서 심볼을 보고 다음 상태 집합으로 이동

δ(q0, a1a2 ... an)

= δ( {q1,q2,...,qi}, a2a3 ... an)…

= {r1, r2, ... , rk}

Page 67: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

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, …, pj} 이면

• δ'([q1, q2, …, qi], a) = [p1, p2, …, pj]

Page 68: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

NFA를 DFA로 변환

– NFA M = ( {q0, q1}, {0, 1}, δ, q0, {q1} )

0 1

q0 {q0, q1} {q0}

q1 {q0, q1}

Page 69: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

DFA, M'=(Q', Σ, δ',q0',F')

– 상태 집합 Q‘ : 2Q로 표현

• { [q0], [q1], [q0,q1] }

– 시작 상태 :

• q0' = [q0]

– 종결 상태 집합 F ' :

• NFA의 종결 상태 q1을 포함하고 있는 상태들의 집합

• { [q1], [q0, q1] }

Page 70: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

– 입력 심볼에 따른 전이 함수

δ'([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]

Page 71: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

상태 이름 변경

– [q0] = A, [q1] = B, [q0,q1] = C

– B는 시작 상태에서 도달할 수 없는 상태이므로 문장을 인식하는데 필요 없음.

’ 0 1

A C A

B C

C C C

Page 72: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

상태 전이도

0,11

0

1

CA

B

Start

Page 73: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

NFA로부터 DFA를 구성하는 과정

과정

– 시작 상태 q0를 DFA의 시작 상태 [q0]로 지정

• Q' = { [q0] }

– 각 상태에서 입력 심볼을 보고 갈 수 있는 다음 상태 구성

• 새로 구성된 상태가 존재하지 않으면 새로운 상태를 Q'에 추가

• 문자에 대한 지시선을 연결

• 다음 상태가 이미 존재하면 입력 문자에 따른 지시선만연결

– 새로운 상태가 추가되지 않을 때까지 반복

• 새로운 상태중 NFA의 종결 상태를 포함하고 있으면 모두 DFA의 종결 상태.

Page 74: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

NFA로부터 동등한 언어를 인식하는 DFA

start 0

a, b

a1 2 3

b b

1. NFA의 시작 상태가 0, DFA의 시작 상태 [0]

start [0]

Page 75: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

2. 상태 [0]에서 a, b를 보고 갈 수 있는 다음 상태

– 상태 [0]에서 a를 보고 갈 수 있는 상태 집합

• {0,1}, 새로운 상태 추가 후 지시선 연결

– 상태 [0]에서 b를 보고 갈 수 있는 상태 집합

• {0}, [0]는 이미 존재하므로 지시선만 연결

a[0,1]start [0]

b

a[0,1]start [0]

Page 76: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

3.상태 [0,1]에서 a, b를 보고 갈 수 있는 상태

– 입력 심볼 a를 보고 갈 수 있는 상태

• {0,1}, 기존에 존재하는 상태이므로 지시선만 연결

– 입력 심볼 b를 보고 갈 수 있는 상태

• {0,2}, 새로운 상태 추가 후 지시선 연결

b

a[0,1]start [0]

a

b

a[0,1]start [0]

a

b[0,2]

Page 77: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

4. 상태 [0,2]에서 a, b를 보고 갈 수 있는 상태

– 상태 [0,2]에서 a를 보고 갈 수 있는 상태 집합

• {0,1}, 지시선만 연결

– 상태 [0,2]에서 b를 보고 갈 수 있는 상태 집합

• {0,3}, 새로운 상태 추가 후 지시선 연결

b

a[0,1]start [0]

a

b[0,2]

a

b

a[0,1]start [0]

a

b[0,2]

a[0,3]

b

Page 78: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

5. 상태 [0,3]에서 a, b를 보고 갈 수 있는 상태

– 상태 [0,3]에서 a를 보고 갈 수 있는 상태 집합

• {0,1}, 지시선만 연결

– 상태 [0, 3]에서 b를 보고 갈 수 있는 상태 집합

• {0}, 지시선만 연결

b

a[0,1]start [0]

a

b[0,2]

a[0,3]

b

a

b

Page 79: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

6. 더 이상 새로운 상태가 존재하지 않음

– NFA의 종결 상태 3을 포함하는 상태 [0,3]을 DFA의종결 상태로 표시

b

a[0,1]start [0]

a

b[0,2]

a[0,3]

b

a

b

Page 80: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

DFA 상태수 최소화

DFA 상태수 최소화(state minimization)

– DFA를 이용하는 어휘 분석기의 상태 전이표의 크기를 줄임

– 기억 공간을 적게 사용

– 어휘 분석 프로그램을 간단히 하는데 큰 도움

– 동치 관계(equivalence relation)

• 상태 합침(state merge)

• 구별되지 않는 상태를 하나로 합침.

Page 81: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

상태수 최소화 방법

단계 1 : 초기의 동치 관계 구성

– 전체 상태를 종결 상태와 미종결 상태로 분할

b

a

Astart

a

ED

CB

a

b

b b

a

a

Page 82: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

단계 2 : 같은 입력 심볼에 대해 서로 다른 동치류로 가는 지시선이 존재하는 경우

– 분할, 새로운 동치류 구성

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

a 1 1 1 1 1

b 1 2 2 1 1

Page 83: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

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

a 2 2 2 2 2

b 2 3 3 3 3

Page 84: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

3. 2번 과정을 반복하여 더 이상 분할이 일어나지 않을 때,

– DFA M' = (Q', Σ, δ', q0', F') 구성

• Q' : 동치류의 집합

• Q'의 한 상태를 [q]로 표기

• 상태 q를 포함하는 동치류를 의미

– q0' = [q0]

– [p], [q]를 임의의 동치류라 할 때

• δ(p,a)=q 이면 δ'([p], a) = [q]

– F' = {[q] | q ∈ F}

Page 85: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

상태수 축소

– X=[A], Y=[B, D], Z=[C, E]

X Y Z

a Y Y Y

b Y Z Z

Page 86: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

– 상태수가 5개에서 3개로 축소

– 상태 전이도

b

Zstart X Ya, b

b

a

Page 87: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

정규언어의 속성

정규 문법, 정규 표현, 유한 오토마타와의 관계

정규 문법(Regular Grammar)

정규 표현(Regular Grammar)

유한 오토마타(Finite Automata)

Page 88: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

정규 문법과 유한 오토마타

정규 문법에 대해 유한 오토마타 구성

– 상태 집합

• Nonterminal 심볼의 집합 + 새로운 종결 상태

– 시작 상태 : 시작 심볼

– 사상 함수 : 전이 함수

Page 89: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

G = (VN, VT, P, S), M = (Q, Σ, δ, q0, F)

– Q : VN ∪ {f}

– Σ : VT

– q0 : S

– F : L(G), then {f} else {S, f};

– δ : if A → aB ∈ P, then δ(A, a) ∋ B;

if A → a ∈ P, then δ(A, a) ∋ f.

Page 90: Lecture 02: 형식언어및정규언어 - SANG JIcompiler.sangji.ac.kr/lecture/compiler/2019/lecture02.pdf · Lecture 02: 형식언어및정규언어 Kwang-Man Ko kkmam@sangji.ac.kr,

QnA