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


8 ¹½Ê¸²òÀÏ´ï¤Î¥Ç¥Ð¥Ã¥°

¤â¤·¡¢Bisonʸˡ¥Õ¥¡¥¤¥ë¤¬Àµ¤·¤¯¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿¤Î¤Ë¡¢ À¸À®¤µ¤ì¤¿¹½Ê¸²òÀϴ郎»×¤¤¤É¤ª¤ê¤Ëư¤«¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢ yydebug¹½Ê¸²òÀÏ´ïÄÉÀ×µ¡Ç½¤¬¡¢Ä´ºº¤ÎÌò¤ËΩ¤Ä¤Ç¤·¤ç¤¦¡£

ÄÉÀ×µ¡Ç½¤Î¥³¥ó¥Ñ¥¤¥ë¤òÍ­¸ú¤Ë¤¹¤ë¤¿¤á¤Ë¤Ï¡¢ ¹½Ê¸²òÀÏ´ï¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È¤­¤Ë¡¢¥Þ¥¯¥íYYDEBUG¤òÄêµÁ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¤½¤Î¤¿¤á¤Ë¤Ï¡¢¥³¥ó¥Ñ¥¤¥é¤Î¥ª¥×¥·¥ç¥ó¤Ë‘-DYYDEBUG=1’¤ò»ØÄꤹ¤ë¤«¡¢ ¤¢¤ë¤¤¤Ï¡¢Ê¸Ë¡¥Õ¥¡¥¤¥ë¤ÎCÀë¸ÀÉô¤Ë‘#define YYDEBUG 1’¤È½ñ¤¤¤Æ¤ª¤¯ ɬÍפ¬¤¢¤ê¤Þ¤¹¡Êsee The C Declarations Section¡Ë¡£ ¤¢¤ë¤¤¤Ï¡¢Bison¤ò¼Â¹Ô¤¹¤ë¤È¤­¤Ë(see Invoking Bison)¡¢ ‘-t’¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Æ¤ª¤¯¤È¡¢ YYDEBUG¤¬ÄêµÁ¤µ¤ì¡¢ÄÉÀפ¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£

ÄÉÀ×µ¡Ç½¤Ïstderr¤ò»È¤¦¤Î¤Ç¡¢CÀë¸ÀÉô¤Ë #include <stdio.h>¤È½ñ¤¤¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£

ÄÉÀ×µ¡Ç½Éդǹ½Ê¸²òÀÏ´ï¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¤é¡¢¹½Ê¸²òÀÏ´ï¤Î¼Â¹Ô»þ¤Ë¡¢ ÄÉÀ×µ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë¤¿¤á¤Ë¡¢yydebugÊÑ¿ô¤ò0¤Ç¤Ê¤¤Ãͤˤ·¤Æ¤¯¤À¤µ¤¤¡£ C¸À¸ì¤Î¥×¥í¥°¥é¥à(¤ª¤½¤é¤¯main´Ø¿ô¤ÎÃæ)¤Ç¤³¤ÎÊÑ¿ô¤ËÂåÆþ¤¹¤ë¤«¡¢ ¤¢¤ë¤¤¤Ï¡¢¥Ç¥Ð¥Ã¥¬¤Ç¤³¤ÎÊÑ¿ô¤ÎÃͤòÊѤ¨¤ì¤Ð¤¤¤¤¤Ç¤·¤ç¤¦¡£

yydebug¤¬0¤Ç¤Ê¤¤¾ì¹ç¡¢¹½Ê¸²òÀÏ´ï¤Ï¤½¤ì¤¾¤ì¤ÎÃʳ¬¤Ç¡¢ 1¹Ô¤Þ¤Ï¤¿2¹Ô¤ÎÄÉÀ×¾ðÊó¤òÀ¸À®¤·¡¢stderr¤Ë½ÐÎϤ·¤Þ¤¹¡£ ÄÉÀ×¾ðÊó¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ê¾ðÊó¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£

