์ด ๊ธ์ ๊ตญ๋ฏผ๋ํ๊ต ๊ฐ์น์ ๊ต์๋์ 'ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ' ์์ ์ ํ ๋๋ก
๊ฐ์ธ์ ์ผ๋ก ํ์ตํ ๋ด์ฉ์ ๋๋ค.
4.1 ์ธ์ด ๊ตฌ๋ฌธ
๊ณ ๊ธ์ธ์ด๋ฅผ ์ ์ํ ๋๋ ๋ ๊ฐ์ง ์ธก๋ฉด์์ ์ค๋ช
์ด ํ์ํจ
- ๊ตฌ๋ฌธ : ๋ฌธ๋ฒ์ ์ธ ํ์ (Syntax)
- ์๋ฏธ : ๋์์ ์๋ฏธ (Semantics)
์ฌ๋์ด ์ฝ๋ ์์ฐ์ด๋ก ์ค๋ช
ํ๋ ์์ฐ์ด ์ ์์ ์ํ์ ๊ธฐํธ๋ ํ์ ์ธ์ด(BNF ๋ฑ) ์ผ๋ก ์ ํํ๊ฒ ์ ์ํ๋ ํ์ ์ ์๊ฐ ์์
=> ๊ตฌ๋ฌธ ํ์ ์ ์์ ์ข
๋ฅ์๋ BNF, EBNF, ๊ตฌ๋ฌธ ๋ํ ๋ฑ์ด ์์

๊ณ ๊ธ ์ธ์ด ํ๋ก๊ทธ๋๋จธ๋ ์ปดํจํฐ๋ฅผ ๊ฐ์์ ๊ณ ๊ธ ์ธ์ด ์ปดํจํฐ๋ก ๊ฐ์ฃผํจ
=> ์ฆ, ๊ฐ๋ฐ์๋ง๋ค ์ปดํจํฐ ํ๋์จ์ด๋ฅผ ๋ณด๋ ๊ด์ ์ด ๋ค๋ฆ
4.1.1 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ดํ๊ตฌ์กฐ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ธฐ๋ณธ ๋ฌธ์ ์งํฉ์ ์ํ๋ฒณ ๋ฌธ์ 26๊ฐ(A - Z) + ์๋ผ๋น์ ์ซ์ 10๊ฐ (0 - 9) ์
=> Fortran์ ๊ฒฝ์ฐ๋ ๊ธฐ๋ณธ ๋ฌธ์ ์งํฉ์ 13๊ฐ์ ํน์๋ฌธ์๋ฅผ ๋ํด์ 49๊ฐ์ ๋ฌธ์๋ง ์ฌ์ฉ
=> Algol 60์ ๊ฒฝ์ฐ๋ ์ํ๋ฒณ ๋์๋ฌธ์ 52๊ฐ + ์๋ผ๋น์ ์ซ์ 10๊ฐ + 28๊ฐ์ ํน์๋ฌธ์๋ฅผ ์ฌ์ฉ
๋ฌธ์ ์ฝ๋ ์ฒด๊ณ
- 1. EBCDIC
IBM์์ ์ ์, 8๋นํธ ์กฐํฉ ์ฝ๋ - 2. ASCII (๊ฐ์ธ์ฉ ์ปดํจํฐ๊ฐ ์๋ฆฌ์ก์ผ๋ฉด์ ๋์คํ)
ANSI์์ ์ ์, 7๋นํธ ์กฐํฉ ์ฝ๋(128๊ฐ์ ๋ฌธ์ ํํ)
-> ์๋ฌธ์ ๋์๋ฌธ์ 52๊ฐ + ์ซ์ 10๊ฐ + 33๊ฐ์ ํน์๋ฌธ์ + 33๊ฐ์ ์ ์ด๋ฌธ์ - 3. Unicode
16 bit(BMP) - ์ด์ฐฝ๊ธฐ, 21 bit(SMP) - ํ์ฌ
-> Java, Python ๋ฑ์์ ๊ธฐ๋ณธ ์ธ์ฝ๋ฉ์ผ๋ก ์ฌ์ฉ๋จ (UTF-8 ํ์)
(Unicode๋ ๊ทธ๋ฅ ์ ์ํ๋ ๋ฌธ์ํ์ธ๊ฑฐ๊ณ UTF-8์ ๊ทธ๊ฑธ ์ ์ฅํ๋ ๋ฐฉ์ ์ฆ, ์ธ์ฝ๋ฉ ํ์์ -> Unicode๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ ์ค ํ๋)
์ ํฉ ์์(collating sequence) : ๋ฌธ์๋ค ๊ฐ์ ์์
=> ์ธ์ด์ ์ ๊ณต๋ ๋ฌธ์ ์์, ์ผ๋ฐ ์์ ์งํด
(์๋ฅผ ๋ค์ด, ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ์ง ์ ํด์ผ ํ ๋ ํ์ํจ)
ex. 0 < 1 < 2 < .. < 9
ex. A < B < C < ... < Y < Z
ํน์ ๋ฌธ์ ์์
=> ์ฝ๋ ์ฒด๊ณ ๋ฐ๋ฆ (๊ตฌํ์ ๊ฒฐ์ )
(ASCII์์ A๋ 65, a๋ 97๋ก ๋๋ฌธ์๊ฐ ์๋ฌธ์ ๋ณด๋ค ์์ฌ -> ์ฌ์ฉํ๋ ๋ฌธ์ ์ธ์ฝ๋ฉ ์ฒด๊ณ๋ฅผ ๋ฐ๋ฆ)
RPG, SNOBOL ๊ฐ์ ๊ณ ์ ์ธ์ด๋ค์์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ์ ํฉ ์์๋ฅผ ์ ์ํ ์ ์์
4.1.2 ๋ฌธ๋งฅ ์์ ๋ฌธ๋ฒ๊ณผ BNF, EBNF
BNF (Backus-Naur Form) ํ๊ธฐ๋ฒ
- ๊ตฌ๋ฌธ(syntax) ํ์์ ์ ์ํ๋ ๊ฐ์ฅ ๋ณดํธ์ ์ธ ํ๊ธฐ๋ฒ
- ํ ์ธ์ด์ ๊ตฌ๋ฌธ์ ๋ํ BNF ์ ์
=> ์ธ์ด์ ๋ฌธ์ฅ์ ์์ฑํ๋ ์์ฑ ๊ท์น(Production rule) ์ ์ - ์์ฑ ๊ท์น
=> ์์ฑ ๊ท์น์ ์ผ์ชฝ (์ ์๋ ๋์), ์ค๋ฅธ์ชฝ์๋ ๊ทธ ๋์์ ๋ํ ์ ์

๋ฉํ ๊ธฐํธ
::= ์ ์ํ๋ค
<> ๋น๋จ๋ง๊ธฐํธ(nonterminal symbol)
| ํ์ผ ๊ธฐํธ
EBNF (Extended Backus - Naur Form)
- BNF ํ๊ธฐ๋ฒ์ ํ์ฅ
=> BNF ๋ณด๋ค ์ฝ๊ธฐ ์ฝ๊ณ , ๊ฐ๋จํ๊ฒ ํํ๋ ํ๊ธฐ๋ฒ
- BNF์ ์ถ๊ฐ๋ EBNF์ ๋ฉํ ๊ธฐํธ
- ๋ฐ๋ณต : { }
- ์ ํ : [ ]
- ํ์ผ : (a | b)
- ๋ฐ๋ณต : { }
{ }, [ ], |, ( ), ::= ์ ๊ฐ์ ๋ฉํ ๊ธฐํธ๋ฅผ terminal ๊ธฐํธ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, โ|โ, โ::=โ ์ ๊ฐ์ด ์ธ์ฉ๋ถํธ๋ก ๋ฌถ์ด ํํ
4.1.3 ๊ตฌ๋ฌธ ๋ํ (Syntax diagram)
๊ตฌ๋ฌธ ๋ํ๋ ๊ทธ ํํ๊ฐ ์์๋์ ์ ์ฌ

