์ถ์ฒ
ChatGPT
๊ตฌ๋ฌธ ํธ๋ฆฌ(Syntax Tree)๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์์ฐ์ด ์ฒ๋ฆฌ์์ ๋ฌธ์ฅ์ ๊ตฌ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๊ณ ํํํ๋ ํธ๋ฆฌ ๊ตฌ์กฐ์ด๋ค. ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ ์ฃผ๋ก ์ปดํ์ผ๋ฌ๋ ์ธํฐํ๋ฆฌํฐ์์ ์์ค ์ฝ๋๋ฅผ ๋ถ์ํ๊ณ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ ์ค์ํ ์ญํ ์ ํ๋ค. ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ ๋ฌธ๋ฒ์ ์ดํดํ๊ณ , ์ด๋ฅผ ํตํด ์ต์ ํ, ์ฝ๋ ๋ณํ, ์ฝ๋ ์์ฑ ๋ฑ์ ์์ ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๊ตฌ๋ฌธ ํธ๋ฆฌ๋ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
1. ๊ตฌ๋ฌธ ํธ๋ฆฌ Syntax Tree : ์์ค ์ฝ๋์ ๊ตฌ๋ฌธ์ ์์๋ฅผ ๋ํ๋ธ๋ค.
2. ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ AST, Abstract Syntax Tree : ๋ถํ์ํ ์ธ๋ถ ์์๋ฅผ ์๋ตํ๊ณ , ์ค์ํ ๋ฌธ๋ฒ ๊ตฌ์กฐ๋ง์ ํํํ ํธ๋ฆฌ์ด๋ค. ์ปดํ์ผ๋ฌ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
1. ๊ตฌ๋ฌธ ํธ๋ฆฌ Concrete Syntax Tree, CST
๊ตฌ๋ฌธ ํธ๋ฆฌ๋ ์์ค ํธ๋ฆฌ๊ฐ ๋ฌธ๋ฒ์ ๋ง๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์์ค ์ฝ๋๋ฅผ ํ ํฐํ(tokenization)ํ ํ, ํ์ฑ(parsing) ๊ณผ์ ์ ํตํด ์์ฑ๋๋ฉฐ, ์์ค ์ฝ๋์ ๊ตฌ๋ฌธ์ ์ธ๋ถ ์ฌํญ์ ๋ชจ๋ ํฌํจํ๋ค. ์ฆ, ์ ๋ ฅ๋ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋ฌธ๋ฒ์ ์์๋ฅผ ์ธ๋ฐํ๊ฒ ํํํ ๊ตฌ์กฐ์ด๋ค.
ํน์ง
- ์ ํํ ๋ฌธ๋ฒ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ฉฐ, ์์ค ์ฝ๋์ ์ธ๋ถ ๋ฌธ๋ฒ ์ ๋ณด๋ฅผ ๋ชจ๋ ํฌํจํ๋ค.
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌธ๋ฒ(Grammar) ๊ท์น์ ๋ฐ๋ผ ํธ๋ฆฌ ํํ๋ก ๋ณํ๋๋ค.
- ์ธ๋ฏธ์ฝ๋ก , ๊ดํธ ๋ฑ๊ณผ ๊ฐ์ ๋ฌธ๋ฒ์ ์ธ๋ถ ์ฌํญ๋ ํฌํจ๋๋ค.
์์
๋ค์๊ณผ ๊ฐ์ ์์์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
((2 + 3) * (5 - 2))
๊ตฌ๋ฌธ ํธ๋ฆฌ๋ ๋ชจ๋ ๊ตฌ๋ฌธ์ ์ธ๋ถ์ฌํญ์ ํํํฉ๋๋ค. ์ฆ, ์ฐ์ฐ์๋ฟ๋ง ์๋๋ผ ๊ดํธ์ ๊ฐ์ ๊ตฌ๋ฌธ์ ์์๋ ํธ๋ฆฌ์ ์ผ๋ถ๋ก ํฌํจ๋ค.
(*)
/ \
( ) ( )
/ \
(+) (-)
/ \ / \
(2) (3) (5) (2)
์ฌ๊ธฐ์ ๊ดํธ๋ ์ค์ํ ๊ตฌ๋ฌธ์ ์์๋ก ํํ๋๋ฉฐ, ์ฐ์ฐ์ +์ -, ๊ทธ๋ฆฌ๊ณ ํผ์ฐ์ฐ์ 2, 3, 5๋ ๊ฐ๊ฐ ๊ดํธ ์์ ํฌํจ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด์ฒ๋ผ ๊ตฌ๋ฌธ ํธ๋ฆฌ์์๋ ๊ตฌ์ฒด์ ์ธ ๋ฌธ๋ฒ์ ๊ตฌ์กฐ๊ฐ ๋ชจ๋ ํฌํจ๋๋ค.
2. ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ AST, Abstract Syntax Tree
์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ ๊ตฌ๋ฌธ ํธ๋ฆฌ์์ ๋ถํ์ํ ์ธ๋ถ ๋ฌธ๋ฒ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ๊ณ ์ค์ํ ๊ตฌ์กฐ์ ์ ๋ณด๋ง์ ํํํ ํธ๋ฆฌ์ด๋ค. AST๋ ์ปดํ์ผ๋ฌ์์ ์์ค ์ฝ๋๋ฅผ ์ต์ ํํ๊ฑฐ๋ ์ฝ๋ ์์ฑ์ ํ๋ ๋ฐ ์ฃผ์ํ ์ญํ ์ ํ๋ค. ๊ตฌ๋ฌธ ํธ๋ฆฌ์ ๋ฌ๋ฆฌ ์ธ๋ฏธ์ฝ๋ก , ๊ดํธ ๋ฑ์ ๋ฌธ๋ฒ์ ์์๋ ์ ์ธ๋๊ณ , ์๋ฏธ ์๋ ๋ฌธ๋ฒ ์์๋ง ํฌํจ๋๋ค.
ํน์ง
- ๋ ๊ฐ๊ฒฐํ ํํ๋ก ์์ค ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ํํํ๋ค.
- ์ปดํ์ผ๋ฌ๋ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํด ์ฝ๋ ๋ถ์๊ณผ ์ต์ ํ ์์ ์ ์ํํ๋ค.
- ์ฐ์ฐ์์ ์ฐ์ ์์์ ๊ฐ์ ๊ตฌ๋ฌธ์ ์ ๋ณด๋ ํฌํจ๋์ง๋ง, ๊ดํธ๋ ์ธ๋ฏธ์ฝ๋ก ๋ฑ์ ์๋ต๋๋ค.
์์
์์์ ์ฌ์ฉํ ((2 + 3) * (5 - 2)) ๋ฅผ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ก ํํํ๋ฉด, ์ธ๋ถ ๊ตฌ๋ฌธ ์ ๋ณด๋ฅผ ์๋ตํ ํํ๋ก ํธ๋ฆฌ๋ฅผ ๊ฐ๋ตํํ ์ ์๋ค. ์ฌ๊ธฐ์๋ ๊ดํธ์ ๊ฐ์ ๊ตฌ๋ฌธ์ ์ธ๋ถ์ฌํญ์ด ์๋ต๋๋ค.
(*)
/ \
(+) (-)
/ \ / \
2 3 5 2
์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ์์๋ ๊ดํธ์ ๊ฐ์ ๋ฌธ๋ฒ์ ์ธ๋ถ์ฌํญ์ ์๋ตํ์ฌ ์ฐ์ฐ์ ํต์ฌ ๊ตฌ์กฐ๋ง์ ํํํ๋ค. 2 + 3์ 5 - 2๊ฐ ๊ฐ๊ฐ ์ฐ์ฐ์ ์์๋ง ๋ณด์กด๋์ด ํํ๋๊ณ , ๊ดํธ๋ ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฏ๋ก ์๋ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ์ฐ์ฐ์์ ํผ์ฐ์ฐ์๋ง ๋จ์ ๊ฐ๊ฒฐํ๊ฒ ํํ๋๋ค.
๊ตฌ๋ฌธ ํธ๋ฆฌ์ ์ญํ
๊ตฌ๋ฌธ ํธ๋ฆฌ๋ ์์ค ์ฝ๋ ๋ถ์์ ํต์ฌ ๋จ๊ณ๋ก, ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
1. ๋ฌธ๋ฒ ๋ถ์
์์ค ์ฝ๋๊ฐ ๋ฌธ๋ฒ์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ๋ค. ์ด ๊ณผ์ ์์ ์์ค ์ฝ๋๊ฐ ์ธ์ด์ ๋ฌธ๋ฒ ๊ท์น์ ๋ง๋์ง ๊ฒ์ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
2. ์ฝ๋ ์ต์ ํ
์ปดํ์ผ๋ฌ๋ AST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ถํ์ํ ์ฐ์ฐ์ ์ ๊ฑฐํ๊ฑฐ๋ ํจ์จ์ ์ธ ์ฝ๋๋ก ๋ณํํ๋ค.
3. ์ฝ๋ ์์ฑ
์ปดํ์ผ๋ฌ๋ AST๋ฅผ ์ฌ์ฉํด ์ ์์ค ์ฝ๋(๊ธฐ๊ณ์ด ๋๋ ์ค๊ฐ ์ฝ๋)๋ก ๋ณํํ๋ ๊ณผ์ ์ ์งํํ๋ค.
4. ๋๋ฒ๊น ๋ฐ ๋ถ์ ๋๊ตฌ
๊ตฌ๋ฌธ ํธ๋ฆฌ๋ ์ฝ๋์ ๊ตฌ์กฐ์ ๋ถ์์ ํตํด ์ฝ๋ ํ์ง์ ๊ฒํ ํ๊ฑฐ๋, ์ฝ๋ ๋ณํ, ๋ฆฌํฉํ ๋ง ๋๊ตฌ์์ ํ์ฉ๋ ์ ์๋ค.
๊ตฌ๋ฌธ ํธ๋ฆฌ์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ์ ์ฐจ์ด์
๊ตฌ๋ฌธ ํธ๋ฆฌ CST | ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ AST |
์์ค ์ฝ๋์ ๋ชจ๋ ๋ฌธ๋ฒ์ ์์๋ฅผ ํฌํจ | ๋ถํ์ํ ๋ฌธ๋ฒ ์์(๊ดํธ, ์ธ๋ฏธ์ฝ๋ก ๋ฑ)๋ฅผ ์๋ต |
๋งค์ฐ ์์ธํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง | ํต์ฌ์ ์ธ ๊ตฌ๋ฌธ๋ง ํฌํจํ์ฌ ๊ฐ๊ฒฐํจ |
๋ฌธ๋ฒ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๋ ๋ฐ ์ฌ์ฉ๋จ | ์ฝ๋ ์ต์ ํ ๋ฐ ์ฝ๋ ์์ฑ์ ์ํ ๊ตฌ์กฐ |
์์ค ์ฝ๋์ ๊ตฌ์ฒด์ ๋ฌธ๋ฒ์ ๋ฐ์ | ์์ค ์ฝ๋์ ํต์ฌ์ ์ธ ๋ ผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํํ |
์์ : ๊ฐ๋จํ ์ฝ๋์ ๊ตฌ๋ฌธ ํธ๋ฆฌ์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ
์ฝ๋ ์์
int x = (a + b) * c;
๊ตฌ๋ฌธ ํธ๋ฆฌ
๊ตฌ๋ฌธ ํธ๋ฆฌ๋ int, =, ;์ ๊ฐ์ ๋ฌธ๋ฒ์ ์ธ ์์์ ๊ดํธ ๋ฑ ๋ชจ๋ ๋ฌธ๋ฒ ์ ๋ณด๋ฅผ ํฌํจํ๋ค.
(=)
/ \
(int x) (*)
/ \
(+) (c)
/ \
(a) (b)
์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ
์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ ์ค์ํ ์ฐ์ฐ๊ณผ ๊ฐ๋ง ๋จ๊ฒจ๋๊ณ ๋ถํ์ํ ๋ฌธ๋ฒ์ ์์๋ฅผ ์ ๊ฑฐํ ํธ๋ฆฌ์ด๋ค.
(=)
/ \
(x) (*)
/ \
(+) (c)
/ \
(a) (b)
๊ดํธ๋ int, ; ๋ฑ์ ๋ฌธ๋ฒ์ ์์๋ ์ ์ธ๋๊ณ , ๋ณ์์ ์ฐ์ฐ์๋ง ๋จ์ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ฒฐ๋ก
๊ตฌ๋ฌธ ํธ๋ฆฌ(Syntax Tree)์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ ์ปดํ์ผ๋ฌ๋ ์ธํฐํ๋ฆฌํฐ์์ ์ฝ๋๋ฅผ ๋ถ์ํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํ๋ค. ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ ์์ค ์ฝ๋์ ์ธ๋ถ์ ์ธ ๋ฌธ๋ฒ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ ํ์์ ์ธ ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ๋ง์ ํํํจ์ผ๋ก์จ ํจ์จ์ ์ธ ์ฝ๋ ๋ณํ ๋ฐ ์ต์ ํ๋ฅผ ๋๋๋ค. AST๋ ํนํ ์ปดํ์ผ๋ฌ์ ์ค๊ฐ ๋จ๊ณ์์ ๋ง์ด ์ฌ์ฉ๋๋ฉฐ, ๊ตฌ๋ฌธ์ ๋ถ์ ํ์ ์ต์ ํ์ ์ฝ๋ ์์ฑ์ ํ์์ ์ด๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ ๊ตฌ์กฐ] ์คํ ํธ๋ฆฌ Skewed Tree (0) | 2024.09.09 |
---|---|
[์๋ฃ ๊ตฌ์กฐ] ์ด์ง ํธ๋ฆฌ Binary Tree (0) | 2024.09.08 |
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ Tree (0) | 2024.09.04 |
[Java] ์ ์บ์คํ , ๋ค์ด์บ์คํ (0) | 2024.09.04 |
[OOP] ๋ฐํ์ ๋คํ์ฑ (0) | 2024.09.04 |