์ธํฐํ๋ฆฌํฐ ํจํด์ ๋ฌธ๋ฒ ๊ท์น์ด ์๋ ์ด๋ค ์ธ์ด๋ฅผ ํด์ํ๋ ํด์๊ธฐ๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ํ๋ ํจํด์ด์์. ๋ํ์ ์ผ๋ก SQL Parser, ์ ๊ท์ ์์ง, ๊ตฌ๋ฌธ ํด์๊ธฐ(Typescript ๊ฐ์ ์ธ์ด ํด์) ๊ฐ์ ๊ฒ๋ค์ด ์์ด์.
์ธํฐํ๋ฆฌํฐ ํจํด์ ํฌ๊ฒ 4๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋ผ์. Abstract Expression , Terminal Expression, Nonterminal Expression, Context๋ก ์ด๋ฃจ์ด์ ธ์.

๋ชจ๋ ํํ์์ด ๋ฐ๋ผ์ผํ interpret ๋ฉ์๋๋ฅผ ์ ์ํด์. ๋ฌธ๋ฒ ๊ตฌ์กฐ์ ์ต์ ์ธํฐํ์ด์ค ์ญํ ์ ํด์.
๋ฌธ๋ฒ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ ๋จ์(ํ ํฐ)์ ํด์ํ๋ ํด๋์ค์์. ์ซ์, ๋จ์ด ๊ฐ์ ๋จ์ผ ํ ํฐ์ ํด์ํด์. Interpreter ํจํด์ ๋๋ถ๋ถ์ด ์ด Terminal Expression์ผ๋ก ๊ตฌ์ฑ๋ผ์.
๋ณดํต ๋ฌธ๋ฒ ๊ท์น์ ์กฐํฉํ๋ ํํ์ ์ด์์. (+, -, *, %) ์ฌ๋ฌ Expression์ ์กฐํฉํด์ ๋ ํฐ ์๋ฏธ๋ฅผ ๊ตฌ์ฑํด์. ์ฌ๊ท์ ์ผ๋ก ํ์ Expression์ interpret ํธ์ถํด์ ์๋ฏธ๋ฅผ ๊ณ์ฐํด์.
ํด์ ๊ณผ์ ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์์ด์. ๋ณ์์ ๊ฐ, ํ๊ฒฝ ์ค์ , ์บ์ ๋ฑ์ ์ ์ฅํด์ ํ์ํ๋ฉด Expression์ ์ ๊ณตํด์.
์ด๋ฒ์๋ ์ฝ๋ ์์๋ฅผ ์ง์ ๊ฐ์ ธ์ค์ง๋ ์์๊ฒ์. ์๋ํ๋ฉด ๊ฐ๋ ์ ์ธ ์ดํด๊ฐ ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด์์. ์ด๊ฑด ํ๋ก๊ทธ๋๋จธ๋ก์ ๊ฐ์ฅ ๊ธฐ์ด์ ์ด๊ณ ์ค์ํ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํด์. ๋ชจ๋ ์ธ์ด๊ฐ ๊ฑฐ์ ๊ฐ์ ๊ณผ์ ์ผ๋ก CPU์์ ์คํ ๊ฐ๋ฅํ๋๋ก ๊ธฐ๊ณ์ด๋ก ํน์ ์ธํฐํ๋ฆฌํฐ๋ฅผ ํตํ ์คํ์ ์ํ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ฒ์ญํ ์ ์๋๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ด์์.

์ ๊ทธ๋ฆผ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ์ดํธ ์ฝ๋๊น์ง ๋ง๋๋ ์์์์. Scanner(Tokenizer)๋ฅผ ํตํด ์์ค์ฝ๋๋ฅผ ํ ํฐํํ๊ณ , ํ ํฐํํ ์ ๋ณด๋ฅผ ํตํด Parser๋ฅผ ์ด์ฉํด์ AST๋ฅผ ๋ง๋ค์ด์. ๊ทธ๋ฆฌ๊ณ AST๋ฅผ ๋ณด๊ณ Interpreter๊ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ง๋ค๊ณ ์.
ํ๋ฒ ์์๋๋ก ๊ฐ๋ตํ๊ฒ ์์๋ฅผ ๋ด์.
ํ ํฐํ
const x = 5 + 3Lexer(ํ ํฌ๋์ด์ ) ๋จ๊ณ
ํ ํฐ
ํ์
const
Keyword (์์ฝ์ด, ํค์๋)
x
Identifier (์๋ณ์)
=
Operator (์ฐ์ฐ์)
5
Number (์ซ์)
+
Operator
3
Number
;
Punctuation (๊ตฌ๋์ )
AST ์์ฑ
Parser ๋จ๊ณ๋ก AST๋ฅผ ๊ตฌ์ฑํ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด์.

์ธํฐํ๋ฆฌํฐ ๋จ๊ณ
AST ๋ ธ๋๋ฅผ Expression ๊ฐ์ฒด๋ก ๋ง๋ค์ด์. ์ด๋ AST์ ๋ฆฌํ ๋ ธ๋๋ฅผ TerminalExpression์ผ๋ก ๋ณด๋ฉด ํธํด์. 5, 3, X๊ฐ์๊ฒ ์๊ฒ ๋ค์.
์๋๋ ์ฐ์ฐ์ ๋ํ Expression๋ ธ๋ ์์ฑ ์์๋ฅผ ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด ๋ดค์ด์.

