Lexical Analysis Part 2
COMP321 Compiler โ Lexical Analysis Part 2
Kyungpook National University | Hwisoo So | Spring 2026
๐ 1ํ์ด์ง โ ์ ๋ชฉ
Lexical Analysis โ Part 2
์ดํ ๋ถ์ โ 2๋ฒ์งธ ํํธ
์ปดํ์ผ๋ฌ์ Lexical Analysis(์ค์บ๋ ๋จ๊ณ) ๋ ๋ฒ์งธ ๊ฐ์.
Part 1์์ ๊ธฐ๋ณธ ๊ฐ๋
์ ๋ค๋ค๊ณ , ์ง๊ธ๋ถํฐ๋ ์๋์(Automata) + ์ ๊ทํํ์ + DFA/NFA ๋ณํ์ผ๋ก ๋ค์ด๊ฐ๋ค.
- Hwisoo So โ ์ํ์ (๊ต์ ์ด๋ฆ)
- Kyungpook National University โ ๊ฒฝ๋ถ๋ํ๊ต
- COMP321 Compiler / Spring 2026 โ ์ปดํ์ผ๋ฌ ๊ณผ๋ชฉ / 2026๋ ๋ดํ๊ธฐ
๐ 2ํ์ด์ง โ Outline (๊ฐ์ ๊ฐ์)
The role of a scanner โ
์ค์บ๋์ ์ญํ
- scanner = lexical analyzer
- ์ญํ : ๋ฌธ์ ์คํธ๋ฆผ โ ํ ํฐ
- ์ด๋ฏธ ์ด์ ์๊ฐ์ ๋ค๋ฃธ (โ ํ์)
Scanner concepts โ
์ค์บ๋ ๊ฐ๋
Tokens, Lexemes, Patterns
- Token: ํ์ (ex: IDENTIFIER, NUMBER)
- Lexeme: ์ค์ ๋ฌธ์์ด (ex: โabcโ, โ123โ)
- Pattern: ์ ๊ท์์ผ๋ก ์ ์๋ ๊ท์น
Regular Expression & Automata (to be continuedโฆ)
์ ๊ทํํ์๊ณผ ์คํ ๋งํ (๊ณ์ ์งํ ์ค)
์ง๊ธ๋ถํฐ ํต์ฌ ํํธ ์์: ์ ๊ทํํ์ โ NFA โ DFA โ ์ต์ํ
| ํญ๋ชฉ | ์ํ |
|---|---|
| Definitions of REs, DFAs and NFAs | โ ์๋ฃ |
| REs โ NFA (Thompson Construction) | โ ์๋ฃ |
| NFA โ DFA (Subset Construction) | โ ์ด๋ฒ ํต์ฌ |
| DFA โ minimal-state DFA | ๋ค์ ์ฃผ์ |
| Scanner generators (lex/flex) | ์ดํ |
Todayโs agenda
- NFA โ DFA
- DFA ์ต์ํ
์ด ๋ ๊ฐ๊ฐ ์ค๋์ ํต์ฌ์ด๋ค.
๐ 3ํ์ด์ง โ Subset Construction (NFAโDFA ํต์ฌ ๊ฐ๋ )
Subset Construction (NFAโDFA)
๋ถ๋ถ์งํฉ ๊ตฌ์ฑ๋ฒ (NFA๋ฅผ DFA๋ก ๋ณํ)
๋ฌธ์ : NFA์ ๋น๊ฒฐ์ ์ฑ
โInstead of guessing in state s1 on symbol aโ
์ํ s1์์ ์ ๋ ฅ a์ ๋ํด ์ถ์ธกํ๋ ๋์
NFA๋ ๊ฐ๋ฆผ๊ธธ์ด ์๋ค (๋น๊ฒฐ์ ์ ):
- a ์ฝ์ผ๋ฉด: s1 โ s1 ๋๋ s1 โ s2
- ๋ ์ค ํ๋๋ฅผ โguessโ ํด์ผ ํจ โ ๋ฌธ์
ํด๊ฒฐ: ๋ ์ ์ด๋ฅผ ๋์์ ๋ฐ๋ผ๊ฐ๋ค
โwe can follow both transitions in parallelโ
๋ ์ ์ด๋ฅผ ๋์์ ๋ฐ๋ผ๊ฐ ์ ์๋ค
- ํ๋๋ง ์ ํ โ
- ๋ ๋ค ๋์์ ์ถ์ โ
๊ฐ์ ์ํ ๋์
โWe introduce a virtual stateโ
์ฐ๋ฆฌ๋ โ๊ฐ์ ์ํโ๋ฅผ ๋์ ํ๋ค
DFA์์์ ์ํ = NFA ์ํ๋ค์ ์งํฉ
์: {s1, s2} โ ์ด๊ฒ ํ๋์ DFA ์ํ๊ฐ ๋จ
์ง๋ฌธ๊ณผ ๋ต
โif we are in {s1, s2}, where can we go on b?โ
{s1, s2} ์ํ์์ b๋ฅผ ์ฝ์ผ๋ฉด ์ด๋๋ก ๊ฐ๋๊ฐ?
๊ฐ ์ํ์์ ๊ฐ ์ ์๋ ๊ณณ์ ํฉ์น๋ค:
- s1 โ s1
- s2 โ s3
- ๊ฒฐ๊ณผ: {s1, s3}
๊ทธ๋ฆผ ์ค๋ช (ํ๋จ)
- NFA์์ s1์์ a๋ก ๊ฐ ๋ ๋ ๊ฐ๋ ์กด์ฌ
- ์์ 1 (์ฑ๊ณต): โabbโ โ s0 โ s1 โ s2 โ s3 โ s4 (accept)
- ์์ 2 (์คํจ): s0 โ s1 โ s1 โ s1 โ s1 (fail)
- NFA๋ โ์ด๋นจโ โ ์๋ชป ๊ณ ๋ฅด๋ฉด ํ๋ฆผ
- ํด๊ฒฐ: ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋์์ ์ถ์ โ DFA
๐ 4ํ์ด์ง โ DFA ๊ตฌ์ฑ ๊ฒฐ๊ณผ
A โvirtual stateโ is a subset
๊ฐ์ ์ํ๋ ์ํ ์งํฉ์ ๋ถ๋ถ์งํฉ์ด๋ค
S = {S0, S1, S2, S3, S4}
DFA ์ํ ์: {S0, S1}, {S1, S2}, โฆ
ํ: Table encoding DFA (ํต์ฌ)
| ์ํ | a ์ ๋ ฅ | b ์ ๋ ฅ |
|---|---|---|
| {s0,s1} | {s1,s2} | {s1} |
| โฆ | โฆ | โฆ |
โ DFA transition table
์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ (DFA ๊ทธ๋ํ)
- ์ํ: {s0,s1}, {s1,s2}, {s1,s3}, โฆ
- NFA โ DFA ๋ณํ ์๋ฃ ์ํ
๐ 5ํ์ด์ง โ ์๊ณ ๋ฆฌ์ฆ: NFAโDFA
Algorithm: NFAโDFA
NFA๋ฅผ DFA๋ก ๋ณํํ๋ ์๊ณ ๋ฆฌ์ฆ
โWe need to build a simulation of the NFAโ
NFA๋ฅผ ์๋ฎฌ๋ ์ด์ ํด์ผ ํ๋ค
DFA = NFA๋ฅผ ๋์์ ์ถ์ ํ๋ ์๋ฎฌ๋ ์ดํฐ
ํต์ฌ ํจ์ ๋ ๊ฐ์ง
| ํจ์ | ์๋ฏธ |
|---|---|
Move(si, a) |
์ํ ์งํฉ si์์ a๋ก ๊ฐ ์ ์๋ ์ํ ์งํฉ |
ฮต-closure(si) |
ฮต ์ ์ด๋ก ๊ฐ ์ ์๋ ๋ชจ๋ ์ํ (๊ณต์ง ์ด๋) |
์์ ์ํ
- S0 = ฮต-closure({s0})
- ์์๋ถํฐ ฮต๋ก ํ์ฅ
๋ฐ๋ณต ๊ณผ์
๊ฐ ์
๋ ฅ ฮฑ์ ๋ํด:
Move โ ฮต-closure โ ๋ฐ๋ณต
์ ์ํ ์์ฑ โ ๊ณ์ ์ถ๊ฐ โ ๋ ์ด์ ์์ผ๋ฉด ๋
โIterate until no more states are addedโ
๋ ์ด์ ์ํ๊ฐ ์ถ๊ฐ๋์ง ์์ ๋๊น์ง ๋ฐ๋ณต โ fixed-point
โSounds more complex than it isโฆโ
๋ณด๊ธฐ๋ณด๋ค ๊ทธ๋ ๊ฒ ๋ณต์กํ์ง ์๋ค โ ์ค์ ๋ก๋ ์งํฉ ๊ณ์ฐ ๋ฐ๋ณต์ผ ๋ฟ
๐ 6ํ์ด์ง โ Subset Construction ์๊ณ ๋ฆฌ์ฆ ์์ธ
์๊ณ ๋ฆฌ์ฆ ์ ์ฒด ์ฝ๋
Dstates โ { }
add ฮต-closure(s0) as an unmarked state to Dstates
while ( there is an unmarked state T in Dstates )
mark T
for each ฮฑ โ โ
U โ ฮต-closure(Move(T, ฮฑ))
if ( U โ Dstates ) then add U
ฮด[T, ฮฑ] โ U
๊ฐ ์ค ํด์
| ์ฝ๋ | ํด์ |
|---|---|
Dstates โ { } |
DFA ์ํ ์งํฉ์ ๋น ์งํฉ์ผ๋ก ์ด๊ธฐํ |
| ฮต-closure(s0) ์ถ๊ฐ | ์์ ์ํ ์์ฑ, ์์ง ์ฒ๋ฆฌ ์ ํ์ผ๋ โunmarkedโ |
while (unmarked T) |
์์ง ์ฒ๋ฆฌ ์ ๋ ์ํ T๊ฐ ์์ผ๋ฉด ๋ฐ๋ณต |
mark T |
T๋ฅผ ์ฒ๋ฆฌ ์๋ฃ๋ก ํ์ |
for each ฮฑ โ โ |
๋ชจ๋ ์ ๋ ฅ ๋ฌธ์์ ๋ํด ๋ฐ๋ณต |
U โ ฮต-closure(Move(T,ฮฑ)) |
ํต์ฌ ๊ณ์ฐ: Move โ ฮต-closure |
if U โ Dstates |
์ ์ํ๋ฉด ์ถ๊ฐ |
ฮด[T, ฮฑ] โ U |
DFA ์ ์ด ํ ์ด๋ธ ์์ฑ |
์ข ๋ฃ ์ด์
- Dstates contains no duplicates โ ์ค๋ณต ์ํ ์์
-
**2^ S is finite** โ NFA ์ํ n๊ฐ๋ฉด DFA ์ต๋ 2โฟ๊ฐ (์ ํ) - monotone โ ์ํ๋ ์ถ๊ฐ๋ง ๋๊ณ ์ญ์ ์ ๋จ
๊ฒฐ๋ก : ๋ฃจํ๋ ๋ฐ๋์ ์ข ๋ฃ๋จ
์ค์ ๊ท์น
โAny DFA state containing a final state becomes finalโ
NFA์ final state๋ฅผ ํฌํจํ๋ DFA ์ํ๋ final์ด๋ค
์: {s1, s4} โ s4๊ฐ final์ด๋ฉด โ ์ด ์ํ๋ final
๐ 7ํ์ด์ง โ Fixed-point ๊ฐ๋
Example of a fixed-point computation
๊ณ ์ ์ ๊ณ์ฐ์ ์
| ๊ฐ๋ | ์ค๋ช |
|---|---|
| Monotone construction | ์ํ๊ฐ ๊ณ์ ์ถ๊ฐ๋จ (์ ๋ ์ค์ง ์์) |
| Halts when it stops adding | ๋ ์ด์ ์ถ๊ฐ ์์ผ๋ฉด ์ข ๋ฃ |
| Proofs of halting & correctness are similar | ์ข ๋ฃ์ฑ๊ณผ ์ ๋น์ฑ ์ฆ๋ช ์ด ๋น์ทํ๋ค |
| These computations arise in many contexts | ์ปดํ์ผ๋ฌ ์ ๋ฐ์์ ์ด๋ฐ ๊ณ์ฐ์ด ๋ฑ์ฅํ๋ค |
์ด ์๊ณ ๋ฆฌ์ฆ = fixed-point algorithm
๊ณ์ ๋ฐ๋ณต โ ๋ ์ด์ ๋ณํ ์์ โ ์ข ๋ฃ
๐ 8ํ์ด์ง โ ์์ : NFAโDFA (a(b|c)*)
์ ๊ท์: a(b|c)*
a ๋ค์์ b ๋๋ c๊ฐ 0๋ฒ ์ด์ ๋ฐ๋ณต
Transition Table
| ์ํ | a | b | c |
|---|---|---|---|
| s0 | {q1,q2,q3,q4,q6,q9} | none | none |
| s1 | - | {q5,q8,q9,q3,q4,q6} | {q7,q8,q9,q3,q4,q6} |
โ DFA transition ๊ณ์ฐ ๊ณผ์ (subset construction ์ค์ ์ ์ฉ)
๊ทธ๋ฆผ ์ค๋ช (์ผ์ชฝ NFA)
- ฮต-transition ๋ง์, branching ๊ตฌ์กฐ
- ๋ณต์กํ NFA โ DFA๋ก ๋จ์ํํ๋ ๊ณผ์
๐ 9ํ์ด์ง โ ์์ฑ๋ DFA: a(b|c)*
The DFA for a(b|c)*
โEnds up smaller than the NFAโ
์ด ๊ฒฝ์ฐ DFA๊ฐ NFA๋ณด๋ค ๋ ์๋ค
(์ผ๋ฐ์ ์ผ๋ก๋ DFA๊ฐ ๋ ์ปค์ง๋๋ฐ, ์ด ์์๋ ํน์ดํ๊ฒ ๋ ์์์ง)
โAll transitions are deterministicโ
๋ชจ๋ ์ ์ด๋ ๊ฒฐ์ ์ ์ด๋ค โ ํญ์ ํ๋์ ๊ฒฝ๋ก, ์ ํ ์์
โUse the same code skeleton as beforeโ
์ด์ ์ฝ๋ ๊ตฌ์กฐ ๊ทธ๋๋ก ์ฌ์ฉ
Transition Table
| ์ํ | a | b | c |
|---|---|---|---|
| S0 | S1 | - | - |
| S1 | - | S2 | S3 |
๊ทธ๋ฆผ ์ค๋ช
- S0 โ a โ S1
- S1 โ b/c ๋ฐ๋ณต (๋ฃจํ)
โBut remember our goalโ
ํ์ง๋ง ์ฐ๋ฆฌ์ ๋ชฉํ๋ฅผ ๊ธฐ์ตํ๋ผ
DFA ๋ง๋๋ ๊ฒ ๋์ด ์๋ โ ์ต์ํ๊ฐ ์ต์ข ๋ชฉํ
๐ 10ํ์ด์ง โ ์ ๋ฆฌ (Outline ์ ๋ฐ์ดํธ)
์ ์ฒด ํ๋ฆ ์ ๋ฆฌ
| ๋จ๊ณ | ์ํ |
|---|---|
| RE โ NFA | โ ์๋ฃ |
| NFA โ DFA | โ ๋ฐฉ๊ธ ๋ฐฐ์ด ๋ด์ฉ |
| DFA โ minimal-state DFA | โ ๋ค์ ํต์ฌ ์ฃผ์ |
| Scanner generators | ์ดํ |
์ ๊ทํํ์ โ NFA โ DFA โ ์ต์ DFA
๐ 11ํ์ด์ง โ DFA Minimization ๊ฐ๋ ํต์ฌ
DFA Minimization Overview
DFA ์ต์ํ ๊ฐ์
The Big Picture
โDiscover distinguishable statesโ
๊ตฌ๋ณ ๊ฐ๋ฅํ ์ํ๋ค์ ์ฐพ์๋ผ
distinguishable ์ ์
โTwo states p and q are distinguishable by input string w iffโฆโ
๋ ์ํ p, q๋ ๋ฌธ์์ด w์ ์ํด ๊ตฌ๋ณ๋๋ค
โ p์์ ์์ํ๋ฉด w๋ฅผ acceptํ์ง๋ง q์์๋ reject์ธ ๊ฒฝ์ฐ
โ w : p โ accept, q โ reject โ ๊ตฌ๋ณ ๊ฐ๋ฅ
โTwo states p and q are distinguishable ifโฆโ
์ด๋ค ๋ฌธ์์ด ํ๋๋ผ๋ ์กด์ฌํ๋ฉด ๊ตฌ๋ณ ๊ฐ๋ฅ
indistinguishable ์ ์
๋ชจ๋ ๋ฌธ์์ด์ ๋ํด ๊ฐ์ ๊ฒฐ๊ณผ โ ์์ ํ ๋์ผํ behavior
โStates that cannot be distinguished can be represented by a single stateโ
๊ตฌ๋ณํ ์ ์๋ ์ํ๋ค์ ํ๋๋ก ํฉ์น ์ ์๋ค โ minimization ํต์ฌ
๊ทธ๋ฆผ ์ค๋ช (์ค๋ฅธ์ชฝ)
- s2, s3 ๋น๊ต โ s2 โก s3 (๊ตฌ๋ณ ๋ถ๊ฐ๋ฅ) โ ํ๋๋ก ํฉ์นจ: s2s3
๐ 12ํ์ด์ง โ Partition ๊ฐ๋
์ํ ์งํฉ ๋ถํ
โThe set of states is divided into subsetsโ
์ํ ์งํฉ์ ์ฌ๋ฌ ๋ถ๋ถ์งํฉ์ผ๋ก ๋๋๋ค
โS is partitioned into Pโ
S๋ฅผ P๋ผ๋ ๋ถํ ๋ก ๋๋๋ค
โEach state s โ S is in exactly one setโ
๊ฐ ์ํ๋ ์ ํํ ํ๋์ ๊ทธ๋ฃน์๋ง ์ํ๋ค โ ์ค๋ณต ์์
โStates in the same set have not been distinguished yetโ
๊ฐ์ ๊ทธ๋ฃน์ ์๋ ์ํ๋ ์์ง ๊ตฌ๋ณ๋์ง ์์ ์ํ
โStates from different sets are distinguishableโ
๋ค๋ฅธ ๊ทธ๋ฃน์ด๋ฉด ์ด๋ฏธ ๊ตฌ๋ณ๋จ
์ด๊ธฐ ๋ถํ
โInitially the partition P consists of 2 setsโ
์ฒ์์๋ 2๊ฐ ๊ทธ๋ฃน์ผ๋ก ์์
โaccepting states F / non-accepting states S-Fโ
accept ์ํ / non-accept ์ํ
P0 = { F , S-F }
โdistinguishable by ฮตโ
ฮต(๋น ๋ฌธ์์ด)๋ก๋ ๊ตฌ๋ณ๋จ โ accept vs non-accept๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค๋ฆ
๋ฐ๋ณต ๊ณผ์
โalgorithm repeatedly picks a setโ
์๊ณ ๋ฆฌ์ฆ์ ๊ณ์ ๊ทธ๋ฃน์ ์ ํํด์
โtries to distinguishโ
๊ตฌ๋ณ์ ์๋ํ๋ค
โsplit pi along ฮฑโ
์ ๋ ฅ ฮฑ์ ๋ฐ๋ผ ๊ทธ๋ฃน์ ์ชผ๊ฐ ๋ค
๐ 13ํ์ด์ง โ Split ๊ฐ๋
Splitting of a State Set along Symbol ฮฑ
์ ๋ ฅ ฮฑ์ ๋ฐ๋ฅธ ์ํ ์งํฉ ๋ถํ
โrepeatedly picks a setโ
๊ณ์ ์งํฉ์ ์ ํํ๊ณ
โtries to distinguish between statesโ
๊ทธ ์์ ์ํ๋ค์ ๊ตฌ๋ณํ๋ ค๊ณ ํ๋ค
โEventually no more set can be splitโ
๋ ์ด์ ์ชผ๊ฐค ์ ์์ผ๋ฉด ์ข ๋ฃ
๋ ๊ฐ์ง ๊ฒฝ์ฐ (๊ทธ๋ฆผ ์ค๋ช )
| ๊ฒฝ์ฐ | ์ค๋ช |
|---|---|
| ฮฑ does not split pi | ฮฑ๋ก ๊ตฌ๋ณ ์ ๋จ โ ์ํ๋ค์ด ๋์ผํ๊ฒ ํ๋ โ ๊ทธ๋๋ก ์ ์ง |
| ฮฑ splits pi into {sa} and {sb, sc} | ฮฑ๋ก ์ธํด ์งํฉ์ด ๋๋ก ๋๋จ โ ์ผ๋ถ๊ฐ ๋ค๋ฅธ ๊ณณ์ผ๋ก ๊ฐ โ ๊ตฌ๋ณ๋จ |
ํต์ฌ: ๊ฐ์ ๊ทธ๋ฃน โ ์ ๋ ฅ ๋ฃ์ด์ ๋ค๋ฅด๋ฉด ์ชผ๊ฐ ๋ค
๐ 14ํ์ด์ง โ Minimization ์๊ณ ๋ฆฌ์ฆ
DFA ์ต์ํ ์๊ณ ๋ฆฌ์ฆ
P โ { F, S-F }
while ( P is still changing )
T โ { }
for each set p โ P
T โ T โช Split(p)
P โ T
Split(p):
if ฮฑ splits p into p1 and p2
return {p1, p2}
return p
๊ฐ ์ค ํด์
| ์ฝ๋ | ํด์ |
|---|---|
P โ { F, S-F } |
์ด๊ธฐ partition ์ค์ |
while (P is still changing) |
partition์ด ๋ณํ๋ ๋์ ๋ฐ๋ณต (ํต์ฌ ๋ฃจํ) |
T โ { } |
์ partition ์ ์ฅ์ฉ ์ด๊ธฐํ |
T โ T โช Split(p) |
p๋ฅผ ์ชผ๊ฐ์ T์ ๋ฃ์ |
P โ T |
์ partition์ผ๋ก ๊ฐฑ์ |
if ฮฑ splits p into p1, p2 |
ฮฑ๋ก ์ชผ๊ฐ์ง๋ฉด ๋ ์งํฉ ๋ฐํ |
return p |
์ ์ชผ๊ฐ์ง๋ฉด ๊ทธ๋๋ก ๋ฐํ |
๊ทธ๋ฆผ: ์์ DFA โ (a|b)*abb
์ด๊ธฐ partition:
P0 = { {s4}, {s0,s1,s2,s3} }
- accept: {s4}
- non-accept: {s0,s1,s2,s3}
๐ 15ํ์ด์ง โ ์๊ณ ๋ฆฌ์ฆ ์์ ์ํ
ํ์ฌ ์ํ
P0 = { {s4}, {s0,s1,s2,s3} }
T = {}
๊ทธ๋ฆผ ์ค๋ช
- ์์ง ์๋ฌด๊ฒ๋ ๋ถํ ์ ํ ์ด๊ธฐ ์ํ
- ์ฒ๋ฆฌ ์์:
- p = {s4}
- p = {s0,s1,s2,s3}
๐ 16ํ์ด์ง โ ์ฒซ ๋ฒ์งธ ์งํฉ ์ฒ๋ฆฌ ์์
ํ์ฌ ์ํ
P0 = { {s4}, {s0,s1,s2,s3} }
T = { }
p = {s4}
โ = {a, b}
์ง๊ธ ํ๋ ๊ฒ: p = {s4}๋ฅผ ์ชผ๊ฐค ์ ์๋์ง ํ์ธ
๊ทธ๋ฆผ ์ค๋ช
- DFA ๊ตฌ์กฐ ๊ทธ๋๋ก ์ ์ง
- s4๋ accept ์ํ
- ๋จ์ผ ์ํ ์งํฉ
๐ 17ํ์ด์ง โ Split ํจ์ ์ค๋ช
Invoke Split(p) function
Split(p) ํจ์ ์คํ
โDetermines whether p can be splitโ
p๋ฅผ ๋๋ ์ ์๋์ง ํ๋จ
โIf states can be distinguishable by ฮฑโ
์ ๋ ฅ ฮฑ๋ก ๊ตฌ๋ณ ๊ฐ๋ฅํ๋ฉด ๋ถํ
ํต์ฌ ํ๋จ ๊ธฐ์ค:
- ๊ฐ์ ์งํฉ ์์์
- ์ด๋ค ์ ๋ ฅ ๋ฃ์์ ๋
- ๋ค๋ฅธ ์งํฉ์ผ๋ก ๊ฐ๋ฉด โ ์ชผ๊ฐ ๋ค
โIf X and Y are two states in a DFA, we can combine them when they are not distinguishableโ
๋ ์ํ๊ฐ ๊ตฌ๋ณ๋์ง ์์ผ๋ฉด ํ๋๋ก ํฉ์น ์ ์๋ค โ minimization์ ๋ชฉ์
๐ 18ํ์ด์ง โ ฮฑ = a ๊ฒ์ฌ
ฮฑ = a
์ ๋ ฅ a๋ก ๊ฒ์ฌ
โDoes a split p = {s4}?โ
a๋ก {s4}๋ฅผ ์ชผ๊ฐค ์ ์๋๊ฐ?
ํ์ฌ p = {s4} โ ์ํ๊ฐ ํ๋๋ฟ์
๊ฒฐ๋ก : ์ ๋ ๋ชป ์ชผ๊ฐฌ
์ชผ๊ฐ๋ ค๋ฉด ์ต์ 2๊ฐ ์ํ ํ์
๐ 19ํ์ด์ง โ ฮฑ = a ๊ฒฐ๊ณผ
๊ฒฐ๋ก
โAre there any two subsets distinguishable?โ
๊ตฌ๋ณ ๊ฐ๋ฅํ ๋ ์ํ๊ฐ ์๋๊ฐ?
โNopeโ
์๋ค
โ(we cannot split a set which has a single elementโฆ)โ
์์ ํ๋์ง๋ฆฌ ์งํฉ์ ์ชผ๊ฐค ์ ์๋ค
โญ **์ํ ํฌ์ธํธ: p = 1 โ split ๋ถ๊ฐ๋ฅ**
๐ 20ํ์ด์ง โ ฮฑ = b ๊ฒ์ฌ
ฮฑ = b
์ ๋ ฅ b๋ก ๊ฒ์ฌ
โDoes b split p = {s4}?โ
b๋ก ์ชผ๊ฐค ์ ์๋๊ฐ?
โNopeโ
๋ถ๊ฐ๋ฅ
์ด์ ๋์ผ:
- p = {s4}
- ์์ 1๊ฐ
- ๋ฌด์กฐ๊ฑด ์ ์ง
๊ฒฐ๊ณผ
Split({s4}) = {s4}
T = { {s4} }
๐ 21ํ์ด์ง โ ๋ค์ ์งํฉ ์ฒ๋ฆฌ ์ค๋น
ํ์ฌ ์ํ
P0 = { {s4}, {s0,s1,s2,s3} }
T = { {s4} }
p = {s0,s1,s2,s3}
s4๋ ์ด๋ฏธ ์ฒ๋ฆฌ ์๋ฃ, ์ด์ ํฐ ์งํฉ ์ฒ๋ฆฌ ์์
โ = {a, b}
์ด ์งํฉ์์ split์ด ์ค์ ๋ก ๋ฐ์ํ๋ค
๐ 22ํ์ด์ง โ Split ์ค๋น ์ํ
ํ์ฌ T
T = { } โช Split({s4}) = { {s4} }
T์ {s4} ์ถ๊ฐ ์๋ฃ
์ด์ ํด์ผ ํ ๊ฒ
Split({s0,s1,s2,s3})
์ง๊ธ๋ถํฐ๊ฐ ์ง์ง minimization ํต์ฌ
๐ 23ํ์ด์ง โ ์งํฉ ์ฒ๋ฆฌ ์์
ํ์ฌ ์ํ
T = { {s4} }
p = {s0,s1,s2,s3}
โ = {a, b}
์ ๋ ฅ a, b๋ก ๊ฐ๊ฐ ๊ฒ์ฌ ์์
๐ 24ํ์ด์ง โ ฮฑ ์ ํ ์ค๋น
ฮฑ = ?
์ด๋ค ์ ๋ ฅ์ผ๋ก ๊ฒ์ฌํ ์ง ์ ํ
์์๋๋ก ์งํ:
- ฮฑ = a ๊ฒ์ฌ
- ฮฑ = b ๊ฒ์ฌ
๐ 25ํ์ด์ง โ ฮฑ = a ๊ฒ์ฌ ์์
ฮฑ = a
์ ๋ ฅ a๋ก ๊ฒ์ฌ
๊ฐ ์ํ์ a ์ด๋
| ์ํ | a ์ด๋ |
|---|---|
| s0 | s1 |
| s1 | s1 |
| s2 | s1 |
| s3 | s1 |
๊ฒฐ๊ณผ ๋ถ์
๋ชจ๋ ์ํ โ s1 โ ๋์ผ behavior
๊ฒฐ๋ก : ฮฑ = a๋ก๋ split ๋ถ๊ฐ๋ฅ
์ด์ :
- ๊ฐ์ partition ๋ด๋ถ๋ก๋ง ์ด๋
- ๊ตฌ๋ณ ์ ๋จ
๐ 26ํ์ด์ง โ ฮฑ = a ์ต์ข ํ์ธ
ฮฑ = a
๊ฐ ์ํ์ a ์ด๋ (์ฌํ์ธ)
| ์ํ | a ์ด๋ |
|---|---|
| s0 | s1 |
| s1 | s1 |
| s2 | s1 |
| s3 | s1 |
โSplit on a: Noneโ
a๋ก๋ ๋ถํ ์์
์ด์ :
- ๊ฐ์ partition ๋ด๋ถ๋ก๋ง ์ด๋
- ๊ตฌ๋ณ ๋ถ๊ฐ
- split ์์
๐ 27ํ์ด์ง โ ฮฑ = a ๊ฒฐ๋ก ํ์
Noneโฆ
๋ถํ ์์
๊ฐ์ ์งํฉ ์์์ ๊ฐ์ ํ๋ โ ์ ์ง
๋ค์ ๋จ๊ณ: ฮฑ = b ๊ฒ์ฌ๋ก ์ด๋
๐ 28ํ์ด์ง โ ๐ฅ ฮฑ = b์์ split ๋ฐ์ (์ํ ํต์ฌ)
ฮฑ = b
์ ๋ ฅ b๋ก ๊ฒ์ฌ
๊ฐ ์ํ์ b ์ด๋
| ์ํ | b ์ด๋ | ์ํ๋ partition |
|---|---|---|
| s0 | s2 | {s0,s1,s2,s3} |
| s1 | s3 | {s0,s1,s2,s3} |
| s2 | s2 | {s0,s1,s2,s3} |
| s3 | s4 | {s4} โ ๋ค๋ฅธ ๊ทธ๋ฃน! |
๊ฒฐ์ ์ ์ฐจ์ด
- s3 โ {s4} (accept group)
- ๋๋จธ์ง โ non-accept group
โ split ๋ฐ์!
๐ 29ํ์ด์ง โ Split ๊ฒฐ๊ณผ ๋ฐํ
Return s0,s1,s2 , s3
์งํฉ์ ๋ ๊ฐ๋ก ๋๋ ์ ๋ฐํ
๊ทธ๋ฆผ ์๋ฏธ
๊ธฐ์กด: {s0,s1,s2,s3}
โ ์ด์ : {s0,s1,s2} / {s3}
์ด๊ฒ minimization์ ํต์ฌ ๊ฒฐ๊ณผ
๐ 30ํ์ด์ง โ Partition ์ ๋ฐ์ดํธ
Split ๊ฒฐ๊ณผ
Split(p) = s0,s1,s}, s3
T ์ ๋ฐ์ดํธ
๊ธฐ์กด: T = { {s4} }
์
๋ฐ์ดํธ ํ: T = { {s4}, {s0,s1,s2}, {s3} }
Partition ๋ณํ
P0 = { {s4}, {s0,s1,s2,s3} }
โ (split ๋ฐ์ ํ)
P1 = { {s4}, {s0,s1,s2}, {s3} }
๐ 31ํ์ด์ง โ Partition ์ ๋ฐ์ดํธ ์๋ฃ ์ํ
ํ์ฌ ์ํ
P = { {s4}, {s0,s1,s2}, {s3} }
T = { {s4}, {s0,s1,s2}, {s3} }
1์ฐจ split ์๋ฃ โ partition 3๊ฐ๋ก ์ฆ๊ฐ
์ด์ ๋ถํฐ: ๊ฐ ์งํฉ์ ๋ค์ ๊ฒ์ฌ ์์
๐ 32ํ์ด์ง โ ๋ค์ iteration ์์
P1
P1 = { {s4}, {s0,s1,s2}, {s3} }
while loop ๊ณ์
partition์ด ๋ณํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต ์กฐ๊ฑด ๋ง์กฑ โ ๊ณ์
โ fixed-point ์์ง ์๋
๐ 33ํ์ด์ง โ ๋ค์ ์ฒ๋ฆฌ ์ค๋น
๋ค์ ์งํฉ ์ํ ์ค๋น
์์:
- {s4}
- {s0,s1,s2}
- {s3}
๐ 34ํ์ด์ง โ ์ iteration ์ด๊ธฐํ
T = { }
์ partition ์ด๊ธฐํ
์ด์ P๋ฅผ ๋ค์ ์ชผ๊ฐ๊ธฐ ์์
๐ 35ํ์ด์ง โ ๐ฅ 2์ฐจ split ๋ฐ์
ํ์ฌ ์ํ
P1 = { {s0,s1,s2}, {s3}, {s4} }
p = {s0,s1,s2}
ฮฑ = b ๊ฒ์ฌ
๊ฐ ์ํ์ b ์ด๋:
| ์ํ | b ์ด๋ | ์ํ๋ partition |
|---|---|---|
| s0 | s2 | {s0,s1,s2} |
| s1 | s3 | {s3} โ ๋ค๋ฅธ ๊ทธ๋ฃน! |
| s2 | s2 | {s0,s1,s2} |
๊ฒฐ์ ์ ์ฐจ์ด
- s1 โ {s3}
- s0, s2 โ {s0,s1,s2}
โ split ๋ฐ์!
๊ฒฐ๊ณผ
{s0,s2} / {s1}
Partition ์ ๋ฐ์ดํธ
P1 = { {s4}, {s0,s1,s2}, {s3} }
โ (2์ฐจ split ๋ฐ์)
P2 = { {s4}, {s0,s2}, {s1}, {s3} }
๐ 36ํ์ด์ง โ Partition ํ์ ์ํ
ํ์ฌ ์ํ
์ด์ : T = { {s4} }
2์ฐจ split ํ: T = { {s4}, {s0,s2}, {s1}, {s3} }
์ด์ partition 4๊ฐ:
- ๊ฐ ์ํ ๊ฑฐ์ ๋ค ๋ถ๋ฆฌ๋จ
๐ 37ํ์ด์ง โ P2 ์ํ ์ ์ง
P2
P2 = { {s0,s2}, {s1}, {s3}, {s4} }
T = ๋์ผ
๋ ์ด์ ๋ณํ ์์
์ค์ํ ์ ํธ: split ๋ ์ด์ ์์
๐ 38ํ์ด์ง โ iteration ํ์ธ
1st iter / 2nd / 3rd / 4thโฆ
์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํด์ ํ์ธํ์ง๋ง:
- partition ๋ณํ ์์
fixed-point ๋๋ฌ
๐ 39ํ์ด์ง โ ์ต์ข ํ์ธ
P2 ์ ์ง
P2 = { {s0,s2}, {s1}, {s3}, {s4} }
๋ ์ด์ split ๋ถ๊ฐ๋ฅ
๋ชจ๋ ์ํ๊ฐ distinguishable ์ํ๋ก ๋ถ๋ฆฌ ์๋ฃ
๐ 40ํ์ด์ง โ ์๊ณ ๋ฆฌ์ฆ ์ข ๋ฃ
While loop comes to a halt
while ๋ฃจํ ์ข ๋ฃ
โP does not be changedโ
partition์ด ๋ ์ด์ ๋ณํ์ง ์๋๋ค โ ์ข ๋ฃ ์กฐ๊ฑด ๋ง์กฑ
์ต์ข ์ํ
P2 = { {s0,s2}, {s1}, {s3}, {s4} }
s0์ s2๋ ์์ ํ ๋์ผํ behavior:
- ์ด๋ค ์ ๋ ฅ ๋ฃ์ด๋ ๋์ผํ๊ฒ ํ๋
- โ ํฉ์ณ๋ ๋ฌธ์ ์์
๐ 41ํ์ด์ง โ ์ต์ DFA ๊ฒฐ๊ณผ
์ต์ข Partition
P = { {s0,s2}, {s1}, {s3}, {s4} }
๊ฐ partition์ด ํ๋์ ์ํ๊ฐ ๋๋ค:
- {s0,s2} โ ํ๋์ ์ํ
- {s1} โ ํ๋์ ์ํ
- {s3} โ ํ๋์ ์ํ
- {s4} โ ํ๋์ ์ํ
๊ทธ๋ฆผ ์ค๋ช
- ๊ธฐ์กด DFA โ ์ต์ DFA ๋ณํ
- s0, s2 โ ํฉ์ณ์ง
- ๋๋จธ์ง๋ ๊ทธ๋๋ก
๊ฐ์ behavior โ ํ๋๋ก ํฉ์นจ
๐ 42ํ์ด์ง โ ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฃ๋๋๊ฐ?
Why does this terminate?
โp โ 2^Sโ
partition์ ์ํ ์งํฉ์ ๋ถ๋ถ์งํฉ โ ๊ฐ๋ฅํ partition ์๋ ์ ํ
โStart with 2 subsetsโ
์ฒ์์ F / S-F 2๊ฐ๋ก ์์
โWhile loop takes Pi โ Pi+1โ
๋ฐ๋ณตํ๋ฉด์ partition์ด ์ ์ ์ชผ๊ฐ์ง
โPi+1 is closer to |S| setsโ
์ ์ ์ํ ๊ฐ์๋งํผ ์ชผ๊ฐ์ง
โMaximum of S splitsโ **์ต๋ S ๋ฒ๋ง split ๊ฐ๋ฅ**
โPartitions are never combinedโ
ํฉ์ณ์ง๋ ์ผ์ ์์ โ ์ค์ง split๋ง ์กด์ฌ
โalgorithm eventually terminatesโ
๊ฒฐ๊ตญ ์ข ๋ฃ๋๋ค
ํต์ฌ: ์ ํ + split๋ง ์์ โ ๋ฐ๋์ ์ข ๋ฃ
๐ 43ํ์ด์ง โ ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ๋ฐ๋ฅธ๊ฐ?
Why does this work?
โmaintains 2 invariantsโ
๋ ๊ฐ์ง ๋ถ๋ณ ์กฐ๊ฑด ์ ์ง
| ๋ถ๋ณ ์กฐ๊ฑด | ์๋ฏธ |
|---|---|
| same set โ not distinguished | ๊ฐ์ ์งํฉ์ ์์ผ๋ฉด ์์ง ๊ตฌ๋ณ ์ ๋จ |
| different sets โ distinguishable | ๋ค๋ฅธ ์งํฉ์ด๋ฉด ๊ตฌ๋ณ ๊ฐ๋ฅ |
ํต์ฌ ๋ณด์ฅ: ๊ฐ์ ์งํฉ = ๊ฐ์ ์ํ๋ก ํฉ์ณ๋ ์์
โfinal partitionโ
์ต์ข partition์ ๊ตฌ๋ณ ๊ฐ๋ฅํ ์ํ ์งํฉ
โProof sketchโ
์ฆ๋ช ์ ๊ต์ฌ ์ฐธ๊ณ
partition ๊ตฌ์กฐ ์์ฒด๊ฐ ์ ๋ต์ ๋ณด์ฅํ๋ค.
๐ 44ํ์ด์ง โ ์ต์ข ๊ฒฐ๊ณผ + ์ง๊ด
DFA Minimization Example
โApplying the minimization algorithmโ
์๊ณ ๋ฆฌ์ฆ ์ ์ฉ ๊ฒฐ๊ณผ
โproduce minimal DFAโ
์ต์ DFA ์์ฑ
๊ทธ๋ฆผ ์ค๋ช (๋ DFA ๋น๊ต)
- ์ผ์ชฝ: ๋ณต์กํ DFA
- ์ค๋ฅธ์ชฝ: ์ต์ DFA
โhuman would design a simpler automatonโ
์ฌ๋์ ๋ ๋จ์ํ ์คํ ๋งํ๋ฅผ ๋ง๋ ๋ค
์๊ณ ๋ฆฌ์ฆ์ด ๊ฒฐ๊ตญ ์ฌ๋์ด ์ง๊ด์ ์ผ๋ก ๋ง๋ ๊ฒ๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ค.
โevery RE language can be recognized by a minimal DFAโ
๋ชจ๋ ์ ๊ทํํ์์ ์ต์ DFA๋ก ํํ ๊ฐ๋ฅ
โunique up to state namesโ
์ํ ์ด๋ฆ๋ง ๋ค๋ฅด๊ณ ๊ตฌ์กฐ๋ ์ ์ผ
โญ ๋งค์ฐ ์ค์: ์ต์ DFA๋ โ์ ์ผํ๋คโ
๐ 45ํ์ด์ง โ ์๊ณ ๋ฆฌ์ฆ ํํ ์ฌ์ ๋ฆฌ
์๊ณ ๋ฆฌ์ฆ ์ฌ์ ๋ฆฌ
P โ { F, S-F }
while (P is changing)
Split(p)
โ = {a, b, c, ...}
์ ์ฒด ์๊ณ ๋ฆฌ์ฆ ๊ตฌ์กฐ๋ฅผ ๋ค์ ํ๋ฒ ํ์ธํ๋ ์ฌ๋ผ์ด๋.
๐ 46ํ์ด์ง โ ์ ์ฒด ๊ณผ์ ์์ฝ ํ
Partition ๋ณํ ๊ณผ์
| Partition | Split on a | Split on b | ๊ฒฐ๊ณผ |
|---|---|---|---|
| P0: {s0,s1,s2,s3} | no split | split ๋ฐ์ | โ {s0,s1,s2}, {s3} |
| P1: {s0,s1,s2} | no split | split ๋ฐ์ | โ {s0,s2}, {s1} |
| P2: {s0,s2}, {s1}, {s3}, {s4} | no split | no split | โ ์ข ๋ฃ |
๊ทธ๋ฆผ ์ค๋ช
- before DFA / after (์ต์) DFA ๋น๊ต ์๊ฐํ
๐ 47ํ์ด์ง โ ์ต์ข ์ ๋ฆฌ (Outline ์๋ฃ)
์ ์ฒด ํ๋ฆ ์๋ฃ
| ๋จ๊ณ | ์ํ |
|---|---|
| RE โ NFA | โ ์๋ฃ |
| NFA โ DFA | โ ์๋ฃ |
| DFA โ minimal DFA | โ ์๋ฃ |
| Scanner generators | โ ๋ค์ ์ฃผ์ ๋ก ๋์ด๊ฐ |
๐ฅ ์ ์ฒด ๊ฐ์ ํต์ฌ ์์ฝ (์ํ์ฉ)
์ ์ฒด ํ๋ฆ
์ ๊ทํํ์ โ NFA โ DFA โ ์ต์ DFA
๊ฐ ๋จ๊ณ ์์ฝ
| ๋จ๊ณ | ๋ฐฉ๋ฒ | ํต์ฌ ๊ฐ๋ |
|---|---|---|
| RE โ NFA | Thompson Construction | ฮต-transition |
| NFA โ DFA | Subset Construction | ฮต-closure, Move |
| DFA โ min DFA | Partition Refinement | distinguishable |
Subset Construction ํต์ฌ
Move(T, ฮฑ): ์ํ ์งํฉ T์์ ฮฑ๋ก ์ด๋ํ๋ ์ํ๋คฮต-closure(T): ฮต ์ ์ด๋ก ๋๋ฌ ๊ฐ๋ฅํ ๋ชจ๋ ์ํ๋ค- ๋ฐ๋ณต: ๋ ์ด์ ์ํ ์ถ๊ฐ ์์ ๋๊น์ง (fixed-point)
Minimization ๊ณผ์ ๋จ๊ณ๋ณ ์์ฝ
Step 1: P0 = { {s4}, {s0,s1,s2,s3} }
Step 2: b๋ก split โ P1 = { {s4}, {s0,s1,s2}, {s3} }
Step 3: b๋ก ๋ split โ P2 = { {s4}, {s0,s2}, {s1}, {s3} }
Step 4: ๋ ์ด์ split ์์ โ ์ข
๋ฃ
โญ ๊ฐ์ฅ ์ค์ํ ๋ฌธ์ฅ (์ํ ํ ์ค ์์ฝ)
โ์ํ๊ฐ ์๋๋ผ ์ํ์ ํ๋(transition)์ ๋น๊ตํด์ ๋๋๋คโ
โญ split ์ ๋ ๋ถ๊ฐ ์กฐ๊ฑด
์งํฉ ํฌ๊ธฐ = 1 ์ด๋ฉด split ๋ถ๊ฐ๋ฅ
โญ ์ต์ DFA์ ์ ์ผ์ฑ
์ต์ DFA๋ ๊ตฌ์กฐ์ ์ผ๋ก ์ ์ผํ๋ค (unique up to state names)
Leave a comment