๊ตฌ๋ฌธ ๋ํ๋ EBNF์ ์ผ๋์ผ ๋์์
- ๋ค์ ์ ์๋ ๋์(nonterminal)์ ๋ค๋ชจ์นธ
- ๋จ๋ง ๊ธฐํธ(terminal)๋ ์์ด๋ ํ์ํ์ผ๋ก ํ์ํ๊ณ ์ง์์ ์ผ๋ก ์ฐ๊ฒฐ
๊ตฌ๋ฌธ ๋ํ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ




4.1.4 ํ์ค ํธ๋ฆฌ์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ
ํ์ค ํธ๋ฆฌ(parse tree)
- ์์ ํ๋ก๊ทธ๋จ์ ๋ฌธ์ฅ ๋ถ์ ๊ณผ์ ์์ ์์ฑ๋๋ ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ
- ์ด๋ค ๋ฌธ์ฅ์ด BNF์ ์ํด ์ฑ์ฑ๋ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋

4.1.5 ๋ชจํธ์ฑ, ๊ฒฐํฉ์ฑ ๋ฐ ์ฐ์ ์์
๋ชจํธ(ambiguous)๋ ๊ฐ์ ๋ฌธ์ฅ์ ๋ํด ๋ ๊ฐ์ง ํ์ค ํธ๋ฆฌ๊ฐ ์์ฑ๋๋ ๊ฒ์
์ฒซ ๋ฒ์งธ ์์

์์ BNF๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋ก ๋ค๋ฅธ ์ ๋ ๊ณผ์ ์ ๊ฑฐ์ณ "B 3 3" ์ด ์์ฑ๋๋ ๊ฒ์ ๋ณด๋ฉด
1. <identifier>
โ <identifier> <digit>
โ <identifier> 3
โ <identifier> <digit> 3
โ <identifier> 3 3
โ <letter> 3 3
โ B 3 3
2. <identifier>
โ <identifier> <digit>
โ <identifier> <digit> <digit>
โ <letter> <digit> <digit>
โ B <digit> <digit>
โ B 3 <digit>
โ B 3 3
์ธ๋ฐ ์ด ๋ ์ ๋ ๊ณผ์ ์ ๊ฒฐ๊ณผ๋ก ๋์ค๋ parse tree์ ๋ชจ์์ด ๋์ผํ๋ฉด ์๊ด ์์

๋ ๋ฒ์งธ ์์
ํ์ง๋ง ๋ค๋ฅธ ์ ๋ ๊ณผ์ ์ผ๋ก ๋ค๋ฅธ ํ์ค ํธ๋ฆฌ๊ฐ ๊ตฌ์ฑ๋ ์ ์๋๋ฐ ์ด๋ฌ๋ฉด ๋ชจํธํ ๋ฌธ๋ฒ์


๋ชจํธ์ฑ ์ ๊ฑฐ ๋ฐฉ๋ฒ
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด ๊ฒฐํฉ๊ท์น๊ณผ ์ฐ์ ์์๋ก ๋ชจํธ์ฑ์ ํด๊ฒฐํ ์ ์์
Precedence cascade : ์ ๋น๋จ๋ง๊ธฐํธ <term>๊ณผ ๋ฌธ๋ฒ ๊ท์น์ ์ถ๊ฐํ์ฌ ๋ฌธ๋ฒ์ ์ฐ์ ์์๋ฅผ ๊ฒฐ์

์๋ฅผ ๋ค๋ฉด "7 - 3- 2" ๋ ์ข ๊ฒฐํฉ ๋๋ ์ฐ ๊ฒฐํฉ์ ๋ ๊ฐ์ง๋ก ํ์ฑ ๊ฐ๋ฅํจ

BNF ๋ฌธ๋ฒ์ ์ข์ํ ๊ท์น์ ์ฌ์ฉํ๋ฉด ์ข-๊ฒฐํฉ ์ง์ ๊ฐ๋ฅ

<exp> ::= <exp> - <exp> ๋ฅผ <exp> ::= <exp> - <term> ์ผ๋ก ๋์นํด์ ์ข-๊ฒฐํฉ์ผ๋ก ํ์ฑ
๋๋, <exp> ::= <exp> - <exp> ๋ฅผ <exp> ::= <term> - <exp> ๋ก ๋์นํด์ ์ฐ-๊ฒฐํฉ ์ผ๋ก ํ์ฑ

<exp>
โ <exp> - <term>
โ <exp> - <term> - <term>
โ <term> - <term> - <term>
โ <factor> - <term> - <term>
โ <number> - <term> - <term>
โ 7 - <term> - <term>
โ 7 - <factor> - <term>
โ 7 - <number> - <term>
โ 7 - 3 - <term>
โ 7 - 3 - <factor>
โ 7 - 3 - <number>
โ 7 - 3 - 2
=> ์ ๊ทธ๋ฆผ์์ exp๊ฐ ์๊ธฐ ์์ ์ ์ผ์ชฝ์ ๋๋๊น ์ผ์ชฝ๋ถํฐ ์ค์ค์ด ๊ฒฐํฉ๋๋ ์ข-๊ฒฐํฉ์
๋ชจํธ์ฑ ํด๊ฒฐ์ ๋ํด ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ฉด
- + ๋ * ๊ฐ์ ์ฐ์ฐ ์ค ๋ฌด์จ ์ฐ์ฐ์ด ๋จผ์ ์ํ๋ ์ง๋ฅผ precedence cascade๋ก ๊ฒฐ์
- ๋์ผํ ์ฐ์ ์์์ ์ฐ์ฐ์ ๋ผ๋ฆฌ๋ ์ด๋ค ๋ฐฉํฅ์ผ๋ก ๊ฒฐํฉํ ์ง ๊ฒฐํฉ ๊ท์น(์ข/์ฐ-๊ฒฐํฉ)์ ๋ช ์
4.1.6 ๊ตฌ๋ฌธ๊ณผ ํ๋ก๊ทธ๋จ์ ์ ๋ขฐ์ฑ
๊ตฌ๋ฌธ (syntax) : ์ธ์ด์ ์ ๋ขฐ์ฑ์ ์ํฅ
FORTRAN
DO 10 I = 2.6
A(I) = B + C(I)
10 CONTINUE
FORTRAN์ ๊ณต๋ฐฑ(๋์ด์ฐ๊ธฐ)๋ฅผ ๋ฌด์ํ๋ ํน์ฑ์ด ์๊ธฐ์ ๊ธฐ์กด์ ์๋ํ๋ I๋ฅผ 2๋ถํฐ 6๊น์ง ๋ณํ์ํค๋ DO ๋ฃจํ๊ฐ ์๋๋ผ DO10I ๋ผ๋ ๋ณ์์ 2.6์ ํ ๋นํ๋ ๋ฌธ์ฅ์ผ๋ก ํด์๋จ
=> ' . ' ๋ง๊ณ ' , ' ๋ฅผ ์ฌ์ฉํด์ผํจ
PL/I
A = B = C;
PL/I ์์ ๋ค์ค๋ฐฐ์ ๋ฌธ์ ์๋ฏธ๋ A์ B์ C ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์
=> ๋ค์ค ๋ฐฐ์ ๋ฌธ์ด ์ฐ-๊ฒฐํฉ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก ๋จผ์ B=C ๊ฐ ํ๊ฐ๊ฐ ๋๊ณ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋ค์ A = (B = C) ๋ก ํ๊ฐ๋๋ฏ๋ก A ์ B ๋ชจ๋ C ๊ฐ์ ๊ฐ๊ฒ๋จ
์ด๋ณด์๋ ์ผ์ชฝ๋ถํฐ ํ๊ฐ๋๋์ค ์ ์ ๋ ์๊ธฐ์ ๊ต์ฅํ ๋ชจํธํ ๋ฌธ๋ฒ์
(์ฐ๊ฒฐํฉ์ธ์ง ์ข๊ฒฐํฉ์ธ์ง๋ฅผ ์๊ณ ์์ด์ผ ์ ํํ ๋์์ ์ดํดํ ์ ์๊ธฐ์ ๊ฐ๋
์ฑ๊ณผ ์ ๋ขฐ์ฑ ์ ํ)
Dangling else ๋ฌธ์
์ค์ฒฉ๋ if ๋ฌธ์์ else๋ ์ด๋ค if์ else์ธ๊ฐ?

