Next: , Previous: Algorithm, Up: Top   [Contents][Index]


6 ¥¨¥é¡¼¤«¤é¤Î²óÉü

¹½Ê¸²òÀÏ¥¨¥é¡¼¤¬µ¯¤­¤¿¾ì¹ç¤Ë¡¢¹½Ê¸²òÀÏ¥×¥í¥°¥é¥à¤¬»ß¤Þ¤ë¤³¤È¤Ï¡¢ Ä̾ï˾¤Þ¤·¤¯¤¢¤ê¤Þ¤»¤ó¡£ ¤¿¤È¤¨¤Ð¡¢¥³¥ó¥Ñ¥¤¥é¤ÏÆþÎϤλĤê¤ò¹½Ê¸²òÀϤ·¤ÆÂ¾¤Î¥¨¥é¡¼¤òõ¤»¤ë¤è¤¦¤Ë ¥¨¥é¡¼¤«¤é²óÉü¤¹¤ë¤Ù¤­¤Ç¤¹¤·¡¢ÅÅÂî¤Ï¼¡¤Î¼°¤ò¼õ¤±Æþ¤ì¤ë¤Ù¤­¤Ç¤¹¡£

ÆþÎϤò1¹Ô¤´¤È¤Ë½èÍý¤¹¤ëñ½ã¤ÊÂÐÏÃŪ¹½Ê¸²òÀÏ´ï¤Ï¡¢ ¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Ëyyparse¤¬1¤òÊÖ¤·¡¢ ÆþÎϹԤλĤê¤ò̵»ë¤·¡¢ yyparse¤ò¤â¤¦°ìÅٸƤӽФ·¤Æ¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£ ¤·¤«¤·¡¢¥³¥ó¥Ñ¥¤¥é¤Ç¤³¤Î¤è¤¦¤Ë½èÍý¤¹¤ë¤È¡¢ ¥¨¥é¡¼¤ËÀèΩ¤ÄʸˡŪʸ̮¤ò˺¤ì¤Æ¤·¤Þ¤¦¤Î¤ÇÉÔÅÔ¹ç¤Ç¤¹¡£ ¿¼¤¤´Ø¿ô¸Æ¤Ó½Ð¤·¤ÎÃæ¤Ç¹½Ê¸¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Ë¡¢ ¥³¥ó¥Ñ¥¤¥é¤¬¥¨¥é¡¼¤Ë³¤¯¹Ô¤ò¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ÎÀèÆ¬¤Î¤è¤¦¤Ë °·¤¦¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£

ÆÃÊ̤ʥȡ¼¥¯¥óerror¤òǧ¼±¤¹¤ë¤è¤¦¤Êµ¬Â§¤ò½ñ¤¯¤³¤È¤Ë¤è¤Ã¤Æ¡¢ ¹½Ê¸¥¨¥é¡¼¤«¤é²óÉü¤¹¤ëÊýË¡¤òÄêµÁ¤Ç¤­¤Þ¤¹¡£ error¤ÏÄêµÁºÑ¤ß¤Î½ªÃ¼µ­¹æ¤Ç¡¢¼«Ê¬¤ÇÀë¸À¤¹¤ëɬÍפϤʤ¯¡¢ ¥¨¥é¡¼½èÍý¤Î¤¿¤á¤ËͽÌó¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ Bison¹½Ê¸²òÀÏ´ï¤Ï¡¢¹½Ê¸¥¨¥é¡¼¤¬µ¯¤³¤ë¤¿¤Ó¤Ë¡¢error¥È¡¼¥¯¥ó¤òÀ¸À®¤·¤Þ¤¹¡£ ¸½ºß¤Îʸ̮¤Çerror¥È¡¼¥¯¥ó¤òǧ¼±¤Ç¤­¤ëµ¬Â§¤ò½ñ¤¤¤Æ¤¤¤ì¤Ð¡¢ ¹½Ê¸²òÀϤò·Ñ³¤Ç¤­¤Þ¤¹¡£

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

stmnts:  /* ¶õʸ»úÎó */
        | stmnts '\n'
        | stmnts exp '\n'
        | stmnts error '\n'

Âè4¤Îµ¬Â§¤Ï¡¢error¤È¤½¤ì¤Ë³¤¯²þ¹Ô¤¬¡¢Ç¤°Õ¤Îstmnts¤Ë ³¤¯¤³¤È¤òǧ¤á¤Þ¤¹¡£

