์ปดํŒŒ์ผ๋Ÿฌ

  • ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํƒ€๊ฒŸ ์–ธ์–ด์™€ ์˜๋ฏธ๋ก ์ ์œผ๋กœ ๋™๋“ฑํ•˜๊ฒŒ ๋ฒˆ์—ญํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ
  • ์–ด๋– ํ•œ ์–ธ์–ด์—์„œ ๊ธฐ๊ณ„์–ด๋กœ๋งŒ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋ถ€๋ฅด์ง€ ์•Š์Œ
  • ์˜ˆ์‹œ
    • C ์–ธ์–ด ์ปดํŒŒ์ผ๋Ÿฌ (๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜)
    • Silicon Compiler
      • ๋…ผ๋ฆฌ ๊ฒŒ์ดํŠธ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‰ฝ๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์ฃผ๋Š” ๋…€์„
  • OS Command language
    • ๋ช…๋ น์–ด ์ปค๋งจ๋“œ๋ฅผ ์–ดํœ˜๋ถ„์„, ๊ตฌ๋ถ„ ๋ถ„์„์„ ํ†ตํ•ด์„œ OS๊ฐ€ ์ดํ•ดํ•˜๋Š” ์–ธ์–ด๋กœ ๋ณ€ํ™˜ํ•จ
  • Query language
    • ์ฟผ๋ฆฌ๋ฌธ ์ž์ฒด๋ฅผ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๊ฐ€ ์ดํ•ดํ•˜๋Š” ์–ธ์–ด๋กœ ๋ณ€๊ฒฝํ•ด์คŒ

์ปดํŒŒ์ผ๋Ÿฌ ์–ธ์–ด

  • ํ•œ๋ฒˆ ์ปดํŒŒ์ผ์ด ์˜ค๋ž˜๊ฑธ๋ฆผ
  • ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ ํ•˜๊ณ ๋‚˜๋ฉด ์‹คํ–‰ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์†๋„๊ฐ€ ๋น ๋ฆ„
  • ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋‹ค์‹œ ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ํ•ด์•ผ ํ•จ

์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด

  • ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์€ ์žˆ์œผ๋‚˜, ์‹คํ–‰ํŒŒ์ผ๋กœ ๋งŒ๋“ค์ง€ ์•Š์Œ
  • ์ฆ‰, ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด ์—†์Œ
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์œผ๋กœ ๋ผ์ธ๋งŒ์„ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ๋Š” ์‹œ๊ฐ„์ด ์ ๊ฒŒ ๊ฑธ๋ฆผ
  • ํ•˜์ง€๋งŒ ์‹คํ–‰ํŒŒ์ผ์„ ๋งŒ๋“ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ž‘์—…์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•  ๊ฒฝ์šฐ ๋‹น์—ฐํžˆ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ.

์†Œ์Šค์ฝ”๋“œ์˜ ๋ณ€ํ™˜ ๊ณผ์ •

preprocessors, compilers, assemblers, linkers

  • ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •
  • ์„ ํ–‰์ž(Preprocessor)
    • ๋ฉ”ํฌ๋กœ, ๊ทธ๋Ÿฐ ๊ฒƒ๋“ค์€ ์„ ํ–‰์ฒ˜๋ฆฌ๋ฅผ ํ•ด์„œ ์†Œ์Šค์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ๊ณผ์ •
  • ์ปดํŒŒ์ผ๋Ÿฌ
    • ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ณผ์ •
  • ์–ด์…ˆ๋ธ”๋Ÿฌ
    • ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” Object ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์คŒ
  • ๋ง์ปค
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋Œ€์ฒด๊ฐ€๋Šฅํ•œ Object ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ
  • ๊ธฐ๊ณ„์–ธ์–ด

์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ณผ์ •

  • ๋ชฉ์  : ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ, ์›ํ•˜๋Š” ์–ธ์–ด(์—ฌ๊ธฐ์„œ๋Š” ๊ธฐ๊ณ„ ์–ธ์–ด)๋กœ ๋งคํ•‘ํ•ด์ฃผ๋Š” ๊ฒƒ

