¼÷Á¦4: SM5¿ë D++ ÄÄÆÄÀÏ·¯, ³¡Àç±Í ÃÖÀûÈ, ¸Þ¸ð¸® ÀçÈ°¿ë
4190.310 Programming Languages
2004 °¡À», È/¸ñ 14:30-15:45 @ 302µ¿ 308È£
¼¿ï´ëÇб³
/ ÄÄÇ»ÅÍ °øÇкÎ
/ ÇÁ·Î±×·¡¹Ö ¿¬±¸½Ç
Á¤¿µ¹ü | ½ÅÀçÈ£
¼÷Á¦4: SM5¿ë D++ ÄÄÆÄÀÏ·¯, ³¡Àç±Í ÃÖÀûÈ, ¸Þ¸ð¸® ÀçÈ°¿ë
3.n ¿¡¼ ¼öÁ¤ÇÒ ºÎºÐÀº
ÇÁ·Î±×·¥
Á¦°øÇÏ´Â ÇÁ·Î±×·¥ ¼Ò½º´Â D++ ¾ð¾îÀÇ ¹®¹ý ºÐ¼®±â (parser) ¿Í ¼öÇà±â, SM5 ¾ð¾îÀÇ ¼öÇà±â ÀÔ´Ï´Ù. ¹Ýµå½Ã 1.n, 2.n, 3.n ¸¸ Á¦ÃâÇØ ÁÖ¼¼¿ä.¼÷Á¦ 1¹ø¿¡ ´ëÇÏ¿©
ÇöÀç »À´ë¸¸ ÀÖ´Â 1.nÀ» ¼öÁ¤Çؼ D++ to SM5 compiler ¸¦ ¿Ï¼ºÇÏ¸é µË´Ï´Ù. ÀÌ °úÁ¤À» ¿ä¾àÇØ º¸¸é,1Àº ÇÑ ¹ø¸¸ ÇØÁÖ°í ÀÌÈÄ¿¡´Â ÇÒ ÇÊ¿ä ¾ø½À´Ï´Ù. 4´Â Å×½ºÆ® °úÁ¤ÀÔ´Ï´Ù.
- nmakegen -f ¶Ç´Â nmakegen -f run.exe (MS À©µµ¿ìÁî)
- 1.n ¼öÁ¤
- make
- run test1.d
while ¹®¿¡ ´ëÇÑ ÈùÆ®: Àç±Í ÇÔ¼ö È£Ãâ·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù.
while e1 do e2 end = let proc f(x) = if e1 then (e2; call f(unit)) in call f(unit) end
¼÷Á¦ 2¹ø¿¡ ´ëÇÏ¿©
2.n¿¡¼ Tailcall_Sm5 ¸ðµâÀ» tail recursion Áö¿ø µÇµµ·Ï ¼öÁ¤ÇÕ´Ï´Ù. (Tailcall_Sm5 ¸ðµâÀº ¼÷Á¦ 1¹øÀÇ Sm5 ¸ðµâ°ú ÇöÀç µ¿ÀÏÇÕ´Ï´Ù.) ´õºÒ¾î ¸Ç ¾Æ·¡ÀÇ trans ÇÔ¼öµµ ¼÷Á¦ 1¹ø °á°ú¸¦ Âü°íÇÏ¿© ä¿ö ÁÝ´Ï´Ù. ±×¸®°í ³ª¼ ÄÄÆÄÀÏÇÏ¸é µË´Ï´Ù.- 2.n ¼öÁ¤
- make
- run -tail test1.d
- ÇÊ¿äÇÏ´Ù¸é 4-18 ÁÙÀÇ SM5 Á¤ÀÇ ºÎºÐ.
- ÇÊ¿äÇÏ´Ù¸é 83-127 ÁÙÀÇ SM5 ÀÎÅÍÇÁ¸®ÅÍ ºÎºÐ.
- 146 ÁÙÀÇ trans ÇÔ¼ö´Â ¼÷Á¦ 1¹ø trans ÇÔ¼ö¸¦ ±×´ë·Î »ç¿ëÇϼŵµ µÇ°í, ÇÊ¿äÇÏ´Ù¸é ¼öÁ¤Çϼż ä¿ö ³ÖÀ¸¼¼¿ä.
- ±× ¿Ü ºÎºÐÀº D++ to SM5 º¯È¯±â¿Í SM5 ½ÇÇà±â°¡ Á¤»óÀûÀ¸·Î ÄÄÆÄÀÏµÇ°í ¼öÇàµÇ´Â ÇÑ, ¼öÁ¤ ¾ÈÇϼŵµ °¨Á¤ ´ë»óÀº ¾Æ´Õ´Ï´Ù. (¿¹¸¦ µé¾î, SM5 Ãâ·Â ºÎºÐ(print·Î ½ÃÀ۵Ǵ ÇÔ¼öµé), ¿À·ù ó¸® ºÎºÐµî)
¼÷Á¦ 3¹ø¿¡ ´ëÇÏ¿©
3.n¿¡¼ Gc_Sm5 ¸ðµâÀ» ¼öÁ¤ÇÕ´Ï´Ù. (Gc_Sm5 ¸ðµâÀº ¼÷Á¦ 1¹øÀÇ Sm5 ¸ðµâ°ú ÇöÀç µ¿ÀÏÇϸç gc ÇÔ¼ö¸¸ Ãß°¡·Î Á¤ÀǵǾî ÀÖ½À´Ï´Ù.) ´õºÒ¾î ¸Ç ¾Æ·¡ÀÇ trans ÇÔ¼öµµ ¼÷Á¦ 1¹ø °á°ú¸¦ Âü°íÇÏ¿© ä¿ö ÁÝ´Ï´Ù. ±×¸®°í ³ª¼ ÄÄÆÄÀÏÇÏ¸é µË´Ï´Ù.- 3.n ¼öÁ¤
- make
- run -gc testmem.d
3.n ¿¡¼ ¼öÁ¤ÇÒ ºÎºÐÀº
- ÇÊ¿äÇÏ´Ù¸é 80-84 ÁÙÀÇ »õ ¸Þ¸ð¸® ÇÒ´ç °ü·Ã ºÎºÐ.
- ÇÊ¿äÇÏ´Ù¸é 101 ÁÙÀÇ SM5.MALLOC ½ÇÇà ºÎºÐ.
Âü°í»çÇ×
¿©·¯ºÐÀÇ ÆíÀǼºÀ» À§ÇØ ´ÙÀ½À» Á¦°øÇÕ´Ï´Ù.- run -pp test1.d ¿Í °°ÀÌ ÇÏ¸é º¯È¯µÈ SM5 Äڵ带 º¸½Ç¼ö
ÀÖ°Ô µÇ¾î ÀÖ½À´Ï´Ù.
¼÷Á¦ 2¹øÀÇ °æ¿ì´Â run -tail -pp test1.d ÇÏ¸é º¼ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª, Tailcall_Sm5 ¸ðµâ¿¡ print ÇÔ¼ö¸¦ Á¦´ë·Î ¼öÁ¤ÇßÀ» ¶§¿¡¸¸ ÇØ´çµË´Ï´Ù. - Dplus.print ³ª Sm5.print¿Í °°Àº utility functionÀ» Á¦°øÇÏ´Ï, µð¹ö±ëÀ» À§ÇØ ÇÊ¿äÇϸé main.n À» ÀûÀýÈ÷ ¼öÁ¤Çؼ »ç¿ëµé ÇϽñ⠹ٶø´Ï´Ù.
±¸¹®±¸Á¶
- D++ ÇÁ·Î±×·¥ÀÇ ±¸¹®±¸Á¶´Â hw3ÀÇ C- ¾ð¾î¿¡¼ for ¹®, °ªÀÇ ÁּҷΠȣÃâÇϱⰡ ¾ø´Â ¾ð¾î·Î ¼÷Á¦ ¹®Á¦¸¦ º¸½Ã¸é ¾Ë ¼ö ÀÖ½À´Ï´Ù.
- (* *) ·Î ÁÖ¼®À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. // ´Â ¶óÀÎ ÄÚ¸àÆ®¿ëÀ¸·Î »ç¿ëÇÕ´Ï´Ù.
¿ì¼±¼øÀ§
»ç¿ëµÇ´Â ±âÈ£µéÀÇ ¿ì¼±¼øÀ§´Â ¾Æ·¡¿Í °°½À´Ï´Ù. À§¿¡ ÀÖ´Â ±âÈ£°¡ ¿ì¼± ¼øÀ§°¡ °¡Àå ³ô°í, ¾Æ·¡·Î °¥¼ö·Ï ¿ì¼± ¼øÀ§°¡ ³·¾ÆÁý´Ï´Ù.not (¿À¸¥ÂÊ) . (¿ÞÂÊ) *, / (¿ÞÂÊ) +, - (¿ÞÂÊ) =, < (¿ÞÂÊ) write (¿À¸¥ÂÊ) := (¿À¸¥ÂÊ) else then ; (¿ÞÂÊ)°ýÈ£ ¾ÈÀº ¹æÇ⼺ (associativity)À» ³ªÅ¸³»´Â °ÍÀ¸·Î °°Àº ¿ì¼±¼øÀ§ÀÇ ±âÈ£°¡ ¿¬ÀÌ¾î ³ª¿Ã½Ã¿¡ ¿ì¼± ¼øÀ§¸¦ °áÁ¤ÇØ ÁÝ´Ï´Ù. ¿¹¸¦ µé¾î ¹æÇ⼺ÀÌ ¿ÞÂÊÀÎ- ´Â
x-y-z => (x-y)-z°¡ µÇ°í, ¿À¸¥ÂÊÀÎ := Àº
x := y := 1 => x := (y := 1)ÀÌ µÇ°Ô µË´Ï´Ù.
½ÅÀçÈ£ ¸¸µë.