exp¤ÎÃæ¤Ç¹½Ê¸¥¨¥é¡¼¤¬È¯À¸¤¹¤ë¤È¤É¤¦¤Ê¤ë¤Ç¤·¤ç¤¦¤«¡£ ¥¨¥é¡¼²óÉüµ¬Â§¤Ï¡¢¸·Ì©¤Ë²ò¼á¤µ¤ì¡¢stmnts¡¢error¡¢²þ¹Ô¤«¤é¤Ê¤ë Îó¤ËŬÍѤµ¤ì¤Þ¤¹¡£ exp¤ÎÃæ¤Ç¹½Ê¸¥¨¥é¡¼¤¬µ¯¤­¤ë¤È¡¢¤ª¤½¤é¤¯¡¢¤¤¤¯¤Ä¤«¤Î;ʬ¤Ê¥È¡¼¥¯¥ó¤Þ¤¿¤Ï Éôʬ¼°¤¬¥¹¥¿¥Ã¥¯¾å¤ÎºÇ¸å¤Îstmnts¤Î¸å¤Ë¸ºß¤·¡¢ ¤·¤¿¤¬¤Ã¤Æ¡¢¼¡¤Î²þ¹Ô¤òÆÉ¤àÁ°¤ËÆÉ¤à¤Ù¤­¥È¡¼¥¯¥ó¤¬Â¸ºß¤¹¤ë¤Ç¤·¤ç¤¦¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢¤³¤ÎÄ̾ï¤ÎÊýË¡¤Ç¤Ïµ¬Â§¤òŬÍѤǤ­¤Þ¤»¤ó¡£

¤·¤«¤·¡¢°Ọ̃ʸ̮¤ÈÆþÎϤΰìÉô¤ò¼Î¤Æ¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢ Bison¤Ï¶¯À©Åª¤Ë¤³¤Î¾ì¹ç¤Ëµ¬Â§¤òŬÍѤǤ­¤Þ¤¹¡£ ¤Þ¤º¡¢error¥È¡¼¥¯¥ó¤¬¼õÍý²Äǽ¤Ê¾õÂÖ¤ËÌá¤ë¤Þ¤Ç¡¢ ¾õÂ֤ȥª¥Ö¥¸¥§¥¯¥È¤¬¥¹¥¿¥Ã¥¯¤«¤é¼Î¤Æ¤é¤ì¤Þ¤¹ ¡Ê¤³¤ì¤Ï¡¢¤¹¤Ç¤Ë¹½Ê¸²òÀϤµ¤ì¤¿Éôʬ¼°¤¬¼Î¤Æ¤é¤ì¡¢ ºÇ¸å¤Î´°Á´¤Êstmnts¤Ë¾õÂÖ¤¬Ìá¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡Ë¡£ ¤³¤Î»þÅÀ¤Ç¡¢error¥È¡¼¥¯¥ó¤¬¥·¥Õ¥È¤µ¤ì¤Þ¤¹¡£ ¤½¤·¤Æ¡¢¸Å¤¤ÀèÆÉ¤ß¥È¡¼¥¯¥ó¤Î¥·¥Õ¥È¤Ï¼õÍýÉÔ²Äǽ¤Ê¤Î¤Ç¡¢ ¼õÍý²Äǽ¤Ê¥È¡¼¥¯¥ó¤ò¸«¤Ä¤±¤ë¤Þ¤Ç¡¢ ¹½Ê¸²òÀÏ´ï¤Ï¥È¡¼¥¯¥ó¤òÆÉ¤ó¤Ç¼Î¤Æ¤Þ¤¹¡£ Á°½Ò¤ÎÎã¤Ç¤Ï¡¢¼¡¤Î²þ¹Ô¤¬¤¯¤ë¤Þ¤ÇÆþÎϤ¬ÆÉ¤ß¼Î¤Æ¤é¤ì¡¢ ¤·¤¿¤¬¤Ã¤Æ¡¢Âè4¤Îµ¬Â§¤¬Å¬ÍѲÄǽ¤Ë¤Ê¤ê¤Þ¤¹¡£

Ê¸Ë¡Ãæ¤Î¥¨¥é¡¼µ¬Â§¤ÎÁªÂò¤Ï¡¢¥¨¥é¡¼²óÉü¤ÎÀïά¤ÎÁªÂò¤Ç¤¹¡£ ñ½ã¤ÇÊØÍø¤ÊÀïά¤Î1¤Ä¤Ï¡¢¥¨¥é¡¼¤ò¸¡½Ð¤·¤¿¤é¡¢ ñ½ã¤Ë¸½ºß¤ÎÆþÎϹԤޤ¿¤Ïʸ¤òÆÉ¤ßÈô¤Ð¤¹¤³¤È¤Ç¤¹¡£

