๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[์ž๋ฃŒ๊ตฌ์กฐ] ๊ตฌ๋ฌธ ํŠธ๋ฆฌ Syntax Tree, ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ AST, Abstract Syntax Tree

์ถœ์ฒ˜

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๋Š” ํŠนํžˆ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ค‘๊ฐ„ ๋‹จ๊ณ„์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ตฌ๋ฌธ์  ๋ถ„์„ ํ›„์˜ ์ตœ์ ํ™”์™€ ์ฝ”๋“œ ์ƒ์„ฑ์— ํ•„์ˆ˜์ ์ด๋‹ค.