Interpreter
์ธํฐํ๋ฆฌํฐ ํจํด์ ์ฃผ์ด์ง ์ธ์ด(๋๋ ํํ์)๋ฅผ ํด์ํ๋ ๊ท์น์ ํด๋์ค๋ก ํํํ์ฌ, ํด๋น ์ธ์ด์ ๋ฌธ๋ฒ์ ํด์ํ๊ณ ์คํํ ์ ์๋๋ก ํ๋ ๋์์ธ ํจํด์ ๋๋ค.
ํํ์(๋ฌธ๋ฒ ๊ท์น)์ ์บก์ํํ ๊ฐ์ฒด๋ค(TerminalExpression, NonTerminalExpression)์ ์ฌ์ฉํ์ฌ ๋ณต์กํ ์ธ์ด๋ฅผ ํ์ฑํ๊ณ ํด์ํ ์ ์์ต๋๋ค.
ํ๊ฒ(Target): ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค์ ๋๋ค.
์ด๋ํฐ(Adaptee): ๊ธฐ์กด์ ์กด์ฌํ๋, ์ํ๋ ์ธํฐํ์ด์ค์ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ํด๋์ค์ ๋๋ค.
์ด๋ํฐ(Adapter): ์ด๋ํฐ์ ์ธํฐํ์ด์ค๋ฅผ ํ๊ฒ ์ธํฐํ์ด์ค๋ก ๋ณํํ๋ ํด๋์ค์ ๋๋ค.
How do code
Expression ์ธํฐํ์ด์ค: ๋ชจ๋ ํด์ ๋์(๋ฌธ๋ฒ ์์)์ด ๊ตฌํํด์ผ ํ๋ ์ธํฐํ์ด์ค๋ก,
interpret()
๋ฉ์๋๋ฅผ ํตํด ํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.TerminalExpression (NumberExpression): ์ซ์๋ ๋ณ์์ ๊ฐ์ด ๋ ์ด์ ๋ถํดํ ์ ์๋ ๊ธฐ๋ณธ ์์๋ฅผ ํํํฉ๋๋ค. ์ด ์์ ์์๋ ์ซ์ ๊ฐ์ ๋จ์ํ ๋ฐํํฉ๋๋ค.
NonTerminalExpression (AddExpression): ๋ ๊ฐ์ Expression ๊ฐ์ฒด๋ฅผ ๊ฒฐํฉํ์ฌ ์ฐ์ฐ(์ฌ๊ธฐ์๋ ๋ง์ )์ ์ํํฉ๋๋ค. ๋ด๋ถ์ ์ผ๋ก ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ Expression์ ํด์ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํฉ๋๋ค.
Context: ํด์ ์ ํ์ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ฒด(์ฌ๊ธฐ์๋ ๋ณ์ ๊ฐ ๋ฑ)๋ฅผ ์๋ฏธํฉ๋๋ค. ์์ ์์๋ ์ฌ์ฉํ์ง ์์์ง๋ง, ๋ณต์กํ ์ธ์ด๋ฅผ ํด์ํ ๋ ๋ณ์ ๋งคํ ๋ฑ์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
Last updated