4.2 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ตฌํ ๊ธฐ๋ฒ
์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ฒ์ญ ๋ฐ ์คํ
- Actual computer (hardware) - ๊ธฐ๊ณ์ด๋ง ์ดํด , software simulated computer - ์ค์ ํ๋์จ์ด ์์ ๋ง๋ค์ด์ง ๊ฐ์ ํ๊ฒฝ
ex. Cobol computer(๊ฐ์ ์ปดํจํฐ) โ ๋ฒ์ญ๊ธฐ ๊ตฌ์ฑ
(COBOL์ ๊ณ ๊ธ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ์ง์ CPU์์ ์คํํ ์ ์๊ณ COBOL ์ปดํจํฐ๋ผ๋ ๊ฐ์ ๊ฐ๋ ์ ๋ง๋๋ ๊ฒ์) - ๋ฒ์ญ๋ ํ๋ก๊ทธ๋จ ์คํ โ hardware + software(virtual computer)
(COBOL ์ปดํจํฐ = ์ค์ ์ปดํจํฐ + COBOL์ ํ๋ด๋ด๋ ๋ฒ์ญ๊ธฐ ์ํํธ์จ์ด) - ์ด๋ก ์ ์ผ๋ก ๊ณ ๊ธ ์ธ์ด๋ฅผ ๊ธฐ๊ณ์ธ์ด๋ก ํ๋ hardware ๊ตฌ์ฑ ๊ฐ๋ฅ
โ ์๋๋ ๋น ๋ฅผ ์ ์์ง๋ง ์ ์์ฑ, ๋น์ฉ์ ๋ฌธ์ ๋ก ์ ๊ธ ์์ค์ ์ธ์ด(C, ์ด์ ๋ธ๋ฆฌ)๋ฅผ ๊ธฐ๊ณ์ธ์ด๋ก ํ๋ ์ปดํจํฐ ์ ๊ณต - ์ฌ์ฉ์ : ๊ณ ๊ธ์ธ์ด ํ๋ก๊ทธ๋๋ฐ โ ๊ธฐ๊ณ : ์ ๊ธ ์ธ์ด ํ๋ก๊ทธ๋๋ฐ
(์ปดํ์ผ๋ฌ/์ธํฐํ๋ฆฌํฐ ๋ฑ ์ธ์ด๊ตฌํ ๊ณผ์ ์ ํตํด ๋ณํ)
4.2.1 ๋ฒ์ญ ๊ธฐ๋ฒ

์ปดํ์ผ ํ ๋ ๋ ์๋ ์ฃผ์ (์์์ ์ผ๋ก ๋ถํฐ +n ๋ฐ์ดํธ ํ์์ธ +10) ๋ฅผ ์ฃผ๊ณ ๋ง์ปค์์๋ง ์ ๋ ์ฃผ์(๋ฉ๋ชจ๋ฆฌ ์์ ์ ํํ ์์น์ธ 0x0040100 ~)๋ฅผ ์ค๋ฒ๋ฆด ์ ๋ ์๊ณ
์ปดํ์ผํ ๋ ๋ฏธ๋ฆฌ ์ ๋ ์ฃผ์๋ฅผ ์ค๋ฒ๋ฆด ์ ๋ ์์ด์ ๋ชฉ์ ๋ชจ๋๊ณผ ๋ก๋ ๋ชจ๋์ ์ผ์นํ ์ ๋ ์๊ณ ์ํ ์ ๋ ์์
๋ฒ์ญ๊ธฐ์ ์ข ๋ฅ
- ์ปดํ์ผ๋ฌ(compiler)
- ์์ ์ธ์ด : ๊ณ ๊ธ ์ธ์ด
- ๋ชฉ์ ์ธ์ด : ์ค์ ๊ธฐ๊ณ ์ธ์ด์ ๊ฐ๊น์ด ์ ๊ธ ์ธ์ด
=> ๋ชฉ์ ๋ชจ๋(.obj)๋ ๊ธฐ๊ณ์ด์ ์ ์ฌํ ์ ๊ธ ์ธ์ด์ง๋ง, ์์ง ์คํ์ ์๋จ!
(๋ง์ปค๋ฅผ ํตํด ์ฐ๊ฒฐ๋ผ์ผ ์คํ ๊ฐ๋ฅํ ํ์ผ์ด๋จ)
- ์์ ์ธ์ด : ๊ณ ๊ธ ์ธ์ด

ํฐ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ์์ค ํ์ผ๋ก ๋๋๊ณ ๊ฐ๊ฐ์ ๋ฐ๋ก ์ปดํ์ผํ ๋ค์ ๋์ค์ ๋งํฌํด์ ํ๋๋ก ๋ง๋๋ ๋ฐฉ์์ ๋ถ๋ฆฌ ์ปดํ์ผ์ด๋ผ๊ณ ํ๋๋ฐ Python ๊ฐ์ ์ธ์ด์์๋ ์ด๊ฒ ๋ถ๊ฐ๋ฅํ๊ธฐ์ ํฐ ํ๋ก์ ํธ์์ ๋ถ๋ฆฌํจ
(Python์์ ํฐ ํ๋ก์ ํธ๋ฅผ ๋ถ๋ฆฌํ๊ณ ์ถ์ผ๋ฉด ๋ชจ๋ํ ํด์ผํจ)
- ์ด์
๋ธ๋ฌ(assembler)
- ์์ ์ธ์ด : ์ด์
๋ธ๋ฆฌ ์ธ์ด
- ๋ชฉ์ ์ธ์ด : ์ค๊ธฐ๊ณ์ด ํํ
- ์์ ์ธ์ด : ์ด์
๋ธ๋ฆฌ ์ธ์ด
- ๋งํค์ง ์๋ํฐ(linkage editor)
- ์ฌ๋ฌ ๊ฐ์ ํ๋ก๊ทธ๋จ(์ฌ๋ฐฐ์น ํํ ๊ธฐ๊ณ์ด)์ ๋ฌถ์ด์ ๋ก๋ ๋ชจ๋ ์์ฑ
- ๋ก๋ ๋ชจ๋ : ์ด๋ ์ ๋ ์คํ ๊ฐ๋ฅํ ํ๋์ ๊ธฐ๊ณ์ด ํ๋ก๊ทธ๋จ
=>์ฌ๋ฌ ๊ฐ์ .obj ํ์ผ์ ๋ฌถ์ด์ .exeํ์ผ (๋ก๋ ๋ชจ๋) ์ ๋ง๋ค๊ณ ์ ๋ ์ฃผ์๋ฅผ ๋ถ์ฌํ ์ํ์
- ์ฌ๋ฌ ๊ฐ์ ํ๋ก๊ทธ๋จ(์ฌ๋ฐฐ์น ํํ ๊ธฐ๊ณ์ด)์ ๋ฌถ์ด์ ๋ก๋ ๋ชจ๋ ์์ฑ
- ๋ก๋(loader)
- ๊ธฐ๊ณ์ด ํ๋ก๊ทธ๋จ(๋ก๋ ๋ชจ๋)์ ์ค์ ์คํ ๊ฐ๋ฅํ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ์ฌ ์ฃผ๊ธฐ์ต ์ฅ์น์ ์ ์ฌ
=> .exe ๋ฅผ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ์ฌ๋ ค์ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด CPU์์ ์คํ ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์ด์ค
- ๊ธฐ๊ณ์ด ํ๋ก๊ทธ๋จ(๋ก๋ ๋ชจ๋)์ ์ค์ ์คํ ๊ฐ๋ฅํ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ์ฌ ์ฃผ๊ธฐ์ต ์ฅ์น์ ์ ์ฌ
- ํ๋ฆฌํ๋ก์ธ์(preprocessor)
- ์์ ์ธ์ด์ ๋ชฉ์ ์ธ์ด๊ฐ ๋ชจ๋ ๊ณ ๊ธ ์ธ์ด์ธ ๋ฒ์ญ๊ธฐ
- ๊ณ ๊ธ ์ธ์ด ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ๊ณ ๊ธ ์ธ์ด๋ก ๋ฒ์ญ ํ, ์ถ๋ ฅ๋ ๊ณ ๊ธ ์ธ์ด๋ฅผ ์ด๋ฏธ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์คํ์ํฌ ๋ ์ฌ์ฉ
- ๊ณ ๊ธ ์ธ์ด์ ๋ํ ์ธ์ด ํ์ฅํ์ฌ ๊ตฌํ ์ ์ ์ฉ (C++, concurrent C)
- ์์ ์ธ์ด์ ๋ชฉ์ ์ธ์ด๊ฐ ๋ชจ๋ ๊ณ ๊ธ ์ธ์ด์ธ ๋ฒ์ญ๊ธฐ
4.2.2 ์ธํฐํ๋ฆฌํฐ ๊ธฐ๋ฒ


