Next: , Previous: Multiple Types, Up: Semantics   [Contents][Index]


3.5.3 ¥¢¥¯¥·¥ç¥ó

ʸˡµ¬Â§¤Ë¤È¤â¤Ê¤¦¥¢¥¯¥·¥ç¥ó¤Ï¡¢¤½¤Îµ¬Â§¤¬Ç§¼±¤µ¤ì¤ë¤¿¤Ó¤Ë¼Â¹Ô¤µ¤ì¤ë C¤Î¥×¥í¥°¥é¥à¤«¤é¤Ê¤ê¤Þ¤¹¡£ ¥¢¥¯¥·¥ç¥ó¤Î»Å»ö¤Î¤Û¤È¤ó¤É¤Ï¡¢´ØÏ¢¤¹¤ë¥È¡¼¥¯¥ó¤Þ¤¿¤Ï¾®¤µ¤¤¥°¥ë¡¼¥×¤«¤é µ¬Â§¤Ë¤·¤¿¤¬¤Ã¤Æ¹½À®¤µ¤ì¤ë¥°¥ë¡¼¥×¤Î¡¢°ÕÌ£Ãͤη׻»¤Ç¤¹¡£

¥¢¥¯¥·¥ç¥ó¤Ï¡¢C¤Îʣʸ¤Î¤è¤¦¤Ë¡¢¥Ö¥ì¡¼¥¹¤Ç°Ï¤Þ¤ì¤¿C¤Îʸ¤«¤é¤Ê¤ê¤Þ¤¹¡£ ¥¢¥¯¥·¥ç¥ó¤Ï¡¢µ¬Â§¤Î¤É¤Î¾ì½ê¤Ë¤âÃÖ¤±¡¢¤½¤Î¾ì½ê¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ µ¬Â§¤Î¤Û¤È¤ó¤É¤Ï¡¢µ¬Â§¤Î½ª¤ï¤ê¤Î¹½À®Í×ÁǤÎʤӤθå¤Ë¡¢ 1¤Ä¤À¤±¥¢¥¯¥·¥ç¥ó¤ò»ý¤Á¤Þ¤¹¡£ µ¬Â§¤ÎÅÓÃæ¤ËÃÖ¤«¤ì¤¿¥¢¥¯¥·¥ç¥ó¤Ï¡¢¼ê¤Î¹þ¤ó¤ÀÊýË¡¤ÇÆÃÊ̤ÊÌÜŪ¤Ë»È¤ï¤ì¤Þ¤¹ ¡Êsee Actions in Mid-Rule¡Ë¡£

¥¢¥¯¥·¥ç¥ó¤ÎÃæ¤ÎC¤Ç½ñ¤«¤ì¤¿¥×¥í¥°¥é¥à¤Ï¡¢ µ¬Â§¤ÎÂènÈÖÌܤÎÍ×ÁǤËÂбþ¤¹¤ë°ÕÌ£Ãͤò¡¢ $n¤È¤¤¤¦½ñ¼°¤Ç»²¾È¤Ç¤­¤Þ¤¹¡£ ¤Þ¤¿¡¢¤½¤Îµ¬Â§¤¬¹½À®¤¹¤ë¥°¥ë¡¼¥×¤Î°ÕÌ£Ãͤò¡¢ $$¤È¤¤¤¦½ñ¼°¤Ç»²¾È¤Ç¤­¤Þ¤¹¡£ ¥¢¥¯¥·¥ç¥ó¤¬¹½Ê¸²òÀÏ´ï¥Õ¥¡¥¤¥ë¤ËÊ£¼Ì¤µ¤ì¤ë¤È¤­¤Ë¡¢Bison¤Ï¡¢ ¾åµ­¤Î¹½À®Í×ÁǤòÇÛÎóÍ×ÁǤؤλ²¾È¤ËÊÑ´¹¤·¤Þ¤¹¡£

Îã¤ò¼¨¤·¤Þ¤¹¡£

exp:    …
        | exp '+' exp
            { $$ = $1 + $3; }