stmnt: error ';'  /* ¥¨¥é¡¼¤¬¤¢¤ì¤Ð¡¢¡Ö;¡×¤¬¤¯¤ë¤Þ¤ÇÆÉ¤ßÈô¤Ð¤¹¡£ */

¤¹¤Ç¤Ë¹½Ê¸²òÀϤµ¤ì¤¿³«¤­¶èÀÚ¤ê¥È¡¼¥¯¥ó ¤ò¡¢ÊĤ¸¶èÀÚ¤ê¥È¡¼¥¯¥ó¤ËÂбþ¤µ¤»¤ë¤³¤È¤Ï¡¢ ¥¨¥é¡¼½èÍý¤Î¤¦¤Þ¤¤ÊýË¡¤Ç¤¹¡£¤½¤¦¤·¤Ê¤±¤ì¤Ð¡¢ÊĤ¸¶èÀÚ¤ê¥È¡¼¥¯¥ó¤¬ ¸å¤ÇÉÔŬÀڤ˸½¤ì¤Æ¡¢Ê̤νÅÂç¤Ê¥¨¥é¡¼¤ò°ú¤­µ¯¤³¤¹¤Ç¤·¤ç¤¦¡£

primary:  '(' expr ')'
        | '(' error ')'
        …
        ;

¥¨¥é¡¼²óÉü¤ÎÀïά¤Ï½Ï褵¤ì¤ë¤Ù¤­¤Ç¤¹¡£ Àïά¤¬°­¤¤¤È¡¢1¤Ä¤Î¹½Ê¸¥¨¥é¡¼¤¬¤·¤Ð¤·¤ÐÊ̤Υ¨¥é¡¼¤ò°ú¤­µ¯¤³¤·¤Þ¤¹¡£ Á°½Ò¤ÎÎã¤Ç¤Ï¡¢¥¨¥é¡¼²óÉüµ¬Â§¤Ï¡¢1¸Ä¤Îstmnt¤ÎÃæ¤Çµ¯¤­¤ë¤È ²¾Äꤵ¤ì¤Æ¤¤¤Þ¤¹¡£ ¤½¤¦¤Ç¤Ê¤¤²ÄǽÀ­¤È¤·¤Æ¡¢Í­¸ú¤Êstmnt¤ÎÃæ¤Ë¸í¤Ã¤Æ¥»¥ß¥³¥í¥ó¤¬ ¤Þ¤®¤ì¹þ¤ó¤Ç¤¤¤ë¤³¤È¤ò¹Í¤¨¤Æ¤ß¤Þ¤·¤ç¤¦¡£ ¥¨¥é¡¼²óÉüµ¬Â§¤¬ºÇ½é¤Î¥¨¥é¡¼¤ò²óÉü¤·¤¿¸å¤Ç¡¢¤Þ¤®¤ì¹þ¤ó¤À¥»¥ß¥³¥í¥ó¤Ë³¤¯ ÆþÎϤâ̵¸ú¤Êstmnt¤Ê¤Î¤Ç¡¢¤â¤¦1¤Ä¤Î¹½Ê¸¥¨¥é¡¼¤¬¤¿¤À¤Á¤Ë¤ß¤Ä¤«¤ê¤Þ¤¹¡£

¥¨¥é¡¼Êó¹ð¤Î¹¿¿å¤òÈò¤±¤ë¤¿¤á¤Ë¡¢ ºÇ½é¤Î¹½Ê¸¥¨¥é¡¼¤¬µ¯¤­¤¿Ä¾¸å¤Î¾¤Î¹½Ê¸¥¨¥é¡¼¤ËÂФ·¤Æ¤Ï¡¢ ¹½Ê¸²òÀÏ´ï¤Ï¥¨¥é¡¼Êó¹ð¤òɽ¼¨¤·¤Ê¤¤¤Ù¤­¤Ç¤·¤ç¤¦¡£ 3¸Ä¤ÎϢ³¤¹¤ëÆþÎϥȡ¼¥¯¥ó¤Î¥·¥Õ¥È¤ËÀ®¸ù¤·¤Æ¤«¤é¡¢ ¥¨¥é¡¼Êó¹ð¤òºÆ³«¤¹¤ë¤Ù¤­¤Ç¤¹¡£

