2019. 09.25
Front-end Developer
Seungwoo Hong
@Rodaloft
Compilation(์ปดํ์ผ๋ ์ด์ )
์์ค์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ ์ฒ๋ฆฌ๊ณผ์ ์ ๋งํ๋ฉฐ 3๋จ๊ณ๋ก ๋๋ ์ ์๋ค.
Compilation(์ปดํ์ผ๋ ์ด์ )
ย
ํ ํฌ๋์ด์ง
ํน ๊ตฌ๋ฌธ์ ์ธ์ด๋ง๋ค ํ ํฐ์ด๋ผ ๋ถ๋ฆฌ๋ ์กฐ๊ฐ์ผ๋ก ๋ถ๋ฆฌํ๋ ์์
ํ ํฌ๋์ด์ง (Tokenizing)
ย
Tokenizing
๋ ์ฑ
ย
Token
a ๋๋ ์ ๋๋ค ์ถ์ ์ด์ผ
ํ ํฐ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ์์
Tokenizer
๋ ์ค ํ์
a ๋๋ ์ ๋๋ค ์ถ์ ์ด์ผ
๋ ์ฑ์ด ์ผ์ด๋๋ ๊ณผ์ ๋ฐ ์๊ฐ
Tokenizer
๋ ์์ปฌ ์ค์ฝํ(์ ๋๋ค )
a
a
a
๋ ์ฑ ๊ฒฐ๊ณผ๋ฌผ๋ก ๋์จ ์ค์ฝํ๋ฅผ ๋งํ๋ค.
ํ์ฑ (Parsing)
ํ ํฐ ๋ฐฐ์ด์ ํ๋ก๊ทธ๋๋ฐ ๋ฌธ๋ฒ์ผ๋ก ์์ฑ ๋ ๋ ธ๋๋ค์ ํธ๋ฆฌ ๊ตฌ์กฐ ๋ก ๋ง๋๋ ๊ณผ์ ์ด๋ค. ์ด ๊ฒฐ๊ณผ๋ฌผ์ด AST(abstract syntax tree) ์ด๋ค.
์ฝ๋ ์์ฑ(Code-Generation)
AST๋ฅผ ์ปดํจํฐ๊ฐ ์คํ ํ ์ ์๋๋ก ์ปดํ์ผํ์ฌ ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ก ๋ง๋ ๋ค. ์ด ๊ณผ์ ์์ ์ฌ๋ฌ๊ฐ์ง ํธ๋ฆญ์ ์ด์ฉํ์ฌ ์ต์ ํ ์์ ์ด ์ผ์ด๋๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋ณด๊ธฐ
LHS(Left-Hand-Side) ์ RHS(Right-Hand-Side)
์ปดํ์ผ๋ฌ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์คํํ ๋ ๋ณ์๋ฅผ ๋ง๋๋ฉด ๊ฒ์์ ํ๋๋ฐ ์ด ๋ ๊ฒ์ ๋ฐฉ์์ด๋ค.
ย
LHS: ์ผ์ชฝ ๋ฐฉํฅ ๊ฒ์, ์ฆ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๊ฒ์
RHS: ์ค๋ฅธ์ชฝ ๋ฐฉํฅ ๊ฒ์, ์ฆ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฒ์
console.log์์์ a๋ ๊ฐ์ ๊ฐ์ ธ์ฌ๋๋ RHS ์ฐธ์กฐ๋ฅผ ํ๋ค.
= 2; ์ a๋ ์ค๋ฅธ์ชฝ์์ ย ๊ฐ์ ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ๋์ ํ๊ธฐ๋๋ฌธ์ LHS ์ฐธ์กฐ๋ฅผ ํ๋ค.
RHS
LHS
LHS
RHS
LHS / RHS
1. foo(2); ๋ RHS ์ฐธ์กฐ๋ค. ()๋ ์คํ์ ๋ปํ๋๋ฐ ๋จผ์ foo๋ฅผ ๊ฒ์ ํ์ฌ ๊ฐ์ ๊ฐ์ ธ์ ํจ์์ธ์ง ํ๋ณํ๊ธฐ ์ํจ์ด๋ค.
ย
2. function foo(a) { ์์์ a๋ LHS ์ฐธ์กฐ๊ฐ ์ผ์ด๋๋ค. ์คํ ์ 2๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋๋ฐ a๋ฅผ ์ ์ธํ๊ณ 2๋ฅผ ๋์ ํ๋ ๊ณผ์ ์ด ๋ฐ์ํ๋ค.
ย
3. console.log(a);์์์ a๋ ์ธ์๋ก ๊ฐ์ ์ ๋ฌํ๋ ์ญํ ์ด๋ค. ๊ฐ์ ๊ฐ์ ธ์์ผ ํ๊ธฐ ์ํด RHS ์ฐธ์กฐ๋ฅผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ foo(2); ์ ๋ง์ฐฌ๊ฐ์ง๋ก console.log์์๋ a์ ๊ฐ์ ๋ฐ๋ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ ๋์ ํ๊ธฐ ์ํด LHS ์ฐธ์กฐ๋ฅผ ํ๋ค.
์ค์ฒฉ์ผ๋ก ์ค์ฝํ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด๋ด ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ด ์ ์ฉ๋๋ค.
ย
์๋ต...
์คํ
1. console.log( a + b); ์์ b๋ฅผ RHS์ฐธ์กฐ ํ์ฌ ๊ฐ์ ๊ฐ์ ธ์ค๋ คํ๋ค.
2. ํ์ฌ ์คํ ์ค์ธ ์ค์ฝํ์์ b๋ฅผ ์ฐพ์ง๋ง ์ฐพ์ง ๋ชปํ๋ค.
3. ํ ๋จ๊ณ ์์ ์ค์ฝํ์ธ ๊ธ๋ก๋ฒ ์ค์ฝํ๋ก ์ฌ๋ผ๊ฐ๋ค.
4. b๋ฅผ ์ฐพ์ RHS ์ฐธ์กฐํ์ฌ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
์๋ต...
์คํ
console.log(a + b); ๊ตฌ๋ฌธ์์ b๋ฅผ RHSย ์ฐธ์กฐํ๋ ค๊ณ ํ ๋ ํ์ฌ ์คํ ์ค์ธ ์ค์ฝํ์์ b๋ฅผ ์ฐพ์ง๋ชปํ๋ค. ๋ฐ๊นฅ ์ค์ฝํ์์ ๊ฒ์์ ํด๋ ์ฐพ์ง ๋ชปํ๋ค.ย ๊ทธ๋ ๊ฒ ย ์ฐพ์ง ๋ชปํ ๋ณ์๊ฐ ์์ ๋ณ์์ ReferenceError ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋๋ก LHS ์ฐธ์กฐ ์์๋ ๋ณ์๋ฅผ ๊ฒ์ ํ์ง ๋ชปํ๋ฉด ํด๋น ๋ณ์๋ฅผ ๊ธ๋ก๋ฒ ์ค์ฝํ์ ๋ง๋ค์ด ์ค๋ค.
ย
๊ทธ๋ฆฌ๊ณ ๋ณ์๋ ์ฐพ์์ง๋ง ์๋ํ๋ ๋์์ ํด๋น ๊ฐ์ด ์คํ ๋ถ๊ฐํ๋ค๋ฉด TypeError ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
ex) ํจ์๊ฐ ์๋ ๊ฐ์ ์คํํ ๊ฒฝ์ฐ, null, undefined