Next: , Up: Context Dependency   [Contents][Index]


7.1 ¥È¡¼¥¯¥ó·¿¤Î°ÕÌ£¾ðÊó

C¸À¸ì¤Ïʸ̮°Í¸À­¤ò¤â¤Ã¤Æ¤¤¤Þ¤¹¡£ ¤¹¤Ê¤ï¤Á¡¢¼±Ê̻ҤλȤï¤ìÊý¤Ï¡¢¤½¤ì¤Î¸½ºß¤Î°ÕÌ£¤Ë°Í¸¤·¤Þ¤¹¡£ ¼¡¤ÎÎã¤ò¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£

foo (x);

¤³¤ì¤Ï¡¢´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹Ê¸¤Î¤è¤¦¤Ë¸«¤¨¤Þ¤¹¡£ ¤·¤«¤·¡¢¤â¤·¡¢foo¤¬typedef¤µ¤ì¤¿·¿Ì¾¤Ê¤é¤Ð¡¢ ¤³¤Îʸ¤Ïx¤ÎÀë¸À¤Ë¤Ê¤ê¤Þ¤¹¡£ C¸À¸ì¤ËÂФ¹¤ëBison¹½Ê¸²òÀÏ´ï¤Ï¡¢¤³¤ÎÆþÎϤò¹½Ê¸²òÀϤ¹¤ëÊýË¡¤ò ¤É¤Î¤è¤¦¤Ë·èÄê¤Ç¤­¤ë¤Ç¤·¤ç¤¦¤«¡£

GNU C¤Ç»È¤Ã¤Æ¤¤¤ëÊýË¡¤Ï¡¢IDENTIFIER¤ÈTYPENAME¤È¤¤¤¦¡¢ 2¼ïÎà¤Î°Û¤Ê¤ë¥È¡¼¥¯¥ó·¿¤ò»È¤¦¤³¤È¤Ç¤¹¡£ yylex¤¬¼±Ê̻Ҥò¸«¤Ä¤±¤ë¤È¡¢¤É¤Á¤é¤Î¥È¡¼¥¯¥ó·¿¤òÊÖ¤¹¤«·è¤á¤ë¤¿¤á¤Ë¡¢ ¼±Ê̻Ҥθ½ºß¤ÎÀë¸À¤ò¸¡º÷¤·¡¢typedef¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤ì¤Ð TYPENAME¤òÊÖ¤·¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤ÐIDENTIFIER¤òÊÖ¤·¤Þ¤¹¡£

¤½¤·¤Æ¡¢Ç§¼±¤¹¤ë¥È¡¼¥¯¥ó·¿¤òÁª¤Ö¤³¤È¤Ë¤è¤Ã¤Æ¡¢ ʸˡµ¬Â§¤Ïʸ̮°Í¸À­¤òɽ¸½¤Ç¤­¤Þ¤¹¡£ IDENTIFIER¤Ï¡¢¼°¤È¤·¤Æ¼õ¤±Æþ¤ì¤é¤ì¤Þ¤¹¤¬¡¢ TYPENAME¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó¡£ TYPENAME¤Ï¡¢Àë¸À¤Î»Ï¤Þ¤ê¤È¤·¤Æ¼õ¤±Æþ¤ì¤é¤ì¤Þ¤¹¤¬¡¢ IDENTIFIER¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó¡£ ¼±Ê̻ҤΰÕÌ£¤Î¶èÊ̤¬É¬ÍפΤʤ¤Ê¸Ì®¡¢ ¤¿¤È¤¨¤Ðtypedef̾¤ò±£¤¹Àë¸À¤ÎÃæ¤Ç¤Ï¡¢ TYPENAME¤ÈIDENTIFIER¤ÎξÊý¤¬¼õ¤±Æþ¤ì¤é¤ì¤Þ¤¹¡£ ¤¹¤Ê¤ï¤Á¡¢2¸Ä¤Î¥È¡¼¥¯¥ó·¿¤ËÂФ·¤Æ¤½¤ì¤¾¤ì1¸Ä¤Îµ¬Â§¤ò½ñ¤¯¤³¤È¤¬²Äǽ¤Ç¤¹¡£

¤³¤ÎÊýË¡¤Ï¡¢¤É¤Î¼ïÎà¤Î¼±Ê̻Ҥ¬µö¤µ¤ì¤ë¤«¤ÎȽÃǤ¬¡¢ ¤½¤Î¼±Ê̻Ҥ¬¹½Ê¸²òÀϤµ¤ì¤ë¾ì½ê¤Î¶á¤¯¤Ç¹Ô¤ï¤ì¤ë¤Ê¤é¤Ð¡¢ ñ½ã¤Ë»È¤¨¤Þ¤¹¡£ ¤·¤«¤·¡¢C¸À¸ì¤Ç¡¢¤¤¤Ä¤â¤½¤¦¤Ç¤¢¤ë¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£ ¼¡¤ÎÎã¤Î¤è¤¦¤Ë¡¢°ÊÁ°¤Ë»ØÄꤵ¤ì¤¿ÌÀ¼¨Åª¤Ê·¿¤Ëµ¬Äꤵ¤ì¤¿typedef̾¤Î ºÆÀë¸À¤¬µö¤µ¤ì¤Æ¤¤¤ë¤«¤é¤Ç¤¹¡£