¤³¤Î¾ðÊó¤òÍý²ò¤¹¤ë¤¿¤á¤Ë¤Ï¡¢Bison¤Ë‘-v’¥ª¥×¥·¥ç¥ó ¡Êsee Invoking Bison¡Ë¤òÉÕ¤±¤Æ¼Â¹Ô¤¹¤ë¤ÈÀ¸À®¤µ¤ì¤ë ÌÀºÙ¥Õ¥¡¥¤¥ë¤¬»²¹Í¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£ ¤³¤Î¥Õ¥¡¥¤¥ë¤Ë¤Ï¡¢¤µ¤Þ¤¶¤Þ¤Êµ¬Â§¤ÎÃæ¤Ç¤Î°ÌÃ֤ˤè¤ëɽ¸½¤Ç ³Æ¾õÂ֤ΰÕÌ£¤¬¼¨¤µ¤ì¡¢¤Þ¤¿¡¢ ³Æ¾õÂÖ¤¬¤½¤ì¤¾¤ì¤Î²Äǽ¤ÊÆþÎϥȡ¼¥¯¥ó¤Ë¤è¤Ã¤Æ ¤É¤Î¤è¤¦¤Ëưºî¤¹¤ë¤«¤¬¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ Ϣ³¤¹¤ëÄÉÀפΰÕÌ£¤òÆÉ¤à¤³¤È¤Ë¤è¤Ã¤Æ¡¢ ÌÀºÙ¥Õ¥¡¥¤¥ë¤Ç»ÅÍͤ¬¼¨¤µ¤ì¤Æ¤¤¤ë¹½Ê¸²òÀÏ´ï¤Îµ¡Ç½¤Ë¤Ä¤¤¤Æ¡¢Íý²ò¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£ ²¿¤«Ë¾¤Þ¤·¤¯¤Ê¤¤¤³¤È¤¬µ¯¤­¤Æ¤¤¤ëÉôʬ¤ò³Îǧ¤¹¤ì¤Ð¡¢ ʸˡ¥Õ¥¡¥¤¥ë¤Î¤É¤³¤ËÌäÂ꤬¤¢¤ë¤«¤ï¤«¤ë¤Ç¤·¤ç¤¦¡£

¹½Ê¸²òÀÏ´ï¥Õ¥¡¥¤¥ë¤ÏC¸À¸ì¤Î¥×¥í¥°¥é¥à¤Ê¤Î¤Ç¡¢ C¤Î¥Ç¥Ð¥Ã¥¬¤ò»È¤¨¤Þ¤¹¤¬¡¢ ²¿¤¬µ¯¤­¤Æ¤¤¤ë¤«Ä´¤Ù¤ë¤³¤È¤Ïº¤Æñ¤Ç¤¹¡£ ¹½Ê¸²òÀÏ´ï´Ø¿ô¤Ï¡¢Í­¸Â¾õÂÖµ¡³£¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ç¡¢ ¥¢¥¯¥·¥ç¥ó¤¬¼Â¹Ô¤µ¤ì¤ë¤È¡¢ ¥×¥í¥°¥é¥à¤ÎƱ¤¸Éôʬ¤¬²¿Å٤ⲿÅÙ¤â¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ ¼ÂÍÑŪ¤Ê¤Î¤Ïʸˡ¤ÎÃæ¤ÇÊÑ¿ô¤ÎÃͤòÄ´¤Ù¤ë¤³¤È¤À¤±¤Ç¤·¤ç¤¦¡£

¥Ç¥Ð¥Ã¥°¾ðÊó¤Ë¤Ï¡¢Ä̾¤½¤ì¤¾¤ì¤Î¥È¡¼¥¯¥ó¤Î¥È¡¼¥¯¥ó·¿¤À¤±¤¬´Þ¤Þ¤ì¡¢ ¥È¡¼¥¯¥ó¤Î°ÕÌ£Ãͤϴޤޤì¤Þ¤»¤ó¡£ ¥Þ¥¯¥íYYPRINT¤òÄêµÁ¤¹¤ë¤³¤È¤Ç¡¢ ¥È¡¼¥¯¥ó¤Î°ÕÌ£Ãͤòɽ¼¨¤µ¤»¤é¤ì¤Þ¤¹¡£ YYPRINT¤ÎÄêµÁ¤Ë¤Ï¡¢3¸Ä¤Î°ú¿ô¤¬¤È¤â¤Ê¤¤¤Þ¤¹¡£ ¹½Ê¸²òÀÏ´ï¤Ï¡¢YYPRINT¤Ë¡¢É¸½àÆþ½ÐÎÏ¥¹¥È¥ê¡¼¥à¡¢ ¥È¡¼¥¯¥ó·¿¤Î¿ôÃÍÈֹ桢¥È¡¼¥¯¥ó¤ÎÃÍ¡Êyylval¤Ë¤è¤ë¡Ë¤òÅϤ·¤Þ¤¹¡£

¿µ¡Ç½ÅÅÂî¤ËŬ¤¹¤ëYYPRINT¤ÎÎã¤ò¼¨¤·¤Þ¤¹ ¡Êsee Declarations for mfcalc¡Ë¡£

#define YYPRINT(file, type, value)   yyprint (file, type, value)

static void
yyprint (file, type, value)
     FILE *file;
     int type;
     YYSTYPE value;
{
  if (type == VAR)
    fprintf (file, " %s", value.tptr->name);
  else if (type == NUM)
    fprintf (file, " %d", value.val);
}