์ฌ๋์ด ์ฐ๋ ์ธ์ด๋ฅผ ์์ฐ์ธ์ด, ์ปดํจํฐ ์ธ์ด๋ฅผ ์ธ๊ณต์ธ์ด๋ผ๊ณ ํ๋ค.
์ปดํจํฐ๋ 0๊ณผ 1๋ก ๊ตฌ์ฑ๋ 2์ง๋ฒ ๊ธฐ๊ณ์ด๋ง ์ทจ๊ธํ๋ฏ๋ก ์ฌ๋์ด ๋ช ๋ น์ด๋ฅผ ์์ฑํ๊ธฐ์ ๋งค์ฐ ๋ถํธํ๊ธฐ ๋๋ฌธ์, ์กฐ๊ธ ๋ ํธ๋ฆฌํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ธ๋ฆฌ์ด๋ ๊ธฐ๊ณ์ด๋ณด๋ค ์กฐ๊ธ ํธ๋ฆฌํ ๋ฟ ๋ค๋ฃจ๊ธฐ์ ์ฌ์ ํ ์ด๋ ค์ ๋ค. ํด์ ์ฌ๋๋ค์ ์์ด์ ์ ์ฌํ ๊ณ ๊ธ์ธ์ด๋ฅผ ๋ง๋ค๊ฒ ๋๋ค. COBOL, PASCAL, ๊ทธ๋ฆฌ๊ณ ์ต๊ทผ์๋ ์ฌ์ฉํ๋ C, C++, JAVA ๋ฑ์ด ๋ชจ๋ ๊ณ ๊ธ์ธ์ด๋ค.
๊ธฐ๊ณ์ด๋ณด๋ค๋ ์ด์ ๋ธ๋ฆฌ์ด๊ฐ, ์ด์ ๋ธ๋ฆฌ์ด๋ณด๋ค๋ ๊ณ ๊ธ์ธ์ด๊ฐ ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํ๊ธฐ์ ์ฝ๊ณ ์ ์ฉํ์ง๋ง ์ด๋ฌํ ๊ณ ๊ธ์ธ์ด๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋๋ก ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์์ํ๋ก๊ทธ๋จ | ๋ฒ์ญ๊ธฐ | ๋ชฉ์ ํ๋ก๊ทธ๋จ |
์ด์ ๋ธ๋ฆฌ์ด | ์ด์ ๋ธ๋ฌ | ๊ธฐ๊ณ์ด |
๊ณ ๊ธ์ธ์ด | ์ปดํ์ผ๋ฌ | ์ ๊ธ์ธ์ด |
๊ณ ๊ธ์ธ์ด | ์ธํฐํ๋ฆฌํฐ | ์คํ๊ฒฐ๊ณผ |
๊ณ ๊ธ์ธ์ด | ํ๋ฆฌํ๋ก์ธ์ | ๊ณ ๊ธ์ธ์ด |
์ฌ๊ธฐ์ ๊ฐ์ฅ ๋ํ์ ์ธ ๋ฒ์ญ๊ธฐ๋ ์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ๊ฐ ์๋ค. ์์ํ ์ปดํ์ผ๋ฌ๋ ์์ํ ์ธํฐํ๋ฆฌํฐ๋ ๋๋ฌด ๊ทน๋จ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ธฐ๋ฒ์ ํจ๊ป ์ฌ์ฉํ์ฌ ์ปดํจํฐ์ ๊ตฌํํ๋ค. ์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ์ ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
๐ ์ปดํ์ผ๋ฌ
์ปดํ์ผ๋ฌ๋ ๊ณ ๊ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ ํ๋ก๊ทธ๋จ์ด๋ค. ๋ฒ์ญ ๊ณผ์ ์ ์ผ๋ฐ์ ์ผ๋ก ์ดํ๋ถ์ ๋จ๊ณ, ๊ตฌ๋ฌธ๋ถ์ ๋จ๊ณ, ์๋ฏธ๋ถ์ ๋จ๊ณ, ์ค๊ฐ์ฝ๋ ์์ฑ ๋จ๊ณ, ์ฝ๋์ต์ ํ ๋จ๊ณ, ๋ชฉ์ ์ฝ๋ ์์ฑ ๋จ๊ณ๋ก ์ด 6๋จ๊ณ์ ๊ณผ์ ์ผ๋ก ๊ตฌ๋ถ๋๋ค. ํ๋ก๊ทธ๋จ ์ ์ฒด๋ฅผ ์ค์บํ์ฌ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ค. ์ธํฐํ๋ฆฌํฐ๋ณด๋ค ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ์ง๋ง ํ ๋ฒ ์ ์ฒด์ ์ผ๋ก ๋์ฝ๋ฉํ๊ณ ๋๋ฉด ๊ทธ ๋ค์๋ถํฐ๋ ์คํ๋ง ํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์คํ์๊ฐ ์ธก๋ฉด์์ ํจ์จ์ ์ด๋ค. ๋์ ๋ช ์ค์ ์์ ํ๋ก๊ทธ๋จ์ด ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญ๋ ๋ ๋ช๋ฐฑ ๊ฐ๋ก ๋์ด๋๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ํฐ ๊ธฐ์ต์ฅ์๋ฅผ ํ์๋ก ํ๋ค. ๋ฐ๋ณต๋ฌธ ๋ฑ ๋ง์ ํ์๋ก ๋ฐ๋ณต ์ฒ๋ฆฌ๋๋ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ ๊ธฐ๋ฒ์ด ํฐ ์ฅ์ ์ ๊ฐ๋๋ค.
๋ํ ์ธ์ด๋ก๋ FORTRAN, COBOL, PASCAL, PL/I, C, C++, JAVA ์ธ์ด ๋ฑ์ด ์๋ค.
๐ ์ธํฐํ๋ฆฌํฐ
์ธํฐํ๋ฆฌํฐ๋ ์ปดํ์ผ๋ฌ์ ๋ฐ๋๋๋ ํน์ฑ์ ๊ฐ์ง ๊ธฐ๋ฒ์ผ๋ก ํ ๋ฒ์ ํ ์ค์ ๋ฒ์ญํ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ๋ณด๋ค ์คํ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. ํนํ ๋ฐ๋ณต๋ฌธ์ด ์์ ๊ฒฝ์ฐ ๋ฐ๋ณตํ์๋งํผ ๋ช ๋ น์ด๋ฅผ ๊ณ์ ๊ฐ์ ธ์ ๋์ฝ๋ ํ ์คํํ๋ฏ๋ก ์๊ฐ์ด ๋ง์ด ์์๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์๊ฐ ์คํ ๊ณผ์ ์ ๋์ผ๋ก ๋ณผ ์ ์๊ณ , ์ฌ์ฉ์์ ์ผ๋ฌธ์ผ๋ต์ ๋ํ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ์ตํต์ฑ์๊ฒ ํ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ์ปดํ์ผ๋ฌ์ ๋นํด ์ ์ ๊ธฐ์ต์ฅ์๋ฅผ ์๊ตฌํ๋ค.
๋ํ ์ธ์ด๋ก๋ Python, Ruby, Javascript, R ๋ฑ์ด ์๋ค.
๐ ์ปดํ์ผ๋ฌ์ ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ
์ปดํ์ผ๋ฌ๋ ๊ณ ๊ธ์ธ์ด๋ก ์ฐ์ธ ์์ ํ๋ก๊ทธ๋จ์ ์ ๋ ฅ ๋ฐ์์ ์ปดํจํฐ์์ ์คํ ๊ฐ๋ฅํ ํํ์ ๋ชฉ์ ํ๋ก๊ทธ๋จ์ ์ถ๋ ฅํด์ฃผ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ด๋ค. ์ฌ๋์ด ์์ฑํ ๊ณ ๊ธ ์ธ์ด๋ฅผ ์ปดํจํฐ๊ฐ ์์๋ค์ ์ ์๋๋ก ๋ฒ์ญํด์ ๋ชฉ์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด ์ฃผ๋ ๊ฑฐ๋ค. ์์ด ๋ฒ์ญ๊ณผ ๋น์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์์ด๋ฌธ์ฅ | ์ปดํ์ผ๋ฌ |
๋จ์ด๋ถ์ | ์ดํ๋ถ์ |
๋ฌธ์ฅ๋ถ์ | ๊ตฌ๋ฌธ๋ถ์ |
ํด์ | ์๋ฏธ๋ถ์ |
์ปดํ์ผ๋ฌ์ ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ๋ 6๋จ๊ณ์ ๊ณผ์ ์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
(1) ์ดํ๋ถ์ ๋จ๊ณ
-์์ ํ๋ก๊ทธ๋จ์ ์ฝ์ด๋ค์ฌ์ ์ดํ๋ค์ ๋ผ์ด๋ด ์ฌ๋ฐ๋ฅธ์ง ๋ถ์.
-์ดํ๊ฐ ์ฌ๋ฐ๋ฅด๋ฉด *ํ ํฐ(token)ํํ๋ก ์ถ๋ ฅ, ์ฌ๋ฐ๋ฅด์ง ์์ผ๋ฉด ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ๋ค.
-์ดํ๋ถ์๊ธฐ(lexical analyzer), ์ค์บ๋(scanner)
*ํ ํฐ(token): ์๋ฏธ ์๋ ์ต์์ ๋ฌธ๋ฒ์ ๋จ์.
(2) ๊ตฌ๋ฌธ๋ถ์ ๋จ๊ณ(Parsing)
-ํ ํฐ๋ค์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ํ ํฐ๋ค์ ์ด์ด ์ฌ๋ฐ๋ฅธ ๋ฌธ์ฅ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์๋์ง ๊ฒ์ฌ.
-๋ฌธ์ฅ์ด ์ฌ๋ฐ๋ฅด๋ฉด ๊ตฌ๋ฌธ ๊ตฌ์กฐ(๊ตฌ๋ฌธ ํธ๋ฆฌ) ์ถ๋ ฅ, ์ฌ๋ฐ๋ฅด์ง ์์ผ๋ฉด ์ค๋ฅ๋ฉ์์ง๋ฅผ ํ์ํ๋ค.
-๊ตฌ๋ฌธ ๋ถ์๊ธฐ(syntax), ํ์(parser)
(3) ์๋ฏธ๋ถ์ ๋จ๊ณ
-๊ตฌ๋ฌธ ํธ๋ฆฌ์ ์๋ฏธ/๊ธฐ๋ฅ ๋ถ์.
-์ฌ๋ฐ๋ฅด๊ฒ ์ํ๋ ์ ์๋๋ก ํ๊ฒฝ์ ์กฐ์ฑํ๋ค.
-์คํ ์ ์ฌ์ ์์ : ์๋ฃ ๊ตฌ์กฐ ์ ์, ํผํฉํ ์ฐ์ฐ(์ ์ํ์ ์ ์ํ๋ผ๋ฆฌ, ์ค์ํ์ ์ค์ํ๋ผ๋ฆฌ ์ฐ์ฐํ ์ ์๋๋ก ์๋ฃํ์ ๋ฐ๊ฟ์ค๋ค.), ๊ธฐํธํ
(4) ์ค๊ฐ์ฝ๋ ์์ฑ ๋จ๊ณ
-์ต์ ํ๋ฅผ ์ํ ์ค๊ฐ ๋จ๊ณ.
-ํ์คํธ๋ฆฌ๋ฅผ ๋๋ ๊ตฌ๋ฌธํธ๋ฆฌ๋ฅผ ์ํํ๋ฉด์ ์ค๊ฐ์ฝ๋๋ฅผ ์์ฑํ๋ค. ex) 3์ฃผ์์ฝ๋(์ฟผ๋๋ฌํ Quadruple), ํ์ ํ๊ธฐ๋ฒ
(5) ์ฝ๋์ต์ ํ ๋จ๊ณ
-ํจ์จํ, ์ต์ ํ
-์ํ์๊ฐ ์ต์ํ, ๊ธฐ์ต ๊ณต๊ฐ ์ต์ํ
(6) ๋ชฉ์ ์ฝ๋ ์์ฑ ๋จ๊ณ
-์ฐ์ฐ์ ์ํํ ๋ ์ง์คํฐ๋ฅผ ์ ํํ๊ฑฐ๋ ์๋ฃ์ ๊ธฐ์ต์ฅ์ ์์น๋ฅผ ์ ํด์ค๋ค.
-์ค๊ฐ์ฝ๋๋ฅผ ๊ธฐ๊ณ๋ช ๋ น์ด๋ก ๋ฐ๊พธ์ด์ค๋ค.
๐ ์ปดํ์ผ๋ฌ์ ๋ฌผ๋ฆฌ์ ๊ตฌ์กฐ
์ปดํ์ผ๋ฌ๊ฐ ํด์ผ ํ ์ผ์ ์๊ธฐ 6๋จ๊ณ ๋ ผ๋ฆฌ์ ์์๋ก ๋๋์ด ์๊ฐํ ์ ์๋ค๋ ์๋ฏธ์ผ ๋ฟ์ด์ง ๊ผญ ์ด์ ๊ฐ์ด ๊ตฌ์ฑ๋๋ ๊ฒ์ ์๋๋ค. ์ปดํ์ผ๋ฌ์ ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ค์ ๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ ๊ทธ ๋ฌผ๋ฆฌ์ ๊ตฌ์กฐ๋ ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ์ ๋ฐ๋์ ์ผ์นํ์ง๋ ์๋๋ค.
์ปดํ์ผ๋ฌ ๊ตฌํ์์๋ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๋ชจ์ ํ๋์ ๋ชจ๋๋ก ๋ฌถ์ ์ ์๋๋ฐ, ์ด๊ฒ์ ํจ์ค(pass)๋ผ๊ณ ํ๋ค. ํ์ฌ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ 1-ํจ์ค ์ปดํ์ผ๋ฌ์ 2-ํจ์ค ์ปดํ์ผ๋ฌ๋ก ๋ ๊ฐ์ง๊ฐ ์๋ค. 1ํจ์ค ์ปดํ์ผ๋ฌ๋ ์ด์ฐฝ๊ธฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ณผ์ ์ ํ๋์ ํจ์ค๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด๊ณ , 2-ํจ์ค๋ ์ค๊ฐ์ฝ๋ ์์ฑ ๋จ๊ณ๋ฅผ ๊ธฐ์ ์ผ๋ก 2ํจ์ค๋ก ๋๋์ด ์ ๋จ๊ณ๋ฅผ ์ ๋ฐ๋ถ, ๋ค ๋จ๊ณ๋ฅผ ํ๋ฐ๋ถ๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ค.
1ํจ์ค ์ปดํ์ผ๋ฌ๋ ์ ์ง๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋น์นธ์ผ๋ก ๋จ๊ฒจ๋์๋ค๊ฐ ๊ทธ ์ ๋ณด๋ฅผ ์ป์์ ๋ ์ฑ์ ๋ฃ๋ *๋ฐฑํจ์นญ(backpatching)์ด ํ์ํ๋ค. ์คํ ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
*๋ฐฑํจ์นญ(backpatching): ์๋ฅผ ๋ค์ด, if (A or B) and C ์ ๊ฐ์ if๋ฌธ์ ๋ฒ์ญํ๋ ๊ฒฝ์ฐ์ ๊ฐ๊ฐ์ ๋ถ๊ธฐ์ (1. A๋ ์ฐธ, B๋ ์ฐธ/ 2. A๋ ์ฐธ, B๋ ๊ฑฐ์ง... ๋ฑ)์ ๋ํด์ ๋ฒ์ญํ ๋น์์๋ ์ ์ ์๋ค. ๋ฐ๋ผ์ ๋์ค์ ๊ฑฐ๊พธ๋ก ์ฑ์๋ด์ผ ์ ์ ์๋๋ฐ ์ด๊ฒ์ ๋ฐฑํจ์นญ์ด๋ผ๊ณ ํ๋ค. ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์์ฑํ์ ๋ฟ ์ ํํ์ง ์์.
2ํจ์ค ์ปดํ์ผ๋ฌ๋ ์ฝ๋๋ก ์ง์ ๋ฒ์ญํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๊ณ ์ฝ๋ ํํ์ ์ ์ฝ์ ๋ฐ๊ณ ์คํ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค. ํ์ง๋ง ์ปดํ์ผ๋ฌ๋ฅผ ๊ธฐ๋ฅ์ ์ผ๋ก ๋ ๋ฆฝ๋ ์ฌ๋ฌ ๋ชจ๋๋ก ๊ตฌ์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด์์ฑ(portability)์ด ์ข๊ณ , ์ค๊ฐ ์ฝ๋๋ฅผ ์ด์ฉํ ์ต์ ํ์ ๋ฐ๋ผ ๊ธฐ๊ณ์ ๋ ๋ฆฝ์ ์ธ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ํ๋์ ํจ์ค๊ฐ ์ฌ์ฉํ๋ ๊ณต๊ฐ์ ๋ค์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๊ธฐ์ต์ฅ์๋ฅผ ์ ์ฝํ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก 2-ํจ์ค ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ค.