Next: Multi-function Calc, Previous: Infix Calc, Up: Examples [Contents][Index]
º£¤Þ¤Ç¡¢Ëܽñ¤Ç¤Ï¡¢¥¨¥é¡¼²óÉü¡Êerror recovery¡Ë¡¢
¤Ä¤Þ¤ê¡¢¹½Ê¸¥¨¥é¡¼¤ò¸¡½Ð¤·¤¿¸å¤Ç¹½Ê¸²òÀϤò³¤±¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï
¸ÀµÚ¤·¤Æ¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£
º£¤Þ¤Ç¤Ë°·¤Ã¤¿¤³¤È¤Ï¡¢yyerror
¤ò»È¤Ã¤Æ¥¨¥é¡¼¤òÊó¹ð¤¹¤ë¤³¤È¤À¤±¤Ç¤·¤¿¡£
yyerror
¤ò¸Æ¤Ó½Ð¤·¤¿¸å¤Ç¡¢ÆÃ¤Ë»ØÄꤷ¤Ê¤¤¤Èyyparse
¤Ï
½èÍý¤ò½ª¤ï¤ë¤³¤È¤ò»×¤¤½Ð¤·¤Æ¤¯¤À¤µ¤¤¡£
¤Ä¤Þ¤ê¡¢¥¨¥é¡¼¤ò´Þ¤àÆþÎϹԤ¬¡¢ÅÅÂî¥×¥í¥°¥é¥à¤ò½ªÎ»¤µ¤»¤Þ¤¹¡£
¤³¤Î·ç´Ù¤ò¤É¤Î¤è¤¦¤Ë²þÁ±¤¹¤ë¤«¼¨¤·¤Þ¤·¤ç¤¦¡£
Bison¸À¸ì¤Îʸˡµ¬Â§¤Ë¤Ï¡¢Í½Ìó¸ìerror
¤¬¤¢¤ê¤Þ¤¹¡£
¼¡¤ÎÎã¤Ç¤Ï¡¢line
¤ËÂФ¹¤ëÁªÂò»è·²¤Ëerror
¤òÄɲ乤ë
ÊýË¡¤ò¼¨¤·¤Þ¤¹¡£
line: '\n' | exp '\n' { printf ("\t%.10g\n", $1); } | error '\n' { yyerrok; } ;
ʸˡ¤Ø¤Î¤³¤ÎÄɲäˤè¤Ã¤Æ¡¢¹½Ê¸²òÀÏ¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Ë¡¢
´Êñ¤Ê¥¨¥é¡¼²óÉü¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£
ɾ²ÁÉÔ²Äǽ¤Ê¼°¤¬ÆÉ¤ß¹þ¤Þ¤ì¤ë¤È¡¢
line
¤ËÂФ¹¤ëÂè3¤Îµ¬Â§¤Ë¤è¤Ã¤Æ¥¨¥é¡¼¤¬Ç§¼±¤µ¤ì¡¢
¹½Ê¸²òÀϤ¬Â³¤±¤é¤ì¤Þ¤¹¡£
¤³¤Î¾ì¹ç¤Ë¤â¡¢´Ø¿ôyyerror
¤Ï¸Æ¤Ó½Ð¤µ¤ì¡¢
¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡£
¥¢¥¯¥·¥ç¥ó¤Ï¡¢
Bison¤Ë¤è¤Ã¤Æ¼«Æ°Åª¤ËÄêµÁ¤µ¤ì¤ë¥Þ¥¯¥í¤Ç¤¢¤ëyyerrok
ʸ¤ò¼Â¹Ô¤·¤Þ¤¹¡£
¤³¤ì¤Ï¥¨¥é¡¼²óÉü¤Î´°Î»¤ò°ÕÌ£¤·¤Þ¤¹¡Êsee Error Recovery¡Ë¡£
yyerrok
¤Èyyerror
¤Î°ã¤¤¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤Î·Á¼°¤Î¥¨¥é¡¼²óÉü¤Ï¡¢¹½Ê¸¥¨¥é¡¼¤ò°·¤¤¤Þ¤¹¡£
¾¤Î¼ïÎà¤Î¥¨¥é¡¼¤â¤¢¤ê¤Þ¤¹¡£
¤¿¤È¤¨¤Ð¡¢0¤Ë¤è¤ë½ü»»¤Ï¡¢Îã³°¥·¥°¥Ê¥ë¤òȯÀ¸¤·¡¢Ä̾ï¤ÏÃ×̿Ū¤Ç¤¹¡£
¼ÂºÝ¤ÎÅÅÂî¥×¥í¥°¥é¥à¤Ï¡¢¤³¤Î¥·¥°¥Ê¥ë¤ò¤Ä¤«¤Þ¤¨¤Æ¡¢longjmp
¤ò»È¤Ã¤Æ
main
¤ËÌá¤ê¡¢ÆþÎϹԤι½Ê¸²òÀϤò³¤±¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¤µ¤é¤Ë¡¢¸½ºß¤ÎÆþÎϹԤλĤê¤ÏÇË´þ¤µ¤ì¤ë¤Ù¤¤Ç¤¹¡£
¤·¤«¤·¡¢¤³¤ì¤é¤ÎÌäÂê¤Ï¡¢Bison¤Î¥×¥í¥°¥é¥à¤Ë¸ÇͤÎÌäÂê¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¢
Ëܽñ¤Ç¤Ï²òÀ⤷¤Þ¤»¤ó¡£