¼÷Á¦3: º¸¹°¼¶ & C- ½ÇÇà±â

ÇÁ·Î±×·¥

Á¦°øÇÏ´Â ÇÁ·Î±×·¥ ¼Ò½º´Â C- ¾ð¾îÀÇ ¹®¹ý ºÐ¼®±â (parser) ¿Í ¸Þ¸ð¸® (memory) ¿Í ȯ°æ (environment) À» ±¸ÇöÇÑ ÇÁ·Î±×·¥ ºÎÇ°ÀÔ´Ï´Ù. ¼÷Á¦ Á¦ÃâÀº ¹Ýµå½Ã 3.n ¸¸ Á¦ÃâÇØ ÁÖ¼¼¿ä.

ÄÄÆÄÀÏ ¹× ½ÇÇà ¹æ¹ý

Á¦°øµÇ´Â 3.n ÆÄÀÏ¿¡´Â ¼÷Á¦ ±¸Çö ºÎºÐÀº ºñ¿öÁ® ÀÖ½À´Ï´Ù. ÀÌ ÆÄÀÏÀ» ¼öÁ¤Çؼ­ interpreter¸¦ ¿Ï¼ºÇÏ°í ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏ ¹× ½ÇÇàÀ» ÇÏ¸é µË´Ï´Ù.
[UNIX]
1. nmakegen -f
2. make
3. run examples/test.c-

[WINDOWS]
1. nmakegen -f run.exe
2. make ( nml ¼³Ä¡½Ã¿¡ °°ÀÌ ¼³Ä¡µË´Ï´Ù. )
3. run examples\test.c-
Â÷ÈÄ¿¡ ¼öÁ¤À» Çؼ­ ´Ù½Ã ÄÄÆÄÀÏÇÏ´Â °æ¿ì´Â 2~3°úÁ¤¸¸ ´Ù½Ã ½ÇÇàÇÏ¸é µË´Ï´Ù.

¼÷Á¦ Á¦Ãâ ¹æ¹ý

¼÷Á¦ Á¦ÃâÀº 3.n ÆÄÀϸ¸ ÇØÁÖ¼¼¿ä. Áï Á¶±³°¡ ¿©±â¼­ Á¦°øµÇ°í ÀÖ´Â ÆÄÀÏ Áß 3.n¸¸ °¢ÀÚ°¡ Á¦ÃâÇÑ °ÍÀ¸·Î ¹Ù²ã¼­ ÄÄÆÄÀÏ ¹× ½ÇÇàÀÌ µÇµµ·Ï Çؼ­ Á¦ÃâÇØ Áֽñ⠹ٶø´Ï´Ù.

¿ì¼± ¼øÀ§

»ç¿ëµÇ´Â ±âÈ£µéÀÇ ¿ì¼±¼øÀ§´Â ¾Æ·¡¿Í °°½À´Ï´Ù. À§¿¡ ÀÖ´Â ±âÈ£°¡ ¿ì¼± ¼øÀ§°¡ °¡Àå ³ô°í, ¾Æ·¡·Î °¥¼ö·Ï ¿ì¼± ¼øÀ§°¡ ³·¾ÆÁý´Ï´Ù.
   not    (¿À¸¥ÂÊ)
   .      (¿ÞÂÊ)
   *, /   (¿ÞÂÊ)  
   +, -   (¿ÞÂÊ) 
   =, <   (¿ÞÂÊ)
   write  (¿À¸¥ÂÊ)
   :=     (¿À¸¥ÂÊ)
   else   
   then
   do
   ;      (¿ÞÂÊ)
   in
¿ì¼±¼øÀ§¸¦ °í·ÁÇØ¾ß µÇ´Â ¸î°¡Áö ÀϹÝÀûÀÎ °æ¿ì¸¦ º¸¿©µå¸®¸é ´ÙÀ½°ú °°½À´Ï´Ù.
  x := e1 ; e2                =>    (x := e1) ; e2  
                                 (* := ÀÌ ; º¸´Ù ¿ì¼± ¼øÀ§°¡ ³ô±â¶§¹® *)
  while e do e1;e2            =>    (while e do e1);e2 
  if e1 then e2 else e3;e4    =>    (if e1 then e2 else e3); e4
  let x := e1 in e2 ; e3      =>    let x :=e in (e2;e3) 
Áï :=, while, for, if ÀÇ ¹Ùµð·Î sequence¸¦ ¾²°í ½ÍÀ¸¸é sequence¸¦ ´ÙÀ½°ú °°ÀÌ °ýÈ£·Î ¹­¾î Áà¾ß ÇÕ´Ï´Ù.
  while e do (e1;e2) 
¸¶Âù°¡Áö·Î let in ÀÇ ¹Ùµð¿¡¼­´Â scope¸¦ Á¦ÇѽÃÅ°·Á¸é °ýÈ£¸¦ ÃÄÁà¾ß ÇÏ°Ô µË´Ï´Ù.
  (let x := e1 in e2); e3 
¹æÇ⼺Àº ¿ì¼±¼øÀ§°¡ °°Àº °æ¿ì¿¡ Àû¿ëÀÌ µË´Ï´Ù. ¿¹¸¦ µé¾î ¹æÇ⼺ÀÌ ¿ÞÂÊÀÎ . ´Â
  x.y.z   =>   (x.y).z
°¡ µÇ°í, ¿À¸¥ÂÊÀÎ := Àº
  x := y := 1    =>   x := (y := 1) 
ÀÌ µÇ°Ô µË´Ï´Ù. ¿ì¼±¼øÀ§¸¦ Àß ¸ð¸£°ÚÀ»½Ã¿¡´Â °ýÈ£¸¦ ÃÄÁÖ´Â °ÍÀÌ ÇÑ°¡Áö ¹æÆíÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù.

pretty-printer

ÀÔ·Â ÇÁ·Î±×·¥À» °£´ÜÈ÷ È­¸é¿¡ Ãâ·Â½ÃÄÑÁÖ´Â pretty-printer°¡ Á¦°øµÈ pp.n ÆÄÀÏ¿¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. »ç¿ë¹ýÀº
run -pp test.c-
¸¦ ½ÇÇàÇϸé main.n¿¡¼­ run ÇÔ¼ö¸¦ ºÒ·¯¼­ intepreter¸¦ µ¹¸®´Â °ÍÀÌ ¾Æ´Ï¶ó test.c-¸¦ ÆÄ½Ì Çؼ­ ÀÔ·ÂµÈ ÇÁ·Î±×·¥À» È­¸é¿¡ Ãâ·ÂÇØÁÖ°í ¸¶Ä¡°Ô µË´Ï´Ù. À̸¦ ÅëÇØ ÆĽÌÀÌ ÀǵµÇÑ ´ë·Î µÇ°í ÀÖ´ÂÁö È®ÀÎÇØ º¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. intepreter¸¦ ±¸ÇöÇϱâ ÀÌÀü¿¡ Á¦°øµÈ ÆÄÀϵ鸸 ÄÄÆÄÀÏÀ» Çصµ run -pp ¿É¼ÇÀº ½ÇÇàÀÌ µÇµµ·Ï µÇ¾î ÀÖ½À´Ï´Ù.

ÁÖ¼®

c- ÇÁ·Î±×·¥ ¾È¿¡¼­ (* *) ·Î ÁÖ¼®À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.