์ ํ ์ํ ์คํ ๋งํ(FSA)๋ฅผ ์ฌ์ฉํ ์ดํ ๋ถ์์ ๊ธฐ์ด๋ฅผ ํ๊ตฌํฉ๋๋ค. ์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ์์ ์์ค ์ฝ๋๋ฅผ ํ ํฐํํ๊ธฐ ์ํด FSA๊ฐ ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ์์๋ณด์ธ์.
์ดํ ๋ถ์: ์ ํ ์ํ ์คํ ๋งํ์ ๋ํ ์ฌ์ธต ๋ถ์
์ปดํจํฐ ๊ณผํ ๋ถ์ผ, ํนํ ์ปดํ์ผ๋ฌ ์ค๊ณ ๋ฐ ์ธํฐํ๋ฆฌํฐ ๊ฐ๋ฐ์์ ์ดํ ๋ถ์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด๋ ์ปดํ์ผ๋ฌ์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ก, ์์ค ์ฝ๋๋ฅผ ํ ํฐ ์คํธ๋ฆผ์ผ๋ก ๋ถํดํ๋ ์์ ์ ๋ด๋นํฉ๋๋ค. ์ด ๊ณผ์ ์๋ ํค์๋, ์ฐ์ฐ์, ์๋ณ์, ๋ฆฌํฐ๋ด์ ์๋ณํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. ์ดํ ๋ถ์์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ ํ ์ํ ์คํ ๋งํ(FSA) ๋๋ ์ ํ ์คํ ๋งํ(FA)๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ํ ํฐ์ ์ธ์ํ๊ณ ๋ถ๋ฅํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ธ์์๋ FSA๋ฅผ ์ฌ์ฉํ ์ดํ ๋ถ์์ ์๋ฆฌ, ์ ์ฉ ๋ฐ ์ฅ์ ์ ๋ค๋ฃจ๋ฉฐ ์ข ํฉ์ ์ผ๋ก ํ๊ตฌํฉ๋๋ค.
์ดํ ๋ถ์์ด๋ ๋ฌด์์ธ๊ฐ?
์ค์บ๋ ๋๋ ํ ํฐํ๋ผ๊ณ ๋ ํ๋ ์ดํ ๋ถ์์ ๋ฌธ์ ์ํ์ค(์์ค ์ฝ๋)๋ฅผ ํ ํฐ ์ํ์ค๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋๋ค. ๊ฐ ํ ํฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์๋ฏธ ์๋ ๋จ์๋ฅผ ๋ํ๋ ๋๋ค. ์ดํ ๋ถ์๊ธฐ(๋๋ ์ค์บ๋)๋ ์์ค ์ฝ๋๋ฅผ ๋ฌธ์ ๋จ์๋ก ์ฝ๊ณ ์ด๋ฅผ ์ดํ์(lexeme)๋ก ๊ทธ๋ฃนํํ ๋ค์ ํ ํฐ์ผ๋ก ๋งคํํฉ๋๋ค. ํ ํฐ์ ์ผ๋ฐ์ ์ผ๋ก ํ ํฐ ์ ํ(์: IDENTIFIER, INTEGER, KEYWORD)๊ณผ ํ ํฐ ๊ฐ(์: "variableName", "123", "while")์ ์์ผ๋ก ํํ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์ ์ฝ๋ ๋ผ์ธ์ ์๊ฐํด ๋ณด์ธ์:
int count = 0;
์ดํ ๋ถ์๊ธฐ๋ ์ด๋ฅผ ๋ค์๊ณผ ๊ฐ์ ํ ํฐ์ผ๋ก ๋ถํดํฉ๋๋ค:
- ํค์๋: int
- ์๋ณ์: count
- ์ฐ์ฐ์: =
- ์ ์: 0
- ๊ตฌ๋์ : ;
์ ํ ์ํ ์คํ ๋งํ(FSA)
์ ํ ์ํ ์คํ ๋งํ(FSA)๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋ ๊ณ์ฐ์ ์ํ์ ๋ชจ๋ธ์ ๋๋ค:
- ์ ํํ ์ํ์ ์งํฉ: FSA๋ ์ธ์ ๋ ์ง ์ ํํ ์์ ์ํ ์ค ํ๋์ ์์ ์ ์์ต๋๋ค.
- ์ ํํ ์ ๋ ฅ ๊ธฐํธ์ ์งํฉ(์ํ๋ฒณ): FSA๊ฐ ์ฝ์ ์ ์๋ ๊ธฐํธ์ ๋๋ค.
- ์ ์ด ํจ์: ์ด ํจ์๋ FSA๊ฐ ์ฝ๋ ์ ๋ ฅ ๊ธฐํธ์ ๋ฐ๋ผ ํ ์ํ์์ ๋ค๋ฅธ ์ํ๋ก ์ด๋ป๊ฒ ์ด๋ํ๋์ง๋ฅผ ์ ์ํฉ๋๋ค.
- ์์ ์ํ: FSA๊ฐ ์์๋๋ ์ํ์ ๋๋ค.
- ์์ฉ (๋๋ ์ต์ข ) ์ํ์ ์งํฉ: ์ ์ฒด ์ ๋ ฅ์ ์ฒ๋ฆฌํ ํ FSA๊ฐ ์ด๋ฌํ ์ํ ์ค ํ๋์์ ๋๋๋ฉด ์ ๋ ฅ์ด ์์ฉ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
FSA๋ ์ข ์ข ์ํ ๋ค์ด์ด๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ์๊ฐ์ ์ผ๋ก ํํ๋ฉ๋๋ค. ์ํ ๋ค์ด์ด๊ทธ๋จ์์:
- ์ํ๋ ์์ผ๋ก ํ์๋ฉ๋๋ค.
- ์ ์ด๋ ์ ๋ ฅ ๊ธฐํธ๊ฐ ํ์๋ ํ์ดํ๋ก ํ์๋ฉ๋๋ค.
- ์์ ์ํ๋ ๋ค์ด์ค๋ ํ์ดํ๋ก ํ์๋ฉ๋๋ค.
- ์์ฉ ์ํ๋ ์ด์ค ์์ผ๋ก ํ์๋ฉ๋๋ค.
๊ฒฐ์ ์ FSA์ ๋น๊ฒฐ์ ์ FSA
FSA๋ ๊ฒฐ์ ์ (DFA)์ด๊ฑฐ๋ ๋น๊ฒฐ์ ์ (NFA)์ผ ์ ์์ต๋๋ค. DFA์์๋ ๊ฐ ์ํ์ ์ ๋ ฅ ๊ธฐํธ์ ๋ํด ๋ค๋ฅธ ์ํ๋ก์ ์ ์ด๊ฐ ์ ํํ ํ๋๋ง ์์ต๋๋ค. NFA์์๋ ์ฃผ์ด์ง ์ ๋ ฅ ๊ธฐํธ์ ๋ํด ํ ์ํ์์ ์ฌ๋ฌ ๊ฐ์ ์ ์ด๊ฐ ์์ ์ ์๊ฑฐ๋ ์ ๋ ฅ ๊ธฐํธ ์์ด ์ ์ด(ฮต-์ ์ด)๊ฐ ์์ ์ ์์ต๋๋ค.
NFA๊ฐ ๋ ์ ์ฐํ๊ณ ๋๋ก๋ ์ค๊ณํ๊ธฐ ์ฝ์ง๋ง, DFA๋ ๊ตฌํํ๊ธฐ์ ๋ ํจ์จ์ ์ ๋๋ค. ๋ชจ๋ NFA๋ ๋๋ฑํ DFA๋ก ๋ณํ๋ ์ ์์ต๋๋ค.
์ดํ ๋ถ์์ FSA ์ฌ์ฉํ๊ธฐ
FSA๋ ์ ๊ท ์ธ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ์ธ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ดํ ๋ถ์์ ๋งค์ฐ ์ ํฉํฉ๋๋ค. ์ ๊ท ํํ์์ ์ผ๋ฐ์ ์ผ๋ก ํ ํฐ์ ํจํด์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๋ชจ๋ ์ ๊ท ํํ์์ ๋๋ฑํ FSA๋ก ๋ณํ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ดํ ๋ถ์๊ธฐ๋ ์ด๋ฌํ FSA๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ์ ์ค์บํ๊ณ ํ ํฐ์ ์๋ณํฉ๋๋ค.
์์: ์๋ณ์ ์ธ์
์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์๋ก ์์ํ๊ณ ๊ทธ ๋ค์ ๋ฌธ์๋ ์ซ์๊ฐ ์ฌ ์ ์๋ ์๋ณ์๋ฅผ ์ธ์ํ๋ ์์ ์ ์๊ฐํด ๋ด ์๋ค. ์ด์ ๋ํ ์ ๊ท ํํ์์ `[a-zA-Z][a-zA-Z0-9]*`๊ฐ ๋ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์๋ณ์๋ฅผ ์ธ์ํ๊ธฐ ์ํด FSA๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
FSA๋ ๋ค์๊ณผ ๊ฐ์ ์ํ๋ฅผ ๊ฐ์ง๋๋ค:
- ์ํ 0 (์์ ์ํ): ์ด๊ธฐ ์ํ.
- ์ํ 1: ์์ฉ ์ํ. ์ฒซ ๋ฌธ์๋ฅผ ์ฝ์ ํ ๋๋ฌํฉ๋๋ค.
์ ์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ํ 0์์ ๋ฌธ์(a-z ๋๋ A-Z) ์ ๋ ฅ ์ ์ํ 1๋ก ์ ์ดํฉ๋๋ค.
- ์ํ 1์์ ๋ฌธ์(a-z ๋๋ A-Z) ๋๋ ์ซ์(0-9) ์ ๋ ฅ ์ ์ํ 1๋ก ์ ์ดํฉ๋๋ค.
์ ๋ ฅ์ ์ฒ๋ฆฌํ ํ FSA๊ฐ ์ํ 1์ ๋๋ฌํ๋ฉด ์ ๋ ฅ์ ์๋ณ์๋ก ์ธ์๋ฉ๋๋ค.
์์: ์ ์ ์ธ์
๋ง์ฐฌ๊ฐ์ง๋ก ์ ์๋ฅผ ์ธ์ํ๊ธฐ ์ํด FSA๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ ์์ ๋ํ ์ ๊ท ํํ์์ `[0-9]+`(ํ๋ ์ด์์ ์ซ์)์ ๋๋ค.
FSA๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ํ 0 (์์ ์ํ): ์ด๊ธฐ ์ํ.
- ์ํ 1: ์์ฉ ์ํ. ์ฒซ ์ซ์๋ฅผ ์ฝ์ ํ ๋๋ฌํฉ๋๋ค.
์ ์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ํ 0์์ ์ซ์(0-9) ์ ๋ ฅ ์ ์ํ 1๋ก ์ ์ดํฉ๋๋ค.
- ์ํ 1์์ ์ซ์(0-9) ์ ๋ ฅ ์ ์ํ 1๋ก ์ ์ดํฉ๋๋ค.
FSA๋ก ์ดํ ๋ถ์๊ธฐ ๊ตฌํํ๊ธฐ
์ดํ ๋ถ์๊ธฐ๋ฅผ ๊ตฌํํ๋ ๋ฐ๋ ๋ค์ ๋จ๊ณ๊ฐ ํฌํจ๋ฉ๋๋ค:
- ํ ํฐ ์ ํ ์ ์: ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ชจ๋ ํ ํฐ ์ ํ(์: KEYWORD, IDENTIFIER, INTEGER, OPERATOR, PUNCTUATION)์ ์๋ณํฉ๋๋ค.
- ๊ฐ ํ ํฐ ์ ํ์ ๋ํ ์ ๊ท ํํ์ ์์ฑ: ์ ๊ท ํํ์์ ์ฌ์ฉํ์ฌ ๊ฐ ํ ํฐ ์ ํ์ ๋ํ ํจํด์ ์ ์ํฉ๋๋ค.
- ์ ๊ท ํํ์์ FSA๋ก ๋ณํ: ๊ฐ ์ ๊ท ํํ์์ ๋๋ฑํ FSA๋ก ๋ณํํฉ๋๋ค. ์ด๋ ์๋์ผ๋ก ์ํํ๊ฑฐ๋ Flex(Fast Lexical Analyzer Generator)์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ ์ ์์ต๋๋ค.
- FSA๋ค์ ๋จ์ผ FSA๋ก ๊ฒฐํฉ: ๋ชจ๋ FSA๋ฅผ ๋ชจ๋ ํ ํฐ ์ ํ์ ์ธ์ํ ์ ์๋ ๋จ์ผ FSA๋ก ๊ฒฐํฉํฉ๋๋ค. ์ด๋ ์ข ์ข FSA์ ๋ํ ํฉ์งํฉ ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค.
- ์ดํ ๋ถ์๊ธฐ ๊ตฌํ: ๊ฒฐํฉ๋ FSA๋ฅผ ์๋ฎฌ๋ ์ด์ ํ์ฌ ์ดํ ๋ถ์๊ธฐ๋ฅผ ๊ตฌํํฉ๋๋ค. ์ดํ ๋ถ์๊ธฐ๋ ์ ๋ ฅ์ ๋ฐ๋ผ ๋ฌธ์๋ฅผ ํ๋์ฉ ์ฝ๊ณ ์ํ ๊ฐ์ ์ ์ดํฉ๋๋ค. FSA๊ฐ ์์ฉ ์ํ์ ๋๋ฌํ๋ฉด ํ ํฐ์ด ์ธ์๋ฉ๋๋ค.
์ดํ ๋ถ์์ ์ํ ๋๊ตฌ
์ดํ ๋ถ์ ๊ณผ์ ์ ์๋ํํ๋ ์ฌ๋ฌ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ์ผ๋ฐ์ ์ผ๋ก ํ ํฐ ์ ํ๊ณผ ํด๋น ์ ๊ท ํํ์์ ์ฌ์์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ดํ ๋ถ์๊ธฐ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ๋ช ๊ฐ์ง ์ธ๊ธฐ ์๋ ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Flex: ๋น ๋ฅธ ์ดํ ๋ถ์๊ธฐ ์์ฑ๊ธฐ์ ๋๋ค. ์ ๊ท ํํ์์ด ํฌํจ๋ ์ฌ์ ํ์ผ์ ๋ฐ์ ์ดํ ๋ถ์๊ธฐ๋ฅผ ์ํ C ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
- Lex: Flex์ ์ ์ ์ ๋๋ค. Flex์ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ์ง๋ง ํจ์จ์ฑ์ ๋จ์ด์ง๋๋ค.
- ANTLR: ์ดํ ๋ถ์์๋ ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ ฅํ ํ์ ์์ฑ๊ธฐ์ ๋๋ค. Java, C++, Python์ ํฌํจํ ์ฌ๋ฌ ๋์ ์ธ์ด๋ฅผ ์ง์ํฉ๋๋ค.
์ดํ ๋ถ์์ FSA๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฅ์
์ดํ ๋ถ์์ FSA๋ฅผ ์ฌ์ฉํ๋ฉด ๋ช ๊ฐ์ง ์ฅ์ ์ด ์์ต๋๋ค:
- ํจ์จ์ฑ: FSA๋ ์ ๊ท ์ธ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ์ธ์ํ ์ ์์ด ์ดํ ๋ถ์์ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ญ๋๋ค. FSA ์๋ฎฌ๋ ์ด์ ์ ์๊ฐ ๋ณต์ก๋๋ ์ผ๋ฐ์ ์ผ๋ก O(n)์ด๋ฉฐ, ์ฌ๊ธฐ์ n์ ์ ๋ ฅ์ ๊ธธ์ด์ ๋๋ค.
- ๋จ์์ฑ: FSA๋ ๋น๊ต์ ์ดํดํ๊ณ ๊ตฌํํ๊ธฐ ์ฌ์ ์ดํ ๋ถ์์ ์ข์ ์ ํ์ ๋๋ค.
- ์๋ํ: Flex ๋ฐ Lex์ ๊ฐ์ ๋๊ตฌ๋ ์ ๊ท ํํ์์์ FSA๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ ์๋ํํ์ฌ ์ดํ ๋ถ์๊ธฐ ๊ฐ๋ฐ์ ๋์ฑ ๋จ์ํํ ์ ์์ต๋๋ค.
- ์ ์ ์๋ ์ด๋ก : FSA์ ๊ธฐ๋ฐ์ด ๋๋ ์ด๋ก ์ ์ ์ ์๋์ด ์์ด ์๊ฒฉํ ๋ถ์๊ณผ ์ต์ ํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๊ณผ์ ๋ฐ ๊ณ ๋ ค์ฌํญ
FSA๋ ์ดํ ๋ถ์์ ๊ฐ๋ ฅํ์ง๋ง ๋ช ๊ฐ์ง ๊ณผ์ ์ ๊ณ ๋ ค์ฌํญ๋ ์์ต๋๋ค:
- ์ ๊ท ํํ์์ ๋ณต์ก์ฑ: ๋ณต์กํ ํ ํฐ ์ ํ์ ๋ํ ์ ๊ท ํํ์์ ์ค๊ณํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ๋ชจํธ์ฑ: ์ ๊ท ํํ์์ ๋ชจํธํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋จ์ผ ์ ๋ ฅ์ด ์ฌ๋ฌ ํ ํฐ ์ ํ๊ณผ ์ผ์นํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ดํ ๋ถ์๊ธฐ๋ "๊ฐ์ฅ ๊ธด ์ผ์น" ๋๋ "์ฒซ ๋ฒ์งธ ์ผ์น"์ ๊ฐ์ ๊ท์น์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๋ชจํธ์ฑ์ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
- ์ค๋ฅ ์ฒ๋ฆฌ: ์ดํ ๋ถ์๊ธฐ๋ ์๊ธฐ์น ์์ ๋ฌธ์๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ์ ์ค๋ฅ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
- ์ํ ํญ๋ฐ: NFA๋ฅผ DFA๋ก ๋ณํํ๋ฉด ๋๋๋ก ์ํ ํญ๋ฐ์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์ DFA์ ์ํ ์๊ฐ NFA์ ์ํ ์๋ณด๋ค ๊ธฐํ๊ธ์์ ์ผ๋ก ์ปค์ง ์ ์์ต๋๋ค.
์ค์ ์ ์ฉ ์ฌ๋ก ๋ฐ ์์
FSA๋ฅผ ์ฌ์ฉํ ์ดํ ๋ถ์์ ๋ค์ํ ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. ๋ช ๊ฐ์ง ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ
์์ ์ธ๊ธํ๋ฏ์ด ์ดํ ๋ถ์์ ์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ์ ๊ธฐ๋ณธ ๋ถ๋ถ์ ๋๋ค. ๊ฑฐ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ตฌํ์ ์ดํ ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์ค ์ฝ๋๋ฅผ ํ ํฐ์ผ๋ก ๋ถํดํฉ๋๋ค.
ํ ์คํธ ํธ์ง๊ธฐ ๋ฐ IDE
ํ ์คํธ ํธ์ง๊ธฐ์ ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ(IDE)์ ๊ตฌ๋ฌธ ๊ฐ์กฐ ๋ฐ ์ฝ๋ ์์ฑ์ ์ํด ์ดํ ๋ถ์์ ์ฌ์ฉํฉ๋๋ค. ํค์๋, ์ฐ์ฐ์ ๋ฐ ์๋ณ์๋ฅผ ์๋ณํจ์ผ๋ก์จ ์ด๋ฌํ ๋๊ตฌ๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ ์์์ผ๋ก ๊ฐ์กฐ ํ์ํ์ฌ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. ์ฝ๋ ์์ฑ ๊ธฐ๋ฅ์ ์ฝ๋์ ์ปจํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํจํ ์๋ณ์์ ํค์๋๋ฅผ ์ ์ํ๊ธฐ ์ํด ์ดํ ๋ถ์์ ์์กดํฉ๋๋ค.
๊ฒ์ ์์ง
๊ฒ์ ์์ง์ ์น ํ์ด์ง๋ฅผ ์ธ๋ฑ์ฑํ๊ณ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ดํ ๋ถ์์ ์ฌ์ฉํฉ๋๋ค. ํ ์คํธ๋ฅผ ํ ํฐ์ผ๋ก ๋ถํดํจ์ผ๋ก์จ ๊ฒ์ ์์ง์ ์ฌ์ฉ์์ ๊ฒ์๊ณผ ๊ด๋ จ๋ ํค์๋์ ๊ตฌ๋ฌธ์ ์๋ณํ ์ ์์ต๋๋ค. ์ดํ ๋ถ์์ ๋ํ ๋ชจ๋ ๋จ์ด๋ฅผ ์๋ฌธ์๋ก ๋ณํํ๊ณ ๊ตฌ๋์ ์ ์ ๊ฑฐํ๋ ๋ฑ ํ ์คํธ๋ฅผ ์ ๊ทํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ
์ดํ ๋ถ์์ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, FSA๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ด ์ด๋ฉ์ผ ์ฃผ์๋ ์ ํ๋ฒํธ์ ๊ฐ์ ํน์ ํ์๊ณผ ์ผ์นํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๊ณ ๊ธ ์ฃผ์
๊ธฐ๋ณธ ์ฌํญ ์ธ์๋ ์ดํ ๋ถ์๊ณผ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ๊ณ ๊ธ ์ฃผ์ ๊ฐ ์์ต๋๋ค:
์ ํ ํ์(Lookahead)
๋๋๋ก ์ดํ ๋ถ์๊ธฐ๋ ์ฌ๋ฐ๋ฅธ ํ ํฐ ์ ํ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ ๋ ฅ ์คํธ๋ฆผ์ ๋ฏธ๋ฆฌ ์ดํด๋ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ถ ์ธ์ด์์๋ ๋ฌธ์ ์ํ์ค `..`๊ฐ ๋ ๊ฐ์ ๊ฐ๋ณ ๋ง์นจํ์ด๊ฑฐ๋ ๋จ์ผ ๋ฒ์ ์ฐ์ฐ์์ผ ์ ์์ต๋๋ค. ์ดํ ๋ถ์๊ธฐ๋ ์ด๋ค ํ ํฐ์ ์์ฑํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ค์ ๋ฌธ์๋ฅผ ๋ด์ผ ํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ฝ์์ง๋ง ์์ง ์๋น๋์ง ์์ ๋ฌธ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค.
์ฌ๋ณผ ํ ์ด๋ธ
์ดํ ๋ถ์๊ธฐ๋ ์ข ์ข ์ฌ๋ณผ ํ ์ด๋ธ๊ณผ ์ํธ ์์ฉํ๋ฉฐ, ์ด ํ ์ด๋ธ์๋ ์๋ณ์์ ์ ํ, ๊ฐ, ๋ฒ์์ ๊ฐ์ ์ ๋ณด๊ฐ ์ ์ฅ๋ฉ๋๋ค. ์ดํ ๋ถ์๊ธฐ๊ฐ ์๋ณ์๋ฅผ ๋ง๋๋ฉด ํด๋น ์๋ณ์๊ฐ ์ด๋ฏธ ์ฌ๋ณผ ํ ์ด๋ธ์ ์๋์ง ํ์ธํฉ๋๋ค. ๋ง์ฝ ์๋ค๋ฉด, ์ดํ ๋ถ์๊ธฐ๋ ์ฌ๋ณผ ํ ์ด๋ธ์์ ์๋ณ์์ ๋ํ ์ ๋ณด๋ฅผ ๊ฒ์ํฉ๋๋ค. ์๋ค๋ฉด, ์ดํ ๋ถ์๊ธฐ๋ ์๋ณ์๋ฅผ ์ฌ๋ณผ ํ ์ด๋ธ์ ์ถ๊ฐํฉ๋๋ค.
์ค๋ฅ ๋ณต๊ตฌ
์ดํ ๋ถ์๊ธฐ๊ฐ ์ค๋ฅ๋ฅผ ๋ง๋๋ฉด ์ ์์ ์ผ๋ก ๋ณต๊ตฌํ๊ณ ์ ๋ ฅ ์ฒ๋ฆฌ๋ฅผ ๊ณ์ํด์ผ ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ค๋ฅ ๋ณต๊ตฌ ๊ธฐ์ ์๋ ์ค์ ๋๋จธ์ง ๋ถ๋ถ์ ๊ฑด๋๋ฐ๊ฑฐ๋, ๋๋ฝ๋ ํ ํฐ์ ์ฝ์ ํ๊ฑฐ๋, ๋ถํ์ํ ํ ํฐ์ ์ญ์ ํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
์ดํ ๋ถ์์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ดํ ๋ถ์ ๋จ๊ณ์ ํจ์จ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ์ฒ ์ ํ ํ ํฐ ์ ์: ๋ชจํธํ์ง ์์ ์ ๊ท ํํ์์ผ๋ก ๊ฐ๋ฅํ ๋ชจ๋ ํ ํฐ ์ ํ์ ๋ช ํํ๊ฒ ์ ์ํฉ๋๋ค. ์ด๋ ์ผ๊ด๋ ํ ํฐ ์ธ์์ ๋ณด์ฅํฉ๋๋ค.
- ์ ๊ท ํํ์ ์ต์ ํ ์ฐ์ : ์ฑ๋ฅ์ ์ํด ์ ๊ท ํํ์์ ์ต์ ํํฉ๋๋ค. ์ค์บ๋ ํ๋ก์ธ์ค๋ฅผ ๋๋ฆฌ๊ฒ ํ ์ ์๋ ๋ณต์กํ๊ฑฐ๋ ๋นํจ์จ์ ์ธ ํจํด์ ํผํ์ญ์์ค.
- ์ค๋ฅ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ: ์ธ์๋์ง ์์ ๋ฌธ์๋ ์๋ชป๋ ํ ํฐ ์ํ์ค๋ฅผ ์๋ณํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค. ์ ์ตํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ์ญ์์ค.
- ์ปจํ ์คํธ ์ธ์ ์ค์บ๋: ํ ํฐ์ด ๋ํ๋๋ ์ปจํ ์คํธ๋ฅผ ๊ณ ๋ คํ์ญ์์ค. ์ผ๋ถ ์ธ์ด์๋ ์ถ๊ฐ ๋ก์ง์ด ํ์ํ ์ปจํ ์คํธ์ ๋ฏผ๊ฐํ ํค์๋๋ ์ฐ์ฐ์๊ฐ ์์ต๋๋ค.
- ์ฌ๋ณผ ํ ์ด๋ธ ๊ด๋ฆฌ: ์๋ณ์์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๊ธฐ ์ํ ํจ์จ์ ์ธ ์ฌ๋ณผ ํ ์ด๋ธ์ ์ ์งํฉ๋๋ค. ๋น ๋ฅธ ์กฐํ ๋ฐ ์ฝ์ ์ ์ํด ์ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ์ดํ ๋ถ์๊ธฐ ์์ฑ๊ธฐ ํ์ฉ: Flex๋ Lex์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ท ํํ์ ์ฌ์์์ ์ดํ ๋ถ์๊ธฐ๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
- ์ ๊ธฐ์ ์ธ ํ ์คํธ ๋ฐ ๊ฒ์ฆ: ์ ํ์ฑ๊ณผ ๊ฒฌ๊ณ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ค์ํ ์ ๋ ฅ ํ๋ก๊ทธ๋จ์ผ๋ก ์ดํ ๋ถ์๊ธฐ๋ฅผ ์ฒ ์ ํ ํ ์คํธํฉ๋๋ค.
- ์ฝ๋ ๋ฌธ์ํ: ์ ๊ท ํํ์, ์ํ ์ ์ด ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ํฌํจํ์ฌ ์ดํ ๋ถ์๊ธฐ์ ์ค๊ณ ๋ฐ ๊ตฌํ์ ๋ฌธ์ํํฉ๋๋ค.
๊ฒฐ๋ก
์ ํ ์ํ ์คํ ๋งํ๋ฅผ ์ฌ์ฉํ ์ดํ ๋ถ์์ ์ปดํ์ผ๋ฌ ์ค๊ณ ๋ฐ ์ธํฐํ๋ฆฌํฐ ๊ฐ๋ฐ์ ๊ธฐ๋ณธ ๊ธฐ์ ์ ๋๋ค. ์์ค ์ฝ๋๋ฅผ ํ ํฐ ์คํธ๋ฆผ์ผ๋ก ๋ณํํจ์ผ๋ก์จ ์ดํ ๋ถ์๊ธฐ๋ ์ปดํ์ผ๋ฌ์ ํ์ ๋จ๊ณ์์ ์ถ๊ฐ๋ก ์ฒ๋ฆฌ๋ ์ ์๋ ์ฝ๋์ ๊ตฌ์กฐํ๋ ํํ์ ์ ๊ณตํฉ๋๋ค. FSA๋ ์ ๊ท ์ธ์ด๋ฅผ ์ธ์ํ๋ ํจ์จ์ ์ด๊ณ ์ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ์ดํ ๋ถ์์ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ๊ฐ ๋ฉ๋๋ค. ์ดํ ๋ถ์์ ์๋ฆฌ์ ๊ธฐ์ ์ ์ดํดํ๋ ๊ฒ์ ์ปดํ์ผ๋ฌ, ์ธํฐํ๋ฆฌํฐ ๋๋ ๊ธฐํ ์ธ์ด ์ฒ๋ฆฌ ๋๊ตฌ์ ๋ํด ์์ ํ๋ ๋ชจ๋ ์ฌ๋์๊ฒ ํ์์ ์ ๋๋ค. ์๋ก์ด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ฐ๋ฐํ๋ , ๋จ์ํ ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ ค๊ณ ํ๋ , ์ดํ ๋ถ์์ ๋ํ ํ์คํ ์ดํด๋ ๋งค์ฐ ์ค์ํฉ๋๋ค.