error¥È¡¼¥¯¥ó¤ò¼õ¤±ÉÕ¤±¤ëµ¬Â§¤â¡¢Â¾¤Îµ¬Â§¤ÈƱÍÍ¤Ë ¥¢¥¯¥·¥ç¥ó¤ò»ý¤Æ¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£

¥¢¥¯¥·¥ç¥ó¤ÎÃæ¤Ç¥Þ¥¯¥íyyerrok¤ò»È¤Ã¤Æ¡¢ ¤¿¤À¤Á¤Ë¥¨¥é¡¼Êó¹ð¤òºÆ³«¤Ç¤­¤Þ¤¹¡£ ¤â¤·¡¢¥¨¥é¡¼µ¬Â§¤Î¥¢¥¯¥·¥ç¥ó¤ÎÃæ¤Ç¤³¤Î¥Þ¥¯¥í¤ò»È¤¨¤Ð¡¢ ¥¨¥é¡¼Êó¹ð¤ÏÍÞÀ©¤µ¤ì¤Þ¤»¤ó¡£ ¤³¤Î¥Þ¥¯¥í¤Ë°ú¿ô¤ÏÉÔÍפǡ¢‘yyerrok;’¤ÏÍ­¸ú¤ÊC¤Îʸ¤Ç¤¹¡£

ľÁ°¤ÎÀèÆÉ¤ß¥È¡¼¥¯¥ó¤Ï¡¢¥¨¥é¡¼¤Îľ¸å¤ËºÆ²òÀϤµ¤ì¤Þ¤¹¡£ ¤³¤ì¤¬ÉÔÅÔ¹ç¤Ê¤é¤Ð¡¢¥Þ¥¯¥íyyclearin¤Ë¤è¤Ã¤ÆÀèÆÉ¤ß¥È¡¼¥¯¥ó¤ò ¾Ã¤·¤Æ¤¯¤À¤µ¤¤¡£¤¹¤Ê¤ï¤Á¡¢¥¨¥é¡¼µ¬Â§¤Î¥¢¥¯¥·¥ç¥ó¤Ë ‘yyclearin;’ʸ¤ò½ñ¤¤¤Æ¤¯¤À¤µ¤¤¡£

¤¿¤È¤¨¤Ð¡¢¹½Ê¸¥¨¥é¡¼¤Ë¤ª¤¤¤Æ¡¢¹½Ê¸²òÀϤòºÆ³«¤¹¤Ù¤­¾ì½ê¤Þ¤ÇÆþÎϤò¿Ê¤á¤ë¤è¤¦¤Ê¡¢ ¥¨¥é¡¼½èÍý¼ê³¤­¤ò¹Í¤¨¤Æ¤ß¤Þ¤·¤ç¤¦¡£ »ú¶ç²òÀϴ狼¤éÊÖ¤µ¤ì¤ë¼¡¤Îµ­¹æ¤Ï¡¢¤ª¤½¤é¤¯Àµ¤·¤¤¤Ç¤·¤ç¤¦¡£ °ÊÁ°¤ÎÀèÆÉ¤ß¥È¡¼¥¯¥ó¤Ï‘yyclearin;’¤Ë¤è¤Ã¤Æ¼Î¤Æ¤é¤ì¤ë¤Ù¤­¤Ç¤¹¡£

¥Þ¥¯¥íYYRECOVERING¤Ï¡¢¼°¤òɽ¤·¡¢¹½Ê¸²òÀϴ郎¥¨¥é¡¼¤«¤é²óÉü¤¹¤ë ÅÓÃæ¤Ë¤¢¤ë¤Ê¤é¤ÐÃͤ¬1¤Ë¤Ê¤ê¡¢Ä̾ï¤Î¾õÂ֤ʤé¤ÐÃͤ¬0¤Ë¤Ê¤ê¤Þ¤¹¡£ Ãͤ¬1¤Ç¤¢¤ë¤È¤¤¤¦¤³¤È¤Ï¡¢¿·¤¿¤Ê¹½Ê¸¥¨¥é¡¼¤ËÂФ¹¤ë¥¨¥é¡¼¤ÎÊó¹ð¤¬¡¢ ¸½ºß¤ÏÍÞÀ©¤µ¤ì¤Æ¤¤¤ë¤³¤È¤ò¼¨¤·¤Þ¤¹¡£