typedef int foo, bar, lose;
static foo (bar);        /* bar¤òÀÅŪÊÑ¿ô¤È¤·¤ÆºÆÀë¸À¤¹¤ë¡£ */
static int foo (lose);   /* foo¤ò´Ø¿ô¤È¤·¤ÆºÆÀë¸À¤¹¤ë¡£ */

ÉÔ¹¬¤Ë¤â¡¢¹þ¤ßÆþ¤Ã¤¿Ê¸Ë¡¹½Â¤¡ÖÀë¸À»Ò(declarator)¡×¤Ë¤è¤Ã¤Æ¡¢ Àë¸À¤µ¤ì¤¿Ì¾Á°¤Ï¡¢¤½¤ÎÀë¸À¤Î¹½Â¤¼«¿È¤«¤éÀÚ¤êÎ¥¤µ¤ì¤Þ¤¹¡£

·ë²Ì¤È¤·¤Æ¡¢C¸À¸ì¤ËÂФ¹¤ëBison¹½Ê¸²òÀÏ´ï¤Ï¡¢ ¤¹¤Ù¤Æ¤ÎÈó½ªÃ¼µ­¹æ¤Î̾Á°¤òÊѤ¨¤Æ¡¢Æó½Å²½¤µ¤ì¤Þ¤·¤¿¡£ Âè1¤Ï¡¢typedef̾¤¬ºÆÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Ê¤¤Àë¸À¤ò¹½Ê¸²òÀϤ·¡¢ Âè2¤Ï¡¢ºÆÄêµÁ¤¬µ¯¤³¤ê¤¨¤Ê¤¤Àë¸À¤ò¹½Ê¸²òÀϤ·¤Þ¤¹¡£ Æó½Å²½¤·¤¿¤â¤Î¤Î°ìÉôʬ¤ò¡¢´Êñ¤Ë¤¹¤ë¤¿¤á¤Ë¥¢¥¯¥·¥ç¥ó¤ò¾Êά¤·¤Æ¡¢¼¨¤·¤Þ¤¹¡£

initdcl:
          declarator maybeasm '='
          init
        | declarator maybeasm
        ;

notype_initdcl:
          notype_declarator maybeasm '='
          init
        | notype_declarator maybeasm
        ;

¤³¤³¤Ç¡¢initdcl¤Ïtypedef̾¤òºÆÀë¸À¤Ç¤­¤Þ¤¹¤¬¡¢ notype_initdcl¤ÏºÆÀë¸À¤Ç¤­¤Þ¤»¤ó¡£ declarator¤Ènotype_declarator¤Î°ã¤¤¤âƱÍͤǤ¹¡£

Á°½Ò¤Îµ»½Ñ¤È¡¢¸å½Ò¤Î»ú¶ç²òÀÏ·ë¤ÓÉÕ¤­¤Ë¤Ï¡¢ »ú¶ç²òÀϤ˱ƶÁ¤¹¤ë¾ðÊ󤬯þÎϤÎÊ̤ÎÉôʬ¤ò¹½Ê¸²òÀϤ·¤Æ¤¤¤ë¤È¤­¤Ë ÊѲ½¤µ¤»¤é¤ì¤ë¤È¤¤¤¦¡¢¶¦ÄÌÅÀ¤¬¤¢¤ê¤Þ¤¹¡£ Á°¼Ô¤Ç¤Ï¡¢¾ðÊ󤬹­°èŪ¤Ç¡¢¥×¥í¥°¥é¥à14¤ÎÊ̤ÎÌÜŪ¤Ë »È¤ï¤ì¤ë¤³¤È¤¬°Û¤Ê¤ê¤Þ¤¹¡£ ËÜÅö¤Î»ú¶ç²òÀÏ·ë¤ÓÉÕ¤­¤Ï¡¢Ê¸Ì®¤Ë¤è¤Ã¤ÆÀ©¸æ¤µ¤ì¤ë¡¢ ÆÃÊ̤ÎÌÜŪ¤Î¥Õ¥é¥°¤ò»ý¤Á¤Þ¤¹¡£


Footnotes

(14)

¡ÚÌõÃí¡Û¹½Ê¸²òÀÏ´ï¡£