4.2.3 ์ธํฐํ๋ฆฌํฐ ๊ธฐ๋ฒ๊ณผ ๋ฒ์ญ ๊ธฐ๋ฒ
๋ฒ์ญ๊ธฐ(์ปดํ์ผ๋ฌ) : ์์ ์ฝ๋์ ๋์ผํ ์๋ฏธ์ ๋ชฉ์ ์ฝ๋ ์์ฑ
์ธํฐํ๋ฆฌํฐ : ์์ ์ฝ๋๋ฅผ ๋ฌธ์ฅ ๋จ์๋ก ํด์ํ์ฌ ์ง์ ์คํ

์์ ๋ฒ์ญ ๊ธฐ๋ฒ : ๊ณ ๊ธ์ธ์ด๋ฅผ ๋ฒ์ญํ์ฌ ๋ฐ๋ก ์คํ
=> object module๋ก ๋ฒ์ญ -> link -> load -> ์คํ
(ํ ๋ฒ์ ์ ์ฒด ํ๋ก๊ทธ๋จ์ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๊ณ , ๊ทธ๊ฑธ ์คํํ๋ ๋ฐฉ์)
์์ ์๋ฎฌ๋ ์ด์
๊ธฐ๋ฒ : JCL, APL ๋ฑ
(๊ณ ๊ธ ์ธ์ด ํ๋ก๊ทธ๋จ์ ๊ธฐ๊ณ์ด๋ก ๋ฐ๊พธ์ง ์๊ณ , ์ธํฐํ๋ฆฌํฐ๊ฐ ๋ช
๋ น์ด๋ฅผ ์ง์ ์ฝ๊ณ ์ํํ๋ ๋ฐฉ์)
ํ์ค์์๋ ์์ ๋ฒ์ญ ๊ธฐ๋ฒ์์ ๋ณดํต ์ปดํ์ผํ ๋ค์๋ ๋ค์ํ ๋ฐํ์ ์์ ๋ค์ด ์๊ณ ์๋ฎฌ๋ ์ด์ ๊ธฐ๋ฒ์์๋ ์ค์ ๋ก๋ ํด์ + ๋ฒ์ญ + ์บ์ฑ ๋ฑ ๋ค์ํ ๊ธฐ๋ฒ์ด ์์ฌ ์๊ธฐ์ ์์ ๋ฒ์ญ ๊ธฐ๋ฒ์ด๋ ์์ ์๋ฎฌ๋ ์ด์ ๊ธฐ๋ฒ์ ์ค์ ๋ก ๊ฑฐ์ ์กด์ฌ์น ์์
์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ
๋ฒ์ญ ๊ธฐ๋ฒ(์ปดํ์ผ๋ฌ)์ ์ฅ๋จ์
- ์ฅ์ : ์คํ ์๊ฐ ํจ์จ์ฑ ์ ๊ณต (ํ ๋ฒ ๋์ฝ๋ฉ์ผ๋ก ๋ฐ๋ณต ์คํ)
=> ์ปดํ์ผ๋ฌ๋ ์์ค์ฝ๋๋ฅผ ํ ๋ฒ์ ์ ๋ถ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํด์ .exe, .out ๊ฐ์ ์คํํ์ผ๋ก ๋ง๋ค๊ณ ์ด ์คํํ์ผ์ ์ด๋ฏธ CPU๊ฐ ๋ฐ๋ก ์ดํดํ ์ ์๋ ๊ธฐ๊ณ์ด(binary)๋ก ๋์ด ์์ผ๋๊น, ์คํํ ๋ ๋ ์ด์ ํด์์ด ํ์ ์์ด ์คํ ๊ฐ๋ฅํจ
(์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํด์ ์คํํ๋ ๊ฒฝ์ฐ ๋น ๋ฅด๊ณ ํจ์จ์ ) - ๋จ์ : ๋ฒ์ญ๋ ํ๋ก๊ทธ๋จ์ด ํฐ ๊ธฐ์ต์ฅ์น(๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ) ์๊ตฌ (I/O routine ๋ฑ)
=> ์ปดํ์ผ๋ฌ๋ ์คํํ์ผ์ ๋ง๋ค ๋ ์ฌ์ฉ์๊ฐ ์์ฑํ ์ฝ๋๋ฟ ์๋๋ผ, ํ์ํ ํ์ค ์ ์ถ๋ ฅ ๋ฃจํด(I/O routine), ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋, ๋ฐํ์ ํ๊ฒฝ ๋ฑ์ ์ ๋ถ ํฌํจ์ํค๊ธฐ์ ์คํํ์ผ์ ๋ฉ์น๊ฐ ์ปค์ง๊ณ ๋ฉ๋ชจ๋ฆฌ(RAM)๋ ๋์คํฌ ์ ์ฅ ๊ณต๊ฐ์ด ๋ ํ์ํจ
์ธํฐํ๋ฆฌํฐ ๊ธฐ๋ฒ์ ์ฅ๋จ์
- ๋ฒ์ญ ๊ธฐ๋ฒ๊ณผ ์ฅ๋จ์ ์ด ๋ฐ๋์
- ์ฌ์ฉ์ ์ ์ฐ์ฑ(flexibility) ์ ๊ณต
=> ์ฝ๋๋ฅผ ์กฐ๊ธ ๋ฐ๊พธ๊ณ ์ปดํ์ผ ์์ด ๊ณง๋ฐ๋ก ์คํ ๊ฐ๋ฅ
(ํ ์ค ํ ์ค ์คํํ๊ธฐ์ ์ํ๋ ๋ถ๋ถ๋ง ํ ์คํธํ๊ฑฐ๋ ์คํํด๋ณผ ์ ์์)
ํ์ด๋ธ๋ฆฌ๋ ๊ธฐ๋ฒ

