Previous: Action Types, Up: Semantics [Contents][Index]
¤Þ¤ì¤Ë¡¢¥¢¥¯¥·¥ç¥ó¤òµ¬Â§¤ÎÅÓÃæ¤ËÃÖ¤¯¤ÈÊØÍø¤Ê¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ ¤³¤ì¤é¤Î¥¢¥¯¥·¥ç¥ó¤Ï¡¢Ä̾ï¤Îµ¬Â§¤Î½ª¤ï¤ê¤ËÃÖ¤«¤ì¤¿¥¢¥¯¥·¥ç¥ó¤ÈƱÍÍ¤Ë µ½Ò¤µ¤ì¤Þ¤¹¤¬¡¢¹½Ê¸²òÀϴ郎¸å¤Ë³¤¯Í×ÁǤòǧ¼±¤¹¤ëÁ°¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
µ¬Â§¤ÎÅÓÃæ¤Î¥¢¥¯¥·¥ç¥ó¤Ï¡¢¤½¤Î¥¢¥¯¥·¥ç¥ó¤è¤ê¤âÁ°¤Ë¤¢¤ëÍ×ÁǤò
$n
¤ò»È¤Ã¤Æ»²¾È¤Ç¤¤Þ¤¹¤¬¡¢¸å¤Ë³¤¯Í×ÁǤÏ
¤Þ¤À¹½Ê¸²òÀϤµ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç»²¾È¤Ç¤¤Þ¤»¤ó¡£
µ¬Â§¤ÎÅÓÃæ¤Î¥¢¥¯¥·¥ç¥ó¼«¿È¤Ï¡¢µ¬Â§¤ÎÍ×ÁǤÎ1¤Ä¤È¤·¤Æ¿ô¤¨¤é¤ì¤Þ¤¹¡£
Ʊ¤¸µ¬Â§¤ÎÃæ¤ËÊ̤Υ¢¥¯¥·¥ç¥ó¤¬Â³¤¯¾ì¹ç¡ÊÄ̾ï¤ÏºÇ¸å¡Ë¤ËÌäÂ꤬µ¯¤¤Þ¤¹¡£
$n
¤Ë»È¤¦ÈÖ¹æn¤Ë
µ¬Â§¤ÎÅÓÃæ¤Î¥¢¥¯¥·¥ç¥ó¤ò¿ô¤¨¤ë¤Î¤ò˺¤ì¤Ê¤¤¤è¤¦¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
µ¬Â§¤ÎÅÓÃæ¤Î¥¢¥¯¥·¥ç¥ó¤Ï¡¢°ÕÌ£Ãͤò»ý¤Æ¤Þ¤¹¡£
¤½¤Î¥¢¥¯¥·¥ç¥ó¤Ï¡¢$$
¤Ø¤ÎÂåÆþ¤ÇÃͤòÄê¤á¡¢
¸å¤Ë³¤¯¥¢¥¯¥·¥ç¥ó¤ÎÃæ¤Ç¡¢$n
¤ÇÃͤò»²¾È¤Ç¤¤Þ¤¹¡£
¥¢¥¯¥·¥ç¥ó¤Ëµ¹æÌ¾¤òÂбþ¤µ¤»¤ëÊýË¡¤¬¤Ê¤¤¤Î¤Ç¡¢
¥¢¥¯¥·¥ç¥ó¤Î¥Ç¡¼¥¿·¿¤òÀë¸À¤Ç¤¤Þ¤»¤ó¡£
¤½¤³¤Ç¡¢¥¢¥¯¥·¥ç¥ó¤Î°ÕÌ£¤ò»²¾È¤¹¤ë¤È¤¤Ë¡¢
‘$<…>’¤ò»È¤Ã¤Æ¥Ç¡¼¥¿·¿¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
µ¬Â§¤ÎÅÓÃæ¤Î¥¢¥¯¥·¥ç¥ó¤Ç¤Ï¡¢$$
¤Ø¤ÎÂåÆþ¤¬µ¬Â§¤ÎÃͤ˴ط¸¤·¤Ê¤¤¤Î¤Ç¡¢
µ¬Â§Á´ÂΤÎÃͤòÀßÄꤹ¤ëÊýË¡¤Ï¤¢¤ê¤Þ¤»¤ó¡£
µ¬Â§Á´ÂΤÎÃͤòÀßÄꤹ¤ëÍ£°ì¤ÎÊýË¡¤Ï¡¢
µ¬Â§¤ÎºÇ¸å¤ËÃÖ¤«¤ì¤¿Ä̾ï¤Î¥¢¥¯¥·¥ç¥ó¤Ç¤¹¡£
²Í¶õ¤Î¥³¥ó¥Ñ¥¤¥é¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡£
¤³¤³¤Ç¤Ï¡¢‘let (variable) statement’¤Î¤è¤¦¤Ê½ñ¼°¤Î
let
ʸ¤ò»È¤¨¡¢statement¤Î»ý³´ü´ÖÃæ¤Ë°ì»þŪ¤Ë
variable¤È¤¤¤¦Ì¾Á°¤ÎÊÑ¿ô¤òºî¤ê¤Þ¤¹¡£
¤³¤ì¤ò¹½Ê¸²òÀϤ¹¤ë¤¿¤á¤Ë¡¢statement¤ò²òÀϤ·¤Æ¤¤¤ë´Ö¡¢
variable¤òµ¹æÉ½¤ËÃÖ¤¤¤Æ¤ª¤¡¢
¸å¤Çµ¹æÉ½¤«¤éºï½ü¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤ò¼Â¸½¤¹¤ëÊýË¡¤ò¼¨¤·¤Þ¤¹¡£
stmt: LET '(' var ')' { $<context>$ = push_context (); declare_variable ($3); } stmt { $$ = $6; pop_context ($<context>5); }
‘let (variable)’¤¬Ç§¼±¤µ¤ì¤ë¤È¤¹¤°¤Ë¡¢
ºÇ½é¤Î¥¢¥¯¥·¥ç¥ó¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¤½¤Î¥¢¥¯¥·¥ç¥ó¤Ï¡¢¸½ºß¤Î°Ọ̃ʸ̮¡¢¤¹¤Ê¤ï¤Á»²¾È²Äǽ¤ÊÊÑ¿ô¤Îɽ¤ÎÊ£À½¤ò¡¢
¥Ç¡¼¥¿·¿¶¦ÍÑÂΤÎÃæ¤Îcontext
·¿¤Ç¡¢
¥¢¥¯¥·¥ç¥ó¤Î°ÕÌ£ÃͤȤ·¤ÆÊݸ¤·¤Þ¤¹¡£
¤½¤·¤Æ¡¢declare_variable
¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢
¿·¤·¤¤ÊÑ¿ô¤òµ¹æÉ½¤ËÄɲä·¤Þ¤¹¡£
ºÇ½é¤Î¥¢¥¯¥·¥ç¥ó¤¬½ª¤ï¤ë¤È¡¢¸å³¤¹¤ëstmt
¤Î²òÀϤ¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£
µ¬Â§¤ÎÅÓÃæ¤Î¥¢¥¯¥·¥ç¥ó¤¬5ÈÖÌܤÎÍ×ÁǤǤ¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤·¤¿¤¬¤Ã¤Æ¡¢‘stmt’¤Ï6ÈÖÌܤÎÍ×ÁǤˤʤê¤Þ¤¹¡£
¸å³¤¹¤ëʸ¤¬²òÀϤµ¤ì¤ë¤È¡¢¤½¤Î°ÕÌ£Ãͤ¬let
ʸÁ´ÂΤΰÕÌ£Ãͤˤʤê¤Þ¤¹¡£
¤½¤·¤Æ¡¢ºÇ½é¤Î¥¢¥¯¥·¥ç¥ó¤Î°ÕÌ£Ãͤϡ¢
ÊÑ¿ô¤Îɽ¤ò¸µ¤ËÌ᤹¤¿¤á¤Ë»È¤ï¤ì¤Þ¤¹¡£
¤½¤³¤Ç¡¢let
Ê¸Ãæ¤Ç¤Î°ì»þÊÑ¿ô¤¬É½¤«¤éºï½ü¤µ¤ì¡¢
¹½Ê¸²òÀϤµ¤ì¤ë¥×¥í¥°¥é¥à¤Î»Ä¤ê¤ÎÉôʬ¤Ç¤Ï°ì»þÊÑ¿ô¤¬Â¸ºß¤·¤Þ¤»¤ó¡£
¹½Ê¸²òÀÏ´ï¤Ï¡¢¥¢¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ë½ç½ø¤ò·è¤á¤ë¤¿¤á¤Ë¡¢ ¹½Ê¸²òÀϤ¹¤ëɬÍפ¬¤¢¤ë¤Î¤Ç¡¢ µ¬Â§¤¬´°Á´¤Ëǧ¼±¤µ¤ì¤ëÁ°¤Ë¥¢¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ï¡¢ ¤·¤Ð¤·¤ÐÉÔÀ°¹ç¤òµ¯¤³¤·¤Þ¤¹¡£ ¤¿¤È¤¨¤Ð¡¢¸å½Ò¤Î2¸Ä¤Îµ¬Â§¤Ï¡¢µ¬Â§¤ÎÅÓÃæ¤Î¥¢¥¯¥·¥ç¥ó¤ò»ý¤¿¤Ê¤¤¤Î¤Ç¡¢ ¼Â¹Ô²Äǽ¤Ê¹½Ê¸²òÀÏ´ï¤ÎÃæ¤Ç¶¦Â¸¤Ç¤¤Þ¤¹¡£ ¤½¤ì¤Ï¡¢¹½Ê¸²òÀÏ´ï¤Ï³«¤¥Ö¥ì¡¼¥¹¥È¡¼¥¯¥ó¤ò¥·¥Õ¥È¤Ç¤¡¢ Àë¸À¤¬¤¢¤ë¤«¤É¤¦¤«Ä´¤Ù¤ë¤¿¤á¤Ë¸å¤Ë³¤¯¤â¤Î¤òÀèÆÉ¤ß¤Ç¤¤ë¤«¤é¤Ç¤¹¡£
compound: '{' declarations statements '}' | '{' statements '}' ;
¤·¤«¤·¡¢¼¡¤ÎÎã¤Î¤è¤¦¤Ë¡¢µ¬Â§¤ÎÅÓÃæ¤Î¥¢¥¯¥·¥ç¥ó¤ò²Ã¤¨¤ë¤È¡¢ ¤³¤Îµ¬Â§¤ÏƯ¤«¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£
compound: { prepare_for_local_variables (); } '{' declarations statements '}'
| '{' statements '}' ;
¤³¤³¤Ç¤Ï¡¢³«¤¥Ö¥ì¡¼¥¹¤ò¸«¤Ä¤±¤¿»þÅÀ¤Ç¡¢ µ¬Â§¤ÎÅÓÃæ¤Î¥¢¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ëɬÍפ¬¤¢¤ë¤«¤É¤¦¤«¤Î·èÄê¤òÇ÷¤é¤ì¤Þ¤¹¡£ ¸À¤¤´¹¤¨¤ì¤Ð¡¢Àµ¤·¤¯È½ÃǤ¹¤ë¤¿¤á¤Î½½Ê¬¤Ê¾ðÊó¤Ê¤·¤Ë¡¢ ¤¢¤ëµ¬Â§¤«Ê̤ε¬Â§¤Î¤É¤Á¤é¤«¤Ë¤æ¤À¤Í¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ³«¤¥Ö¥ì¡¼¥¹¥È¡¼¥¯¥ó¤Ï¡¢¤³¤ì¤òÆÉ¤ó¤À»þÅÀ¤Ç¤Ï¹½Ê¸²òÀϴ郎 ²¿¤ò¤¹¤Ù¤¤«·èÄꤹ¤ëÅÓÃæ¤Ê¤Î¤Ç¡¢ÀèÆÉ¤ß¡Êlook-ahead¡Ë¥È¡¼¥¯¥ó¤È ¸Æ¤Ð¤ì¤Þ¤¹¡£See Look-Ahead Tokens¡£
¼¡¤Î¤è¤¦¤ËƱ°ì¤Î¥¢¥¯¥·¥ç¥ó¤òÃÖ¤¯¤³¤È¤Ç¡¢ ¤³¤ÎÌäÂê¤ò²ò·è¤Ç¤¤ë¤è¤¦¤Ë»×¤¨¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
compound: { prepare_for_local_variables (); } '{' declarations statements '}' | { prepare_for_local_variables (); } '{' statements '}' ;
¤·¤«¤·¡¢Bison¤Ë¤Ï2¤Ä¤Î¥¢¥¯¥·¥ç¥ó¤¬Æ±°ì¤Ç¤¢¤ë¤«¤É¤¦¤«¤ï¤«¤é¤Ê¤¤¤Î¤Ç¡¢ ÌäÂê¤Ï²ò·è¤·¤Þ¤»¤ó¡£ Bison¤Ï¡¢¥¢¥¯¥·¥ç¥ó¤ÎÃæ¤ÎC¤Ç½ñ¤«¤ì¤¿¥×¥í¥°¥é¥à¤ò¡¢ ·è¤·¤Æ²ò¼á¤·¤è¤¦¤È¤·¤Þ¤»¤ó¡£
C¸À¸ì¤Î¤è¤¦¤Ë¡¢ºÇ½é¤Î¥È¡¼¥¯¥ó¤Ë¤è¤Ã¤ÆÊ¸¤ÈÀë¸À¤ò¶èÊ̤Ǥ¤ë¤è¤¦¤Ê ʸˡ¤Ê¤é¤Ð¡¢¼Â¸½²Äǽ¤Ê²ò·èÊýË¡¤Î1¤Ä¤Ï¡¢¼¡¤ÎÎã¤Î¤è¤¦¤Ë¡¢ ³«¤¥Ö¥ì¡¼¥¹¤Î¸å¤Ë¥¢¥¯¥·¥ç¥ó¤òÃÖ¤¯¤³¤È¤Ç¤¹¡£
compound: '{' { prepare_for_local_variables (); } declarations statements '}' | '{' statements '}' ;
¤³¤ì¤Ç¡¢Â³¤¯Àë¸À¤Þ¤¿¤Ïʸ¤ÎºÇ½é¤Î¥È¡¼¥¯¥ó¤Ë¤è¤Ã¤Æ¡¢ Bison¤¬¤É¤Á¤é¤Îµ¬Â§¤ò»È¤¦¤Ù¤¤«¤ï¤«¤ê¤Þ¤¹¡£
Ê̤βò·èÊýË¡¤Ï¡¢¥µ¥Ö¥ë¡¼¥Á¥ó¤È¤·¤ÆÆ¯¤¯Èó½ªÃ¼µ¹æ¤ÎÆâ¦¤Ë¡¢ ¥¢¥¯¥·¥ç¥ó¤òËä¤á¹þ¤à¤³¤È¤Ç¤¹¡£
subroutine: /* ¶õ */ { prepare_for_local_variables (); } ;
compound: subroutine '{' declarations statements '}' | subroutine '{' statements '}' ;
¤³¤ì¤Ç¡¢Bison¤Ïcompound
¤ËÂФ·¤Æ¤É¤Á¤é¤Îµ¬Â§¤ò»È¤¦¤Ù¤¤«·è¤á¤º¤Ë¡¢
subroutine
¤ËÂФ¹¤ëµ¬Â§Ãæ¤Î¥¢¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤Ç¤¤Þ¤¹¡£
Ǥ°Õ¤Îµ¬Â§Ãæ¤Î¥¢¥¯¥·¥ç¥ó¤Ï¡¢¤³¤ÎÊýË¡¤Ë¤è¤Ã¤Æ¡¢
µ¬Â§¤ÎºÇ¸å¤Î¥¢¥¯¥·¥ç¥ó¤ËÊÑ´¹¤Ç¤¤Þ¤¹¡£
¼ÂºÝ¤Ë¡¢Bison¤ÎÆâÉô¤Ç¤Ï¡¢¤³¤Î¤è¤¦¤Ë¤·¤Æ¡¢
µ¬Â§Ãæ¤Î¥¢¥¯¥·¥ç¥ó¤È¤¤¤¦µ¡Ç½¤¬¼Â¸½¤µ¤ì¤Æ¤¤¤Þ¤¹¡£