¤³¤Îµ¬Â§¤Ï¡¢²Ã»»µ­¹æ¤Ç·ë¤ÓÉÕ¤±¤é¤ì¤¿2¤Ä¤Î¾®¤µ¤¤exp¥°¥ë¡¼¥×¤«¤é¡¢ 1¤Ä¤Îexp¤ò¹½À®¤·¤Þ¤¹¡£ ¤³¤Î¥¢¥¯¥·¥ç¥ó¤ÎÃæ¤Ç¡¢$1¤È$3¤Ï¡¢ µ¬Â§¤Î±¦Â¦¤ÎºÇ½é¤È3ÈÖÌܤε­¹æ¤Ç¤¢¤ëexp¥°¥ë¡¼¥×¤Î °ÕÌ£Ãͤò»²¾È¤·¤Þ¤¹¡£ ¤³¤Îµ¬Â§¤Ë¤è¤Ã¤ÆÇ§¼±¤µ¤ì¤ë²Ã»»¼°¤ÎÃͤˤʤë¤è¤¦¤Ë¡¢ Ϥ¬$$¤ËÂåÆþ¤µ¤ì¤Þ¤¹¡£ ¤â¤·¡¢‘+’¥È¡¼¥¯¥ó¤ËÍ­ÍѤÊÃͤ¬¤¢¤ë¤Ê¤é¤Ð¡¢ ¤½¤ì¤ò$2¤È¤·¤Æ»²¾È¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£

µ¬Â§¤ËÂФ·¤Æ¥¢¥¯¥·¥ç¥ó¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¡¢Bison¤Ï¡¢ ¾Êά»þ¥¢¥¯¥·¥ç¥ó$$ = $1¤òÊ䤤¤Þ¤¹¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢µ¬Â§¤ÎºÇ½é¤Îµ­¹æ¤ÎÃͤ¬µ¬Â§Á´ÂΤÎÃͤˤʤê¤Þ¤¹¡£ ¤â¤Á¤í¤ó¡¢Î¾¼Ô¤Î·¿¤¬°ìÃפ¹¤ë¾ì¹ç¤Ë¤Î¤ß¡¢¾Êά»þ¥¢¥¯¥·¥ç¥ó¤ÏÍ­¸ú¤Ç¤¹¡£ ¶õµ¬Â§¤ËÂФ¹¤ë¾Êά»þ¥¢¥¯¥·¥ç¥ó¤Ï̵°ÕÌ£¤Ç¤¹¡£ ¤¹¤Ù¤Æ¤Î¶õµ¬Â§¤Ï¡¢¤½¤Îµ¬Â§¤ÎÃͤ¬É¬Íפʤé¤Ð¡¢ ÌÀ¼¨Åª¤Ê¥¢¥¯¥·¥ç¥ó¤ò»ý¤ÄɬÍפ¬¤¢¤ê¤Þ¤¹¡£

$n¤În¤Ï0¤Þ¤¿¤ÏÉ餬µö¤µ¤ì¡¢ ¸½ºß¤Îµ¬Â§¤Ë¥Þ¥Ã¥Á¤¹¤ëÁ°¤Ë¥¹¥¿¥Ã¥¯¤ËÀÑ¤Þ¤ì¤Æ¤¤¤¿ ¥È¡¼¥¯¥ó¤È¥°¥ë¡¼¥×¤Î°ÕÌ£Ãͤò»²¾È¤·¤Þ¤¹¡£ ¤³¤ì¤ÏÈó¾ï¤Ë´í¸±¤Ê¼êË¡¤Ç¡¢°ÂÁ´¤Ë»È¤¦¤¿¤á¤Ë¤Ï¡¢ ¤½¤Îµ¬Â§¤¬Å¬ÍѤµ¤ì¤ëʸ̮¤ò¤¢¤Ê¤¿¤¬´°Á´¤ËÍý²ò¤·¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¤³¤ì¤ò°ÂÁ´¤Ë»È¤¨¤ëÎã¤ò¼¨¤·¤Þ¤¹¡£

foo:      expr bar '+' expr  { … }
        | expr bar '-' expr  { … }
        ;
bar:      /* ¶õ */
        { previous_expr = $0; }
        ;

bar¤¬¤³¤³¤Ë½ñ¤«¤ì¤¿ÊýË¡¤Ç¤Î¤ß»È¤ï¤ì¤ë¤Ê¤é¤Ð¡¢ foo¤ÎÄêµÁ¤ÎÃæ¤Çbar¤è¤êÁ°¤Î expr¤ÎÃͤò$0¤¬»²¾È¤·¤Þ¤¹¡£