ํ๋ก๊ทธ๋จ์ ์คํ์ํค๊ธฐ ์ฌ์ด ํํ๋ก ๋ฒ์ญํ ํ, ๊ทธ ๋ฒ์ญ๋ ํํ์ ํ๋ก๊ทธ๋จ์ ๋์ฝ๋ํ์ฌ ์๋ฎฌ๋ ์ด์
์ผ๋ก ์คํ
ํ์ฌ ๋๋ถ๋ถ์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๊ฐ ์ด ๋ฐฉ๋ฒ์ ๋ฐ๋ฆ
(์ค๊ฐ ํํ ์ฝ๋๊ฐ ์ ๊ธ์ด๋ฉด ๋ฒ์ญ ๊ธฐ๋ฒ์ผ๋ก ๊ฐ์ฃผ๋๊ธฐ๋ํจ)
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ค๊ณ (1) | 2025.04.16 |
---|---|
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ์ธ์ด์ ๋ณ์ฒ (0) | 2025.04.12 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] Concepts of Programming Languages (0) | 2025.03.29 |
[Java] int ์ Integer ์ฐจ์ด (0) | 2025.03.21 |
Java๋ ์ปดํ์ผ ์ธ์ด์ผ๊น? ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ผ๊น? (0) | 2025.03.10 |
์ด ๊ธ์ ๊ตญ๋ฏผ๋ํ๊ต ๊ฐ์น์ ๊ต์๋์ 'ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ' ์์ ์ ํ ๋๋ก
๊ฐ์ธ์ ์ผ๋ก ํ์ตํ ๋ด์ฉ์ ๋๋ค.
4.1 ์ธ์ด ๊ตฌ๋ฌธ
๊ณ ๊ธ์ธ์ด๋ฅผ ์ ์ํ ๋๋ ๋ ๊ฐ์ง ์ธก๋ฉด์์ ์ค๋ช
์ด ํ์ํจ
- ๊ตฌ๋ฌธ : ๋ฌธ๋ฒ์ ์ธ ํ์ (Syntax)
- ์๋ฏธ : ๋์์ ์๋ฏธ (Semantics)
์ฌ๋์ด ์ฝ๋ ์์ฐ์ด๋ก ์ค๋ช
ํ๋ ์์ฐ์ด ์ ์์ ์ํ์ ๊ธฐํธ๋ ํ์ ์ธ์ด(BNF ๋ฑ) ์ผ๋ก ์ ํํ๊ฒ ์ ์ํ๋ ํ์ ์ ์๊ฐ ์์
=> ๊ตฌ๋ฌธ ํ์ ์ ์์ ์ข
๋ฅ์๋ BNF, EBNF, ๊ตฌ๋ฌธ ๋ํ ๋ฑ์ด ์์

๊ณ ๊ธ ์ธ์ด ํ๋ก๊ทธ๋๋จธ๋ ์ปดํจํฐ๋ฅผ ๊ฐ์์ ๊ณ ๊ธ ์ธ์ด ์ปดํจํฐ๋ก ๊ฐ์ฃผํจ
=> ์ฆ, ๊ฐ๋ฐ์๋ง๋ค ์ปดํจํฐ ํ๋์จ์ด๋ฅผ ๋ณด๋ ๊ด์ ์ด ๋ค๋ฆ
4.1.1 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ดํ๊ตฌ์กฐ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ธฐ๋ณธ ๋ฌธ์ ์งํฉ์ ์ํ๋ฒณ ๋ฌธ์ 26๊ฐ(A - Z) + ์๋ผ๋น์ ์ซ์ 10๊ฐ (0 - 9) ์
=> Fortran์ ๊ฒฝ์ฐ๋ ๊ธฐ๋ณธ ๋ฌธ์ ์งํฉ์ 13๊ฐ์ ํน์๋ฌธ์๋ฅผ ๋ํด์ 49๊ฐ์ ๋ฌธ์๋ง ์ฌ์ฉ
=> Algol 60์ ๊ฒฝ์ฐ๋ ์ํ๋ฒณ ๋์๋ฌธ์ 52๊ฐ + ์๋ผ๋น์ ์ซ์ 10๊ฐ + 28๊ฐ์ ํน์๋ฌธ์๋ฅผ ์ฌ์ฉ
๋ฌธ์ ์ฝ๋ ์ฒด๊ณ
- 1. EBCDIC
IBM์์ ์ ์, 8๋นํธ ์กฐํฉ ์ฝ๋ - 2. ASCII (๊ฐ์ธ์ฉ ์ปดํจํฐ๊ฐ ์๋ฆฌ์ก์ผ๋ฉด์ ๋์คํ)
ANSI์์ ์ ์, 7๋นํธ ์กฐํฉ ์ฝ๋(128๊ฐ์ ๋ฌธ์ ํํ)
-> ์๋ฌธ์ ๋์๋ฌธ์ 52๊ฐ + ์ซ์ 10๊ฐ + 33๊ฐ์ ํน์๋ฌธ์ + 33๊ฐ์ ์ ์ด๋ฌธ์ - 3. Unicode
16 bit(BMP) - ์ด์ฐฝ๊ธฐ, 21 bit(SMP) - ํ์ฌ
-> Java, Python ๋ฑ์์ ๊ธฐ๋ณธ ์ธ์ฝ๋ฉ์ผ๋ก ์ฌ์ฉ๋จ (UTF-8 ํ์)
(Unicode๋ ๊ทธ๋ฅ ์ ์ํ๋ ๋ฌธ์ํ์ธ๊ฑฐ๊ณ UTF-8์ ๊ทธ๊ฑธ ์ ์ฅํ๋ ๋ฐฉ์ ์ฆ, ์ธ์ฝ๋ฉ ํ์์ -> Unicode๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ ์ค ํ๋)
์ ํฉ ์์(collating sequence) : ๋ฌธ์๋ค ๊ฐ์ ์์
=> ์ธ์ด์ ์ ๊ณต๋ ๋ฌธ์ ์์, ์ผ๋ฐ ์์ ์งํด
(์๋ฅผ ๋ค์ด, ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ์ง ์ ํด์ผ ํ ๋ ํ์ํจ)
ex. 0 < 1 < 2 < .. < 9
ex. A < B < C < ... < Y < Z
ํน์ ๋ฌธ์ ์์
=> ์ฝ๋ ์ฒด๊ณ ๋ฐ๋ฆ (๊ตฌํ์ ๊ฒฐ์ )
(ASCII์์ A๋ 65, a๋ 97๋ก ๋๋ฌธ์๊ฐ ์๋ฌธ์ ๋ณด๋ค ์์ฌ -> ์ฌ์ฉํ๋ ๋ฌธ์ ์ธ์ฝ๋ฉ ์ฒด๊ณ๋ฅผ ๋ฐ๋ฆ)
RPG, SNOBOL ๊ฐ์ ๊ณ ์ ์ธ์ด๋ค์์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ์ ํฉ ์์๋ฅผ ์ ์ํ ์ ์์
4.1.2 ๋ฌธ๋งฅ ์์ ๋ฌธ๋ฒ๊ณผ BNF, EBNF
BNF (Backus-Naur Form) ํ๊ธฐ๋ฒ
- ๊ตฌ๋ฌธ(syntax) ํ์์ ์ ์ํ๋ ๊ฐ์ฅ ๋ณดํธ์ ์ธ ํ๊ธฐ๋ฒ
- ํ ์ธ์ด์ ๊ตฌ๋ฌธ์ ๋ํ BNF ์ ์
=> ์ธ์ด์ ๋ฌธ์ฅ์ ์์ฑํ๋ ์์ฑ ๊ท์น(Production rule) ์ ์ - ์์ฑ ๊ท์น
=> ์์ฑ ๊ท์น์ ์ผ์ชฝ (์ ์๋ ๋์), ์ค๋ฅธ์ชฝ์๋ ๊ทธ ๋์์ ๋ํ ์ ์

๋ฉํ ๊ธฐํธ
::= ์ ์ํ๋ค
<> ๋น๋จ๋ง๊ธฐํธ(nonterminal symbol)
| ํ์ผ ๊ธฐํธ
EBNF (Extended Backus - Naur Form)
- BNF ํ๊ธฐ๋ฒ์ ํ์ฅ
=> BNF ๋ณด๋ค ์ฝ๊ธฐ ์ฝ๊ณ , ๊ฐ๋จํ๊ฒ ํํ๋ ํ๊ธฐ๋ฒ
- BNF์ ์ถ๊ฐ๋ EBNF์ ๋ฉํ ๊ธฐํธ
- ๋ฐ๋ณต : { }
- ์ ํ : [ ]
- ํ์ผ : (a | b)
- ๋ฐ๋ณต : { }
{ }, [ ], |, ( ), ::= ์ ๊ฐ์ ๋ฉํ ๊ธฐํธ๋ฅผ terminal ๊ธฐํธ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, โ|โ, โ::=โ ์ ๊ฐ์ด ์ธ์ฉ๋ถํธ๋ก ๋ฌถ์ด ํํ
4.1.3 ๊ตฌ๋ฌธ ๋ํ (Syntax diagram)
๊ตฌ๋ฌธ ๋ํ๋ ๊ทธ ํํ๊ฐ ์์๋์ ์ ์ฌ

