Next: , Previous: Lexical, Up: Interface   [Contents][Index]


4.3 ¥¨¥é¡¼Êó¹ð´Ø¿ôyyerror

Bison¹½Ê¸²òÀÏ´ï¤Ï¡¢Ê¸Ë¡µ¬Â§¤ËŬ¹ç¤·¤Ê¤¤¥È¡¼¥¯¥ó¤òÆÉ¤à¤¿¤Ó¤Ë¡¢ ¹½Ê¸²òÀÏ¥¨¥é¡¼¡Êparse error¡Ë¤¹¤Ê¤ï¤Áʸˡ¥¨¥é¡¼¡Êsyntax error¡Ë¤ò ¸¡½Ð¤·¤Þ¤¹¡£Ê¸Ë¡Ãæ¤Î¥¢¥¯¥·¥ç¥ó¤Ï¡¢¥Þ¥¯¥íYYERROR¤ò»È¤Ã¤Æ¡¢ ÌÀ¼¨Åª¤Ë¥¨¥é¡¼¤ò¼¨¤»¤Þ¤¹ ¡Êsee Special Features for Use in Actions¡Ë¡£

Bison¹½Ê¸²òÀÏ´ï¤Ï¡¢yyerror¤È¤¤¤¦Ì¾Á°¤Î´Ø¿ô¤ò»È¤Ã¤Æ¡¢ ¥¨¥é¡¼¤òÊó¹ð¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ »öÁ°¤ËÍѰդ¬É¬Í×¤Ê ¤³¤Î´Ø¿ô¤Ï¡¢Ê¸Ë¡¥¨¥é¡¼¤¬È¯À¸¤¹¤ë¤¿¤Ó¤Ë¡¢1¸Ä¤Î°ú¿ô¤ò¤È¤â¤Ê¤Ã¤Æ¡¢ yyparse¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£ ¹½Ê¸²òÀÏ¥¨¥é¡¼¤ËÂФ·¤Æ¡¢°ú¿ô¤Îʸ»úÎó¤ÏÄ̾ï"parse error"¤Ç¤¹¡£

BisonÄêµÁÉô¡Êsee The Bison Declarations Section¡Ë¤Ç¡¢ ¥Þ¥¯¥íYYERROR_VERBOSE¤òÄêµÁ¤¹¤ë¤È¡¢ "parse error"¤ÎÂå¤ï¤ê¤Ë¡¢ ¥¨¥é¡¼¤ò¾ÜºÙ¤ËÊó¹ð¤¹¤ëʸ»úÎó¤¬ÍѰդµ¤ì¤Þ¤¹¡£ ¥Þ¥¯¥íYYERROR_VERBOSE¤ÎÄêµÁ¤Ï¤Ê¤ó¤Ç¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£

¹½Ê¸²òÀÏ´ï¤Ï¡¢¤â¤¦1¼ïÎà¤Î¥¨¥é¡¼¤Ç¤¢¤ë¥¹¥¿¥Ã¥¯¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤ò¸¡½Ð¤¹¤ë ²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤Ï¡¢ÆþÎϤ¬¤­¤ï¤á¤Æ¿¼¤¤Æþ¤ì»Ò¤«¤é¤Ê¤Ã¤Æ¤¤¤ë¤È µ¯¤³¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£Bison¹½Ê¸²òÀÏ´ï¤Ï¼«Æ°Åª¤Ë¥¹¥¿¥Ã¥¯¤Î¸Â³¦¤òÂ礭¤¯³ÈÄ¥¤· ¤Æ¤¤¤ë¤Î¤Ç¡¢¥¹¥¿¥Ã¥¯¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤Ï¤á¤Ã¤¿¤Ëµ¯¤­¤Þ¤»¤ó¡£ ¤·¤«¤·¡¢¤â¤·¥¹¥¿¥Ã¥¯¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬µ¯¤­¤ì¤Ð¡¢ "parser stack overflow"¤È¤¤¤¦ ʸ»úÎó¤Î°ú¿ô¤ò¤È¤â¤Ê¤Ã¤Æ¡¢yyerror¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£

ñ½ã¤Ê¥×¥í¥°¥é¥à¤Ç¤Ï¡¢¼¡¤ÎÎã¤Î¤è¤¦¤Ëyyerror¤òÄêµÁ¤Ç¤­¤Þ¤¹¡£

yyerror (s)
     char *s;
{
  fprintf (stderr, "%s\n", s);
}

yyerror¤«¤éÌá¤Ã¤¿¸å¡¢yyparse¤Ï¡¢ ŬÀڤʥ¨¥é¡¼²óÉüʸˡµ¬Â§¡Êsee Error Recovery¡Ë¤¬¤¢¤ì¤Ð¡¢ ¥¨¥é¡¼¤«¤é¤Î²óÉü¤ò»î¤ß¤Þ¤¹¡£ ¤â¤·¡¢²óÉü¤¬ÉÔ²Äǽ¤Ê¤é¤Ð¡¢yyparse¤Ï¨ºÂ¤Ë1¤òÊÖ¤·¤Þ¤¹¡£

ÊÑ¿ôyynerrs¤Ë¤Ï¡¢¤½¤ì¤Þ¤Ç¤Ë½Ð¤¯¤ï¤·¤¿Ê¸Ë¡¥¨¥é¡¼¤Î¿ô¤¬µ­²±¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ Ä̾¤³¤ÎÊÑ¿ô¤Ï¹­°èÊÑ¿ô¤Ç¤¹¡£ ¤·¤«¤·¡¢ºÆÆþ²Äǽ¤Ê¹½Ê¸²òÀÏ´ï¡Êsee A Pure (Reentrant) Parser¡Ë ¤òÀ¸À®¤·¤¿¾ì¹ç¤Ë¤Ï¡¢¥¢¥¯¥·¥ç¥ó¤«¤é¤Î¤ß»²¾È²Äǽ¤Ê¶É½êÊÑ¿ô¤Ë¤Ê¤ê¤Þ¤¹¡£