์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋‹จ๊ณ„

  • Scanner(Lexical Analysis)
    • ์–ดํœ˜ ๋ถ„์„์„ ์‹คํ–‰ํ•จ
    • ์•ž์—์„œ ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ฝ์œผ๋ฉด์„œ, ํ•ด๋‹น ํ† ํฐ์˜ ์˜๋ฏธ๋ฅผ ๋ฐ˜์˜ํ•จ
    • ์—ฐ์‚ฐ์ž๋ฅผ ์ œ์™ธํ•œ ๋ฌธ์ž์—ด์˜ ๊ฒฝ์šฐ์—๋Š” Token์ด๋ผ ๋ถ€๋ฆ„
    • Token์€ ์˜ˆ์•ฝ์–ด(if, else, while, do, switch..)์™€ ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ
    • Token์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์„ tokenizer, ์˜๋ฏธ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ๋ถ€๋ถ„์„ lexer๋ผ๊ณ  ์นญํ• ์ˆ˜๋„ ์žˆ์„ ๋“ฏ
  • Parser
    • ๋งŒ๋“ค์–ด์ง„ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.
    • ๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ํŠธ๋ฆฌ ์ž์ฒด๊ฐ€ ์–ด๋– ํ•œ ํ• ๋‹น์„ ์˜๋ฏธํ•˜๋Š” ํŠธ๋ฆฌ๊ฐ€ ๋œ๋‹ค.
    • ๋‹ค๋ฅธ ๊ฒƒ๋“ค๋„ ๋น„์Šทํ•˜๊ฒŒ ์ด๋Ÿฐ ๊ฐ๊ฐ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ ๊ฒƒ
    • ์˜ˆ๋ฅผ ๋“ค์–ด 100๊ฐœ์˜ ๋ฌธ๋ฒ•์ด ์žˆ๋‹ค๋ฉด Syntax๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
    • ์ด๋Ÿฐ ๋งŒ๋“ค์–ด์ง„ ํŠธ๋ฆฌ๋ฅผ syntax tree๋ผ ๋ถ€๋ฆ„
    • ์ด๋Ÿฌํ•œ syntax tree๋ฅผ ๊ฐ€์ง€๊ณ  ๊ตฌ๋ถ„๋ถ„์„ ์„ ์ง„ํ–‰ํ•จ
      • ๋ฌธ๋ฒ• ๊ฒ€ํ† 
      • ์˜๋ฏธ ๋ถ„์„
        • ์ง€๊ธˆ ์‚ฌ์ง„์—์„œ ๋งŒ์•ฝ์— sample์— ๋ณด์ด๋Š” ํŠธ๋ฆฌ์ค‘์— B+C ์ด ๋ถ€๋ถ„์ด, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” syntax tree์˜ 65๋ฒˆ์งธ์™€ ๊ตฌ์กฐ๊ฐ€ ๊ฐ™๋‹ค๋ฉด, 65๋ฒˆ์ด ๊ฐ€์ง€๋Š” ์˜๋ฏธ(lhs์™€ rhs๋ฅผ ๋”ํ•ด๋ผ)๋ฅผ ์•Œ์•„์ฐจ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋Ÿฐ ๊ฒƒ์„ Parsing์ด๋ผ ๋ถ€๋ฅธ๋‹ค.
    • ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ํŠธ๋ฆฌ๋ฅผ parse tree๋ผ ๋ถ€๋ฅธ๋‹ค.
    • ์ด๊ฑธ ์ˆ˜ํ–‰ํ•˜๋Š” ๋…€์„์„ parser๋ผ ๋ถ€๋ฅธ๋‹ค.
  • ์—ฌ๊ธฐ๊นŒ์ง€์˜ ์ž‘์—…์ด ๋ถ„์„(์ดํ•ด) ์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Œ
  • ์ค‘๊ฐ„ ๋‹จ๊ณ„์—์„œ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ž‘์—… (ํ•ฉ์„ฑ)
    • ์—ฌ๊ธฐ์„œ๋Š” ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•ด์คŒ

์ „์ฒด ๊ณผ์ •

References