๊ตฌ๋ฌธ ๋ํ๋ EBNF์ ์ผ๋์ผ ๋์์
- ๋ค์ ์ ์๋ ๋์(nonterminal)์ ๋ค๋ชจ์นธ
- ๋จ๋ง ๊ธฐํธ(terminal)๋ ์์ด๋ ํ์ํ์ผ๋ก ํ์ํ๊ณ ์ง์์ ์ผ๋ก ์ฐ๊ฒฐ
๊ตฌ๋ฌธ ๋ํ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ




4.1.4 ํ์ค ํธ๋ฆฌ์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ
ํ์ค ํธ๋ฆฌ(parse tree)
- ์์ ํ๋ก๊ทธ๋จ์ ๋ฌธ์ฅ ๋ถ์ ๊ณผ์ ์์ ์์ฑ๋๋ ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ
- ์ด๋ค ๋ฌธ์ฅ์ด BNF์ ์ํด ์ฑ์ฑ๋ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋

4.1.5 ๋ชจํธ์ฑ, ๊ฒฐํฉ์ฑ ๋ฐ ์ฐ์ ์์
๋ชจํธ(ambiguous)๋ ๊ฐ์ ๋ฌธ์ฅ์ ๋ํด ๋ ๊ฐ์ง ํ์ค ํธ๋ฆฌ๊ฐ ์์ฑ๋๋ ๊ฒ์
์ฒซ ๋ฒ์งธ ์์

์์ BNF๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋ก ๋ค๋ฅธ ์ ๋ ๊ณผ์ ์ ๊ฑฐ์ณ "B 3 3" ์ด ์์ฑ๋๋ ๊ฒ์ ๋ณด๋ฉด
1. <identifier>
โ <identifier> <digit>
โ <identifier> 3
โ <identifier> <digit> 3
โ <identifier> 3 3
โ <letter> 3 3
โ B 3 3
2. <identifier>
โ <identifier> <digit>
โ <identifier> <digit> <digit>
โ <letter> <digit> <digit>
โ B <digit> <digit>
โ B 3 <digit>
โ B 3 3
์ธ๋ฐ ์ด ๋ ์ ๋ ๊ณผ์ ์ ๊ฒฐ๊ณผ๋ก ๋์ค๋ parse tree์ ๋ชจ์์ด ๋์ผํ๋ฉด ์๊ด ์์

๋ ๋ฒ์งธ ์์
ํ์ง๋ง ๋ค๋ฅธ ์ ๋ ๊ณผ์ ์ผ๋ก ๋ค๋ฅธ ํ์ค ํธ๋ฆฌ๊ฐ ๊ตฌ์ฑ๋ ์ ์๋๋ฐ ์ด๋ฌ๋ฉด ๋ชจํธํ ๋ฌธ๋ฒ์


๋ชจํธ์ฑ ์ ๊ฑฐ ๋ฐฉ๋ฒ
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด ๊ฒฐํฉ๊ท์น๊ณผ ์ฐ์ ์์๋ก ๋ชจํธ์ฑ์ ํด๊ฒฐํ ์ ์์
Precedence cascade : ์ ๋น๋จ๋ง๊ธฐํธ <term>๊ณผ ๋ฌธ๋ฒ ๊ท์น์ ์ถ๊ฐํ์ฌ ๋ฌธ๋ฒ์ ์ฐ์ ์์๋ฅผ ๊ฒฐ์

์๋ฅผ ๋ค๋ฉด "7 - 3- 2" ๋ ์ข ๊ฒฐํฉ ๋๋ ์ฐ ๊ฒฐํฉ์ ๋ ๊ฐ์ง๋ก ํ์ฑ ๊ฐ๋ฅํจ

BNF ๋ฌธ๋ฒ์ ์ข์ํ ๊ท์น์ ์ฌ์ฉํ๋ฉด ์ข-๊ฒฐํฉ ์ง์ ๊ฐ๋ฅ

<exp> ::= <exp> - <exp> ๋ฅผ <exp> ::= <exp> - <term> ์ผ๋ก ๋์นํด์ ์ข-๊ฒฐํฉ์ผ๋ก ํ์ฑ
๋๋, <exp> ::= <exp> - <exp> ๋ฅผ <exp> ::= <term> - <exp> ๋ก ๋์นํด์ ์ฐ-๊ฒฐํฉ ์ผ๋ก ํ์ฑ

<exp>
โ <exp> - <term>
โ <exp> - <term> - <term>
โ <term> - <term> - <term>
โ <factor> - <term> - <term>
โ <number> - <term> - <term>
โ 7 - <term> - <term>
โ 7 - <factor> - <term>
โ 7 - <number> - <term>
โ 7 - 3 - <term>
โ 7 - 3 - <factor>
โ 7 - 3 - <number>
โ 7 - 3 - 2
=> ์ ๊ทธ๋ฆผ์์ exp๊ฐ ์๊ธฐ ์์ ์ ์ผ์ชฝ์ ๋๋๊น ์ผ์ชฝ๋ถํฐ ์ค์ค์ด ๊ฒฐํฉ๋๋ ์ข-๊ฒฐํฉ์
๋ชจํธ์ฑ ํด๊ฒฐ์ ๋ํด ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ฉด
- + ๋ * ๊ฐ์ ์ฐ์ฐ ์ค ๋ฌด์จ ์ฐ์ฐ์ด ๋จผ์ ์ํ๋ ์ง๋ฅผ precedence cascade๋ก ๊ฒฐ์
- ๋์ผํ ์ฐ์ ์์์ ์ฐ์ฐ์ ๋ผ๋ฆฌ๋ ์ด๋ค ๋ฐฉํฅ์ผ๋ก ๊ฒฐํฉํ ์ง ๊ฒฐํฉ ๊ท์น(์ข/์ฐ-๊ฒฐํฉ)์ ๋ช ์
4.1.6 ๊ตฌ๋ฌธ๊ณผ ํ๋ก๊ทธ๋จ์ ์ ๋ขฐ์ฑ
๊ตฌ๋ฌธ (syntax) : ์ธ์ด์ ์ ๋ขฐ์ฑ์ ์ํฅ
FORTRAN
DO 10 I = 2.6
A(I) = B + C(I)
10 CONTINUE
FORTRAN์ ๊ณต๋ฐฑ(๋์ด์ฐ๊ธฐ)๋ฅผ ๋ฌด์ํ๋ ํน์ฑ์ด ์๊ธฐ์ ๊ธฐ์กด์ ์๋ํ๋ I๋ฅผ 2๋ถํฐ 6๊น์ง ๋ณํ์ํค๋ DO ๋ฃจํ๊ฐ ์๋๋ผ DO10I ๋ผ๋ ๋ณ์์ 2.6์ ํ ๋นํ๋ ๋ฌธ์ฅ์ผ๋ก ํด์๋จ
=> ' . ' ๋ง๊ณ ' , ' ๋ฅผ ์ฌ์ฉํด์ผํจ
PL/I
A = B = C;
PL/I ์์ ๋ค์ค๋ฐฐ์ ๋ฌธ์ ์๋ฏธ๋ A์ B์ C ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์
=> ๋ค์ค ๋ฐฐ์ ๋ฌธ์ด ์ฐ-๊ฒฐํฉ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก ๋จผ์ B=C ๊ฐ ํ๊ฐ๊ฐ ๋๊ณ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋ค์ A = (B = C) ๋ก ํ๊ฐ๋๋ฏ๋ก A ์ B ๋ชจ๋ C ๊ฐ์ ๊ฐ๊ฒ๋จ
์ด๋ณด์๋ ์ผ์ชฝ๋ถํฐ ํ๊ฐ๋๋์ค ์ ์ ๋ ์๊ธฐ์ ๊ต์ฅํ ๋ชจํธํ ๋ฌธ๋ฒ์
(์ฐ๊ฒฐํฉ์ธ์ง ์ข๊ฒฐํฉ์ธ์ง๋ฅผ ์๊ณ ์์ด์ผ ์ ํํ ๋์์ ์ดํดํ ์ ์๊ธฐ์ ๊ฐ๋
์ฑ๊ณผ ์ ๋ขฐ์ฑ ์ ํ)
Dangling else ๋ฌธ์
์ค์ฒฉ๋ if ๋ฌธ์์ else๋ ์ด๋ค if์ else์ธ๊ฐ?

