๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Dev-diary/๋…์„œ

22.02.22 ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ์‹œ์ž‘

by ciocio 2022. 2. 22.

๐Ÿ“  ์ฑ…์„ ์ฝ๊ฒŒ ๋œ ๊ณ„๊ธฐ

4์ฃผ ํ”„๋กœ์ ํŠธ๋ฅผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค.

ํƒ€์ž…์Šคํฌ์ž…ํŠธ๋ฅผ ๋„์ž…ํ•œ ์ด์œ ๋Š”, ํ”„๋กœ๊ทธ๋žจ์ด ๋ณต์žกํ•ด์งˆ ๊ฒƒ์„ ์šฐ๋ คํ•ด์„œ๋‹ค.

์•ฑ์˜ ์ƒ๋‹น ๋ถ€๋ถ„์—์„œ ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ฐฐ์—ด ๋“ฑ ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜•์ด ๊ฐ’์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ data๋กœ ๋‹ค๋ค˜๊ธฐ๋•Œ๋ฌธ์ด๋‹ค.

๊ฐ์ฒด ๋‚ด์˜ ๊ฐ’์„ ์กฐ์ž‘ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ์˜ค๋ฅ˜๋“ค์„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žก์•„์ค„๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด์•ผ๋งŒ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€๋งŒ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋” ํšจ๊ณผ์ ์ผ๊ฑฐ๋ผ ํŒ๋‹จํ–ˆ๋‹ค.

 

์‹œ์ž‘์€ ์ข‹์•˜์œผ๋‚˜ ! ์–ธ์–ด๋ฅผ ์ถฉ๋ถ„ํžˆ ์ˆ™์ง€ํ•  ์‹œ๊ฐ„ ์—†์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋”๋‹ˆ ํ•˜๋Š” ๋‚ด๋‚ด ์ฐœ์ฐœํ–ˆ๋‹ค.

๋‚ด๊ฐ€ ์•„๋Š” ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ํƒ€์ž… ๋ฒ”์œ„ ์•ˆ์—์„œ๋งŒ ๋งด๋Œ๊ณ  ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ์žฅ์ ์„ ๋ฐฑ๋ถ„ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•œ ๋Š๋‚Œ์ด ๋“ค์—ˆ๊ณ , ์ •์  ํƒ€์ž… ์–ธ์–ด๋ฅผ ๊ณต๋ถ€ํ•  ํ•„์š”์„ฑ๋„ ๊นจ๋‹ฌ์•˜๋‹ค.

์ข€ ๋” ๊ทผ๋ณธ์ ์ธ ๊ฐœ๋…์„ ๋‹ค์ง€๊ณ  ์‹ถ์–ด์„œ ์ฑ…์„ ์ฐพ๊ฒŒ ๋˜์—ˆ๋‹ค.

(๊ทธ ์™ธ ๋Œ€๊ธฐ์ค‘์ธ ์ฑ…๋“ค : ์ƒ๊ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ, introduction to Algorithm)

 


๐Ÿ’ก ์ปดํŒŒ์ผ๋Ÿฌ

 

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•ด Abstract Syntax Tree(AST : ์ถ”์ƒ ๋ฌธ๋ฒ• ํŠธ๋ฆฌ)๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.
๊ทธ๋ฆฌ๊ณ  AST๋ฅผ bytecode(๋ฐ”์ดํŠธ์ฝ”๋“œ)๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ runtime(๋Ÿฐํƒ€์ž„)์—๊ฒŒ ๋„˜๊ฒจ์ค€๋‹ค.
๋Ÿฐํƒ€์ž„์€ ์ด๋ฅผ ํ‰๊ฐ€ํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•œ๋‹ค.

→ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ๋‹ค :
์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•ด AST๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒƒ์„ ๋Ÿฐํƒ€์ž„์ด ํ‰๊ฐ€ํ•˜๋„๋ก ์ง€์‹œํ•œ๋‹ค.
โœ” ํ”„๋กœ๊ทธ๋žจ์ด AST๋กœ ํŒŒ์‹ฑ๋œ๋‹ค.
โœ” AST๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋œ๋‹ค.
โœ” ๋Ÿฐํƒ€์ž„์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค.

 

 

๐Ÿ”— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ (TSC)

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋‹ค๋ฅธ ์ ์€, 

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค ๐Ÿ˜ฎ

๋˜ํ•œ ๊ฒฐ๊ณผ ์ฝ”๋“œ๋ฅผ ๋‚ด๋†“๊ธฐ ์ „์— ํƒ€์ž… ํ™•์ธ์„ ๊ฑฐ์นœ๋‹ค. (ํƒ€์ž… ๊ฒ€์‚ฌ๊ธฐ)

๐Ÿ“Œ TSC๊ฐ€ ์ˆ˜ํ–‰ (์ปดํŒŒ์ผ๋Ÿฌ)
โœ” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค → ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ AST
โœ” ํƒ€์ž… ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ AST ํ™•์ธ
โœ” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ AST → ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค
--------------------------------------------------------
๐Ÿ“Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ˆ˜ํ–‰ (์ปดํŒŒ์ผ๋Ÿฌ & ๋Ÿฐํƒ€์ž„)
โœ” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค → ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ AST
โœ” AST → ๋ฐ”์ดํŠธ์ฝ”๋“œ
โœ” ๋Ÿฐํƒ€์ž„์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ 

 


โœ๐Ÿป ์˜ค๋ฅ˜ ๋ฐ”๋กœ ์žก๊ธฐ

๐Ÿงจ  ์–ด๋…ธํ…Œ์ด์…˜(value : type ํ˜•ํƒœ์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•)์„ ๋  ์ˆ˜ ์žˆ์œผ๋ฉด ๋งŽ์ด ์ ๋Š” ๊ฒŒ ์ข‹๋‹ค ?

๋‚ด๊ฐ€ ์ž˜๋ชป ์ƒ๊ฐํ–ˆ๋˜ ๋ถ€๋ถ„.

a = 1; ์ฒ˜๋Ÿผ ๋‹น์—ฐํ•œ ์ฝ”๋“œ์—๋„ a : number = 1; ์–ด๋…ธํ…Œ์ด์…˜ ํ˜•ํƒœ๋กœ ์„ ์–ธํ•ด์ฃผ์—ˆ๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—๊ฒŒ ์ด๋ ‡๊ฒŒ ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์•Œ๋ ค์ค„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ˜ผ์ž ํƒ€์ž…์„ ์ถ”๋ก ํ•  ์ˆ˜๋„ ์žˆ๋‹ค !!!

๊ผญ ํ•„์š”ํ•  ๋•Œ์—๋งŒ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜๊ฒŒ๋” ๋†”๋‘๋Š” ๊ฒŒ ์ข‹๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€