Previous Up Next

3.2  ¥×¥í¥°¥é¥à¥Õ¥¡¥¤¥ë¤Î¹½À®¡¦¥³¥ó¥Ñ¥¤¥ëÊýË¡

Ëܼ¸³¤ÇºîÀ®¤¹¤ë¥¤¥ó¥¿¥×¥ê¥¿¥×¥í¥°¥é¥à¤Ï¡¤°Ê²¼¤Î 7 ¤Ä¤Î¥Õ¥¡¥¤¥ë¤«¤é¹½À®¤µ¤ì¤ë¡¥

syntax.ml
¤³¤Î¥Õ¥¡¥¤¥ë¤Ç¤Ï¡¤Ãê¾Ý¹½Ê¸ÌڤΥǡ¼¥¿¹½Â¤¤òÄêµÁ¤·¤Æ ¤¤¤ë¡¥Ãê¾Ý¹½Ê¸ÌڤϹ½Ê¸²òÀϤνÐÎϤǤ¢¤ê¡¤²ò¼áÉô¤ÎÆþÎϤʤΤǡ¤¥¤¥ó¥¿¥× ¥ê¥¿¤ÎÁ´¤Æ¤ÎÉôʬ¤¬¡¤¤³¤ÎÄêµÁ¤Ë(ľÀÜ/´ÖÀÜŪ¤Ë)°Í¸¤¹¤ë¡¥
parser.mly
C ¸À¸ì¤Ë yacc ¤ä bison ¤È¤¤¤Ã¤¿¹½Ê¸²òÀÏ¥×¥í¥°¥é¥à À¸À®¥Ä¡¼¥ë¤¬¤¢¤ë¤è¤¦¤Ë¡¤Objective Caml ¤Ë¤â ocamlyacc ¤È¤¤¤¦¥Ä¡¼¥ë¤¬¤¢¤ê¡¤ .mly ¤È¤¤¤¦³ÈÄ¥»Ò¤Î¥Õ¥¡¥¤¥ë¤Ëµ­½Ò¤µ¤ì¤¿Ê¸Ë¡ÄêµÁ¤«¤é¡¤¹½Ê¸²òÀÏ¥×¥í ¥°¥é¥à¤òÀ¸À®¤¹¤ë¡¥Ê¸Ë¡ÄêµÁ¤Î»ÅÊý¤Ï yacc ¤È»÷¤Æ¤¤¤ë¡¥
lexer.mll
C ¸À¸ì¤Ë lex, flex ¤È¤¤¤Ã¤¿»ú¶ç²òÀÏ¥×¥í¥°¥é¥àÀ¸À®¥Ä¡¼ ¥ë¤¬¤¢¤ë¤è¤¦¤Ë¡¤Objective Caml ¤Ë¤â ocamllex ¤È¤¤¤¦¥Ä¡¼¥ë¤¬¤¢¤ê¡¤.mll ¤È ¤¤¤¦³ÈÄ¥»Ò¤Î¥Õ¥¡¥¤¥ë¤ËÄêµÁ¤µ¤ì¤¿¥È¡¼¥¯¥ó¤È¤Ê¤ëʸ»úÎó¤Î¥Ñ¥¿¡¼¥óÄêµÁ¤« ¤é¡¤»ú¶ç²òÀÏ¥×¥í¥°¥é¥à¤òÀ¸À®¤¹¤ë¡¥¥Ñ¥¿¡¼¥ó¤ÎÄêµÁ¤Î»ÅÊý¤Ï lex ¤È»÷¤Æ ¤¤¤ë¡¥
environment.mli, environment.ml
¥¤¥ó¥¿¥×¥ê¥¿¡¦·¿¿äÏÀ¤ÇÍѤ¤¤ë¡¤´Ä¶­¤È¸Æ¤Ð¤ì¤ë ¥Ç¡¼¥¿¹½Â¤¤òÄêµÁ¤¹¤ë¡¥
eval.ml
²ò¼áÉô¥×¥í¥°¥é¥à¤Ç¤¢¤ë¡¥¹½Ê¸²òÀÏÉô¤¬À¸À®¤·¤¿¹½Ê¸ÌÚ¤«¤é ·×»»¤ò¹Ô¤Ê¤¦¡¥
main.ml
»ú¶ç²òÀÏ¡¦¹½Ê¸²òÀÏ¡¦²ò¼áÉô¤òÁȤ߹ç¤ï¤»¤Æ¡¤¥¤¥ó¥¿¥×¥ê ¥¿Á´ÂΤòµ¡Ç½¤µ¤»¤ë¡¥¥×¥í¥°¥é¥àÁ´ÂΤγ«»ÏÉôʬ¤Ç¤â¤¢¤ë¡¥