4.2 ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ตฌํ ๊ธฐ๋ฒ
์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ฒ์ญ ๋ฐ ์คํ
- Actual computer (hardware) - ๊ธฐ๊ณ์ด๋ง ์ดํด , software simulated computer - ์ค์ ํ๋์จ์ด ์์ ๋ง๋ค์ด์ง ๊ฐ์ ํ๊ฒฝ
ex. Cobol computer(๊ฐ์ ์ปดํจํฐ) โ ๋ฒ์ญ๊ธฐ ๊ตฌ์ฑ
(COBOL์ ๊ณ ๊ธ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ์ง์ CPU์์ ์คํํ ์ ์๊ณ COBOL ์ปดํจํฐ๋ผ๋ ๊ฐ์ ๊ฐ๋ ์ ๋ง๋๋ ๊ฒ์) - ๋ฒ์ญ๋ ํ๋ก๊ทธ๋จ ์คํ โ hardware + software(virtual computer)
(COBOL ์ปดํจํฐ = ์ค์ ์ปดํจํฐ + COBOL์ ํ๋ด๋ด๋ ๋ฒ์ญ๊ธฐ ์ํํธ์จ์ด) - ์ด๋ก ์ ์ผ๋ก ๊ณ ๊ธ ์ธ์ด๋ฅผ ๊ธฐ๊ณ์ธ์ด๋ก ํ๋ hardware ๊ตฌ์ฑ ๊ฐ๋ฅ
โ ์๋๋ ๋น ๋ฅผ ์ ์์ง๋ง ์ ์์ฑ, ๋น์ฉ์ ๋ฌธ์ ๋ก ์ ๊ธ ์์ค์ ์ธ์ด(C, ์ด์ ๋ธ๋ฆฌ)๋ฅผ ๊ธฐ๊ณ์ธ์ด๋ก ํ๋ ์ปดํจํฐ ์ ๊ณต - ์ฌ์ฉ์ : ๊ณ ๊ธ์ธ์ด ํ๋ก๊ทธ๋๋ฐ โ ๊ธฐ๊ณ : ์ ๊ธ ์ธ์ด ํ๋ก๊ทธ๋๋ฐ
(์ปดํ์ผ๋ฌ/์ธํฐํ๋ฆฌํฐ ๋ฑ ์ธ์ด๊ตฌํ ๊ณผ์ ์ ํตํด ๋ณํ)
4.2.1 ๋ฒ์ญ ๊ธฐ๋ฒ

์ปดํ์ผ ํ ๋ ๋ ์๋ ์ฃผ์ (์์์ ์ผ๋ก ๋ถํฐ +n ๋ฐ์ดํธ ํ์์ธ +10) ๋ฅผ ์ฃผ๊ณ ๋ง์ปค์์๋ง ์ ๋ ์ฃผ์(๋ฉ๋ชจ๋ฆฌ ์์ ์ ํํ ์์น์ธ 0x0040100 ~)๋ฅผ ์ค๋ฒ๋ฆด ์ ๋ ์๊ณ
์ปดํ์ผํ ๋ ๋ฏธ๋ฆฌ ์ ๋ ์ฃผ์๋ฅผ ์ค๋ฒ๋ฆด ์ ๋ ์์ด์ ๋ชฉ์ ๋ชจ๋๊ณผ ๋ก๋ ๋ชจ๋์ ์ผ์นํ ์ ๋ ์๊ณ ์ํ ์ ๋ ์์
๋ฒ์ญ๊ธฐ์ ์ข ๋ฅ
- ์ปดํ์ผ๋ฌ(compiler)
- ์์ ์ธ์ด : ๊ณ ๊ธ ์ธ์ด
- ๋ชฉ์ ์ธ์ด : ์ค์ ๊ธฐ๊ณ ์ธ์ด์ ๊ฐ๊น์ด ์ ๊ธ ์ธ์ด
=> ๋ชฉ์ ๋ชจ๋(.obj)๋ ๊ธฐ๊ณ์ด์ ์ ์ฌํ ์ ๊ธ ์ธ์ด์ง๋ง, ์์ง ์คํ์ ์๋จ!
(๋ง์ปค๋ฅผ ํตํด ์ฐ๊ฒฐ๋ผ์ผ ์คํ ๊ฐ๋ฅํ ํ์ผ์ด๋จ)
- ์์ ์ธ์ด : ๊ณ ๊ธ ์ธ์ด

ํฐ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ์์ค ํ์ผ๋ก ๋๋๊ณ ๊ฐ๊ฐ์ ๋ฐ๋ก ์ปดํ์ผํ ๋ค์ ๋์ค์ ๋งํฌํด์ ํ๋๋ก ๋ง๋๋ ๋ฐฉ์์ ๋ถ๋ฆฌ ์ปดํ์ผ์ด๋ผ๊ณ ํ๋๋ฐ Python ๊ฐ์ ์ธ์ด์์๋ ์ด๊ฒ ๋ถ๊ฐ๋ฅํ๊ธฐ์ ํฐ ํ๋ก์ ํธ์์ ๋ถ๋ฆฌํจ
(Python์์ ํฐ ํ๋ก์ ํธ๋ฅผ ๋ถ๋ฆฌํ๊ณ ์ถ์ผ๋ฉด ๋ชจ๋ํ ํด์ผํจ)
- ์ด์
๋ธ๋ฌ(assembler)
- ์์ ์ธ์ด : ์ด์
๋ธ๋ฆฌ ์ธ์ด
- ๋ชฉ์ ์ธ์ด : ์ค๊ธฐ๊ณ์ด ํํ
- ์์ ์ธ์ด : ์ด์
๋ธ๋ฆฌ ์ธ์ด
- ๋งํค์ง ์๋ํฐ(linkage editor)
- ์ฌ๋ฌ ๊ฐ์ ํ๋ก๊ทธ๋จ(์ฌ๋ฐฐ์น ํํ ๊ธฐ๊ณ์ด)์ ๋ฌถ์ด์ ๋ก๋ ๋ชจ๋ ์์ฑ
- ๋ก๋ ๋ชจ๋ : ์ด๋ ์ ๋ ์คํ ๊ฐ๋ฅํ ํ๋์ ๊ธฐ๊ณ์ด ํ๋ก๊ทธ๋จ
=>์ฌ๋ฌ ๊ฐ์ .obj ํ์ผ์ ๋ฌถ์ด์ .exeํ์ผ (๋ก๋ ๋ชจ๋) ์ ๋ง๋ค๊ณ ์ ๋ ์ฃผ์๋ฅผ ๋ถ์ฌํ ์ํ์
- ์ฌ๋ฌ ๊ฐ์ ํ๋ก๊ทธ๋จ(์ฌ๋ฐฐ์น ํํ ๊ธฐ๊ณ์ด)์ ๋ฌถ์ด์ ๋ก๋ ๋ชจ๋ ์์ฑ
- ๋ก๋(loader)
- ๊ธฐ๊ณ์ด ํ๋ก๊ทธ๋จ(๋ก๋ ๋ชจ๋)์ ์ค์ ์คํ ๊ฐ๋ฅํ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ์ฌ ์ฃผ๊ธฐ์ต ์ฅ์น์ ์ ์ฌ
=> .exe ๋ฅผ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ์ฌ๋ ค์ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด CPU์์ ์คํ ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์ด์ค
- ๊ธฐ๊ณ์ด ํ๋ก๊ทธ๋จ(๋ก๋ ๋ชจ๋)์ ์ค์ ์คํ ๊ฐ๋ฅํ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ์ฌ ์ฃผ๊ธฐ์ต ์ฅ์น์ ์ ์ฌ
- ํ๋ฆฌํ๋ก์ธ์(preprocessor)
- ์์ ์ธ์ด์ ๋ชฉ์ ์ธ์ด๊ฐ ๋ชจ๋ ๊ณ ๊ธ ์ธ์ด์ธ ๋ฒ์ญ๊ธฐ
- ๊ณ ๊ธ ์ธ์ด ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ๊ณ ๊ธ ์ธ์ด๋ก ๋ฒ์ญ ํ, ์ถ๋ ฅ๋ ๊ณ ๊ธ ์ธ์ด๋ฅผ ์ด๋ฏธ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์คํ์ํฌ ๋ ์ฌ์ฉ
- ๊ณ ๊ธ ์ธ์ด์ ๋ํ ์ธ์ด ํ์ฅํ์ฌ ๊ตฌํ ์ ์ ์ฉ (C++, concurrent C)
- ์์ ์ธ์ด์ ๋ชฉ์ ์ธ์ด๊ฐ ๋ชจ๋ ๊ณ ๊ธ ์ธ์ด์ธ ๋ฒ์ญ๊ธฐ
4.2.2 ์ธํฐํ๋ฆฌํฐ ๊ธฐ๋ฒ