๊ทธ๋ฐ๋ฐ ์ ๊ฐ์๊ธฐ ์ด์ํ ๊ฑฐ๋ฅผ ๋งํ๋ ์ฝ์ฃ ? Client๋ root์์ interpret()์ ํ๊ธฐ ์ํด์๋ AST๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผํ๊ธฐ ๋๋ฌธ์ด์์.
๊ทธ๋ฆฌ๊ณ ์ธํฐํ๋ฆฌํฐ๋ ์ฌ์ค context๋ฅผ ๊ด๋ฆฌํ๊ณ , expression ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , argument๋ก Terminal Expression์ ๋ฃ์ด์ฃผ๋ฉฐ ๋ฌธ๋ฒ์ ๋ง๊ฒ expression tree๋ฅผ ๊ตฌ์ฑํด์ผ ํ๋ ์ผ๋ค์ ์บก์ํ ํ๊ณ ์์ด์ผํด์. ๊ทธ๋ฆฌ๊ณ ์ฌ์ค ์ด ํจํด์ ์์๋ดค์, ์ ๋จ์ ๊ณผ์ ๋ค์ด ๋ญ๊ฐ ์์ด์ผํ ์ง ๋ชจ๋ฅด๋ฉด ํฐ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํ์ด์.
์ธํฐํ๋ฆฌํฐ ํจํด์ ๋ฌธ๋ฒ ๊ท์น์ ํด๋์ค๋ก ๋ถ๋ฆฌํด ์๋ก์ด ๋ฌธ๋ฒ ์ถ๊ฐ๊ฐ ์ฉ์ดํ๊ฒ ๋ง๋ค๊ธฐ ์ข์์. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ท์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ฒ๋๊ธฐ ๋๋ฌธ์ Composite ํจํด๊ณผ ์ ์ฌํด์. ํ์ง๋ง ์ปดํฌ์งํธ ํจํด์ ๋จ์ผ ๊ฐ์ฒด์ ๋ณตํฉ ๊ฐ์ฒด๋ฅผ ๋์ผํ๊ฒ ๋ค๋ฃจ์ด ๋จ์ํํ๋๋ฐ ์ฌ์ฉํ๊ณ , ์ธํฐํ๋ฆฌํฐ ํจํด์ ๋ฌธ๋ฒ ๊ท์น์ ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ์ฉํด์.
๋ฌธ๋ฒ ๊ท์น์ ํด๋์ค๋ก ๋ถ๋ฆฌํด ๊ด๋ฆฌ ๋ฐ ์ถ๊ฐ๊ฐ ํธํด์.
DSL(๋๋ฉ์ธ ํนํ ์ธ์ด, ์ฝ๋์์ string SQL๋ฌธ์ ์ฒ๋ฆฌํ๋ ์์)์ ์ง์ ๋ง๋ค ์ ์์ด์.
์ฌ๊ท ๊ตฌ์กฐ๋ผ ํํ๋ ฅ์ด ์ข๊ณ Composite ํจํด๊ณผ ๊ถํฉ์ด ์ข์์.
๋ฌธ๋ฒ์ด ์ถ๊ฐ๋๋ฉด์ Expression ํด๋์ค๊ฐ ๋ง์ด ๋์ด๋์.
๋ณดํต ๋ณต์กํ ๋ฌธ๋ฒ์ ๊ตฌํํ๋ ค๋ฉด Tokenizer, Parser๊น์ง ๊ตฌํํด์ผ ํด์(์ปดํ์ผ๋ฌ ๊ตฌ์กฐ).
์ด๋ฒ์๋ ์ธํฐํ๋ฆฌํฐ ํจํด์ ๋ํด์ ์์๋ดค์ด์. ์ด ํจํด์ ์ด ํ์ฉ๋ฒ ์์ฒด๋ณด๋ค๋, ์ธ์ด์ ํด์ ๊ณผ์ ๊ณผ ๋ฐํ ์ง์์ด ๋ ํ์ํ๋ค ์๊ฐํด์. ๊ทธ๋์ ์ ๋ ์ด ํจํด์ด ์ค์ํ๋ค๊ณ ์๊ฐํ์ง ์์์. ์ด ํจํด์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๊ตฌํํ๋ ๊ฒฝ์ฐ๋ ์ด๋ฉด์ ๋ช๋ฒ ์์ ๊ฒ ๊ฐ์์. ์ฌ๋ฌ๋ถ์ด ์ ๋ช ํ "์๋ญ"๊ฐ์๊ฑฐ๋ฅผ ๋ง๋ ๋ค๋ฉด ๋ชจ๋ฅผ๊น์...
๊ทธ๋์ ์ ๋ ์ด ํจํด ์์ฒด ๋ณด๋ค๋ "์ด๋ป๊ฒ ๋ด๊ฐ ์ด ์ฝ๋๊ฐ ๊ธฐ๊ณ์ด๊น์ง ๋ฒ์ญ๋์ด CPU์์ ์คํ๋ ๊น??"๋ฅผ ์๋ฉด ์ข๊ฒ ์ด์. ๊ทธ ๊ณผ์ ์์ ์ด๋ค์์ผ๋ก ์ต์ ํ๊ฐ ์ด๋ฃจ์ด์ง๋์ง ์๋ ค์ฃผ๊ธฐ๋ ํ๊ฑฐ๋ ์. ๊ทธ๋ฌ๋ฉด ์ฝ๋๋ฅผ ์์ฑํ ๋, ๋ ์ต์ ํ๊ฐ ์ ๋๋๋ก ์ฝ๋๋ฅผ ์งค ์๋ ์๋ ๊ฒฝ์ฐ๋ ์์ด์.