๋ฐ˜์‘ํ˜•

 

 

์ด ๊ธ€์€ ๊ตญ๋ฏผ๋Œ€ํ•™๊ต ๊ฐ•์Šน์‹ ๊ต์ˆ˜๋‹˜์˜ 'ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด๋ก ' ์ˆ˜์—…์„ ํ† ๋Œ€๋กœ
๊ฐœ์ธ์ ์œผ๋กœ ํ•™์Šตํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

 

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) ์ •์˜

  • ์ƒ์„ฑ ๊ทœ์น™

    => ์ƒ์„ฑ ๊ทœ์น™์˜ ์™ผ์ชฝ (์ •์˜๋  ๋Œ€์ƒ), ์˜ค๋ฅธ์ชฝ์—๋Š” ๊ทธ ๋Œ€์ƒ์— ๋Œ€ํ•œ ์ •์˜

 

BNF ํ‘œ๊ธฐ๋ฒ•์— ์˜ํ•œ ์‹๋ณ„์ž(identifier) ์ •์˜

 

 

๋ฉ”ํƒ€ ๊ธฐํ˜ธ

::= ์ •์˜ํ•˜๋‹ค
<> ๋น„๋‹จ๋ง๊ธฐํ˜ธ(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์— ์˜ํ•ด ์„ฑ์„ฑ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ„

์‹๋ณ„์ž ์ •์˜ BNF๋ฅผ ํ†ตํ•ด 'TEST1'์˜ ํŒŒ์Šค ํŠธ๋ฆฌ ์ƒ์„ฑ

 

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์˜ ๋ชจ์–‘์ด ๋™์ผํ•˜๋ฉด ์ƒ๊ด€ ์—†์Œ

 

๋™์ผํ•œ parse tree๊ฐ€ ๊ทธ๋ ค์ง€๋ฉด ์ƒ๊ด€ ์—†์Œ

 

 

๋‘ ๋ฒˆ์งธ ์˜ˆ์‹œ

 

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์œ ๋„ ๊ณผ์ •์œผ๋กœ ๋‹ค๋ฅธ ํŒŒ์Šค ํŠธ๋ฆฌ๊ฐ€ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Ÿฌ๋ฉด ๋ชจํ˜ธํ•œ ๋ฌธ๋ฒ•์ž„

 

 

 

๋ชจํ˜ธ์„ฑ ์ œ๊ฑฐ ๋ฐฉ๋ฒ•

 

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด ๊ฒฐํ•ฉ๊ทœ์น™๊ณผ ์šฐ์„  ์ˆœ์œ„๋กœ ๋ชจํ˜ธ์„ฑ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ

 

 

Precedence cascade : ์ƒˆ ๋น„๋‹จ๋ง๊ธฐํ˜ธ <term>๊ณผ ๋ฌธ๋ฒ• ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฌธ๋ฒ•์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •

 

 

 

์˜ค๋ฅธ์ชฝ์— ์ž๊ธฐ ์ž์‹ ์ด 2๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚˜๋ฉด ๋ชจํ˜ธํ•œ ๋ฌธ๋ฒ•์ž„

 

 

์˜ˆ๋ฅผ ๋“ค๋ฉด "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)๋Š” ๊ธฐ๊ณ„์–ด์™€ ์œ ์‚ฌํ•œ ์ €๊ธ‰ ์–ธ์–ด์ง€๋งŒ, ์•„์ง ์‹คํ–‰์€ ์•ˆ๋จ!
      (๋ง์ปค๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋ผ์•ผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์ด๋จ)

GPT

ํฐ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ์†Œ์Šค ํŒŒ์ผ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ๊ฐ์„ ๋”ฐ๋กœ ์ปดํŒŒ์ผํ•œ ๋‹ค์Œ ๋‚˜์ค‘์— ๋งํฌํ•ด์„œ ํ•˜๋‚˜๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์„ ๋ถ„๋ฆฌ ์ปดํŒŒ์ผ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ 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) ์ œ๊ณต

    => ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ ๋ฐ”๊พธ๊ณ  ์ปดํŒŒ์ผ ์—†์ด ๊ณง๋ฐ”๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ
    (ํ•œ ์ค„ ํ•œ ์ค„ ์‹คํ–‰ํ•˜๊ธฐ์— ์›ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ)

 

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ธฐ๋ฒ•

 

 

 

ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์‰ฌ์šด ํ˜•ํƒœ๋กœ ๋ฒˆ์—ญํ•œ ํ›„, ๊ทธ ๋ฒˆ์—ญ๋œ ํ˜•ํƒœ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋””์ฝ”๋“œํ•˜์—ฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์œผ๋กœ ์‹คํ–‰

ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด๊ฐ€ ์ด ๋ฐฉ๋ฒ•์„ ๋”ฐ๋ฆ„ 
(์ค‘๊ฐ„ ํ˜•ํƒœ ์ฝ”๋“œ๊ฐ€ ์ €๊ธ‰์ด๋ฉด ๋ฒˆ์—ญ ๊ธฐ๋ฒ•์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ธฐ๋„ํ•จ)

 

 

 

๋ฐ˜์‘ํ˜•