ºÇ½é¤Ë°·¤¦ ML1 ¥¤¥ó¥¿¥×¥ê¥¿¤Î¤¿¤á¤Î7¤Ä¤Î¥Õ¥¡¥¤¥ë¤Ë²Ã¤¨¡¤¥¤¥ó¥¿¥× ¥ê¥¿¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤¿¤á¤Î Makefile ¤ò http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/src/¤ËÃÖ¤¤ ¤Æ¤¢¤ë¡¥¤³¤ì¤é 7 ¤Ä¤Î¥Õ¥¡¥¤¥ë¤òƱ¤¸¥Ç¥£¥ì¥¯¥È¥ê¤ËÊݸ¤·¡¤¤É¤ì¤«¤Ò¤È¤Ä ¤Î .ml ¥Õ¥¡¥¤¥ë¤ò Emacs ¤ËÆɤ߹þ¤à¡¥ ¤½¤Î¥Ð¥Ã¥Õ¥¡¤ÇC-c C-c ¤È¤¹ ¤ë¤È¡¤¥³¥ó¥Ñ¥¤¥ë¤Î¥³¥Þ¥ó¥É¤òʹ¤«¤ì¤ë¤Î¤Ç¡¤ make depend ¤È¤¹¤ë¡¥¤³¤Î ºî¶È¤Ï½é²ó¤Î¤ß(Àµ³Î¤Ë¤Ï¥Õ¥¡¥¤¥ë¤¬Áý¤¨¤¿»þ¤â¤·¤¯¤Ïmake clean¤ò¹Ô¤Ê¤Ã ¤¿¸å)¹Ô¤¨¤Ð¤è¤¤¡¥ ¼¡¤Ë¡¤C-c C-c make -k ¤È¤¹¤ë¡¥ ¤¹¤ë¤È¡¤¥½¡¼¥¹ ¥Õ¥¡¥¤¥ë¤Î¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë miniml ¤È¤¤¤¦¼Â¹Ô·Á¼°¥Õ¥¡¥¤¥ë¤¬À¸À®¤µ¤ì¤ë¡¥ (M-x shell¤Ç¥·¥§¥ë¥â¡¼¥É¤Ë Æþ¤Ã¤Æ) miniml ¤òµ¯Æ°¤¹¤ë¤È #¤È¤¤¤¦¥×¥í ¥ó¥×¥È¤¬¸½¤ì¤ë¤Î¤Ç¡¤ ML¥×¥í¥°¥é¥à¤òÂǤĤȷë²Ì¤¬É½¼¨¤µ¤ì¤ë¡¥

> miniml
# x;;
val - = 10
# x + 3;;
val - = 13

(µ¯Æ°»þ¤ËÂç°èÊÑ¿ô x ¤ÎÃÍ¤Ï 10 ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡¥) ¥½¡¼¥¹¤òÊѹ¹¤·¤¿¤¢¤È¤Ï¡¤C-c C-c make -k ¤Ç¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³¤È¤Ë¤Ê ¤ë¡¥¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Ï M-x next-error ¤È¤¹¤ë¤³¤È¤Ç¡¤ ¥¨¥é¡¼¤ÎȯÀ¸¤·¤¿¾ì½ê¤Ë¥«¡¼¥½¥ë¤¬°ÜÆ°¤¹¤ë¡¥

¼Â¹Ô²Äǽ¥Õ¥¡¥¤¥ë¤È¤Ê¤Ã¤¿ Objective Caml ¥×¥í¥°¥é¥à¤ò¥Ç¥Ð¥Ã¥°¤¹¤ë¤Ë¤Ï ocamldebug ¤ò»ÈÍѤ¹¤ëÊýË¡(Objective Caml¥Þ¥Ë¥å¥¢¥ë16¾Ï»²¾È)¤È¡¤¥¤¥ó¥¿¥é¥¯¥Æ¥£ ¥Ö¥³¥ó¥Ñ¥¤¥é ocaml ¤Ë¥×¥í¥°¥é¥à¤ò¹½À®¤¹¤ë³Æ¥â¥¸¥å¡¼¥ë¤ò¥í¡¼¥É¤·¤Æ¡¤ ¥Æ¥¹¥È¤¹¤ëÊýË¡¤¬¤¢¤ë¡¥ocaml ¤òµ¯Æ°¤¹¤ëºÝ¤Ë

ocaml -I<¥â¥¸¥å¡¼¥ë¤Î¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Î¥Ñ¥¹> foo.cmo bar.cmo ...

¤Î¤è¤¦¤Ë¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤ò»ØÄꤹ¤ë¤È¡¤Foo, Bar ¤È¤¤¤¦ ¥â¥¸¥å¡¼¥ë¤¬ÍøÍѤǤ­¤ë¤è¤¦¤Ë¤Ê¤ë¤Î¤Ç¡¤¥È¥Ã¥×¥ì¥Ù¥ë¤Ç¥Æ¥¹¥È¤¹¤ë ¤³¤È¤¬²Äǽ¤Ë¤Ê¤ë¡¥


Previous Up Next