4.2.3 ์ธํฐํ๋ฆฌํฐ ๊ธฐ๋ฒ๊ณผ ๋ฒ์ญ ๊ธฐ๋ฒ
๋ฒ์ญ๊ธฐ(์ปดํ์ผ๋ฌ) : ์์ ์ฝ๋์ ๋์ผํ ์๋ฏธ์ ๋ชฉ์ ์ฝ๋ ์์ฑ
์ธํฐํ๋ฆฌํฐ : ์์ ์ฝ๋๋ฅผ ๋ฌธ์ฅ ๋จ์๋ก ํด์ํ์ฌ ์ง์ ์คํ

์์ ๋ฒ์ญ ๊ธฐ๋ฒ : ๊ณ ๊ธ์ธ์ด๋ฅผ ๋ฒ์ญํ์ฌ ๋ฐ๋ก ์คํ
=> object module๋ก ๋ฒ์ญ -> link -> load -> ์คํ
(ํ ๋ฒ์ ์ ์ฒด ํ๋ก๊ทธ๋จ์ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๊ณ , ๊ทธ๊ฑธ ์คํํ๋ ๋ฐฉ์)
์์ ์๋ฎฌ๋ ์ด์
๊ธฐ๋ฒ : JCL, APL ๋ฑ
(๊ณ ๊ธ ์ธ์ด ํ๋ก๊ทธ๋จ์ ๊ธฐ๊ณ์ด๋ก ๋ฐ๊พธ์ง ์๊ณ , ์ธํฐํ๋ฆฌํฐ๊ฐ ๋ช
๋ น์ด๋ฅผ ์ง์ ์ฝ๊ณ ์ํํ๋ ๋ฐฉ์)
ํ์ค์์๋ ์์ ๋ฒ์ญ ๊ธฐ๋ฒ์์ ๋ณดํต ์ปดํ์ผํ ๋ค์๋ ๋ค์ํ ๋ฐํ์ ์์ ๋ค์ด ์๊ณ ์๋ฎฌ๋ ์ด์ ๊ธฐ๋ฒ์์๋ ์ค์ ๋ก๋ ํด์ + ๋ฒ์ญ + ์บ์ฑ ๋ฑ ๋ค์ํ ๊ธฐ๋ฒ์ด ์์ฌ ์๊ธฐ์ ์์ ๋ฒ์ญ ๊ธฐ๋ฒ์ด๋ ์์ ์๋ฎฌ๋ ์ด์ ๊ธฐ๋ฒ์ ์ค์ ๋ก ๊ฑฐ์ ์กด์ฌ์น ์์
์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ
๋ฒ์ญ ๊ธฐ๋ฒ(์ปดํ์ผ๋ฌ)์ ์ฅ๋จ์
- ์ฅ์ : ์คํ ์๊ฐ ํจ์จ์ฑ ์ ๊ณต (ํ ๋ฒ ๋์ฝ๋ฉ์ผ๋ก ๋ฐ๋ณต ์คํ)
=> ์ปดํ์ผ๋ฌ๋ ์์ค์ฝ๋๋ฅผ ํ ๋ฒ์ ์ ๋ถ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํด์ .exe, .out ๊ฐ์ ์คํํ์ผ๋ก ๋ง๋ค๊ณ ์ด ์คํํ์ผ์ ์ด๋ฏธ CPU๊ฐ ๋ฐ๋ก ์ดํดํ ์ ์๋ ๊ธฐ๊ณ์ด(binary)๋ก ๋์ด ์์ผ๋๊น, ์คํํ ๋ ๋ ์ด์ ํด์์ด ํ์ ์์ด ์คํ ๊ฐ๋ฅํจ
(์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํด์ ์คํํ๋ ๊ฒฝ์ฐ ๋น ๋ฅด๊ณ ํจ์จ์ ) - ๋จ์ : ๋ฒ์ญ๋ ํ๋ก๊ทธ๋จ์ด ํฐ ๊ธฐ์ต์ฅ์น(๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ) ์๊ตฌ (I/O routine ๋ฑ)
=> ์ปดํ์ผ๋ฌ๋ ์คํํ์ผ์ ๋ง๋ค ๋ ์ฌ์ฉ์๊ฐ ์์ฑํ ์ฝ๋๋ฟ ์๋๋ผ, ํ์ํ ํ์ค ์ ์ถ๋ ฅ ๋ฃจํด(I/O routine), ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋, ๋ฐํ์ ํ๊ฒฝ ๋ฑ์ ์ ๋ถ ํฌํจ์ํค๊ธฐ์ ์คํํ์ผ์ ๋ฉ์น๊ฐ ์ปค์ง๊ณ ๋ฉ๋ชจ๋ฆฌ(RAM)๋ ๋์คํฌ ์ ์ฅ ๊ณต๊ฐ์ด ๋ ํ์ํจ
์ธํฐํ๋ฆฌํฐ ๊ธฐ๋ฒ์ ์ฅ๋จ์
- ๋ฒ์ญ ๊ธฐ๋ฒ๊ณผ ์ฅ๋จ์ ์ด ๋ฐ๋์
- ์ฌ์ฉ์ ์ ์ฐ์ฑ(flexibility) ์ ๊ณต
=> ์ฝ๋๋ฅผ ์กฐ๊ธ ๋ฐ๊พธ๊ณ ์ปดํ์ผ ์์ด ๊ณง๋ฐ๋ก ์คํ ๊ฐ๋ฅ
(ํ ์ค ํ ์ค ์คํํ๊ธฐ์ ์ํ๋ ๋ถ๋ถ๋ง ํ ์คํธํ๊ฑฐ๋ ์คํํด๋ณผ ์ ์์)
ํ์ด๋ธ๋ฆฌ๋ ๊ธฐ๋ฒ

ํ๋ก๊ทธ๋จ์ ์คํ์ํค๊ธฐ ์ฌ์ด ํํ๋ก ๋ฒ์ญํ ํ, ๊ทธ ๋ฒ์ญ๋ ํํ์ ํ๋ก๊ทธ๋จ์ ๋์ฝ๋ํ์ฌ ์๋ฎฌ๋ ์ด์
์ผ๋ก ์คํ
ํ์ฌ ๋๋ถ๋ถ์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๊ฐ ์ด ๋ฐฉ๋ฒ์ ๋ฐ๋ฆ
(์ค๊ฐ ํํ ์ฝ๋๊ฐ ์ ๊ธ์ด๋ฉด ๋ฒ์ญ ๊ธฐ๋ฒ์ผ๋ก ๊ฐ์ฃผ๋๊ธฐ๋ํจ)
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ค๊ณ (1) | 2025.04.16 |
---|---|
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ์ธ์ด์ ๋ณ์ฒ (0) | 2025.04.12 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] Concepts of Programming Languages (0) | 2025.03.29 |
[Java] int ์ Integer ์ฐจ์ด (0) | 2025.03.21 |
Java๋ ์ปดํ์ผ ์ธ์ด์ผ๊น? ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ผ๊น? (0) | 2025.03.10 |