Next: Rpcalc Main, Previous: Rpcalc Rules, Up: RPN Calc [Contents][Index]
rpcalc
»ú¶ç²òÀÏ´ï»ú¶ç²òÀÏ´ï¤Î»Å»ö¤Ï¡¢Äã¿å½à¤Î¹½Ê¸²òÀϤǡ¢Ê¸»ú¤Þ¤¿¤Ïʸ»úÎó¤ò
¥È¡¼¥¯¥ó¤ËÊÑ´¹¤·¤Þ¤¹¡£
Bison¹½Ê¸²òÀÏ´ï¤Ï¡¢»ú¶ç²òÀÏ´ï¤ò¸Æ¤Ó½Ð¤·¤Æ¥È¡¼¥¯¥ó¤òÆÀ¤Þ¤¹¡£
See The Lexical Analyzer Function yylex
¡£
RPN¡ÊµÕ¥Ý¡¼¥é¥ó¥ÉµË¡¡ËÅÅÂî¤Ë¤Ï¡¢´Êñ¤Ê»ú¶ç²òÀÏ´ï¤Î¤ß¤¬É¬ÍפǤ¹¡£
¤³¤Î»ú¶ç²òÀÏ´ï¤Ï¡¢¶õÇò¤È¥¿¥Ö¤òÆÉ¤ßÈô¤Ð¤·¡¢
¿ôÃͤòÆÉ¤ß¹þ¤ó¤Çdouble
·¿¤ÎNUM
¥È¡¼¥¯¥ó¤È¤·¤ÆÊÖ¤·¤Þ¤¹¡£
¿ôÃͤΰìÉôʬ¤Ç¤Ï¤Ê¤¤¤½¤Î¾¤Îʸ»ú¤Ï¡¢ÆÈΩ¤Î¥È¡¼¥¯¥ó¤Ç¤¹¡£
1ʸ»ú¥È¡¼¥¯¥ó¤Î¥È¡¼¥¯¥óÉ乿¤Ï¤½¤Îʸ»ú¼«¿È¤Ç¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
»ú¶ç²òÀÏ´Ø¿ô¤ÎÌá¤êÃͤϡ¢¥È¡¼¥¯¥ó·¿¤òɽ¤¹¿ôÃͤǤ¹¡£
Bisonµ¬Â§¤ÎÃæ¤Ç¥È¡¼¥¯¥ó·¿¤òɽ¤¹¤¿¤á¤Ë»È¤ï¤ì¤ëʸ»úÎó¤ÈƱ¤¸¤â¤Î¤¬¡¢
¤½¤Î·¿¤Î¿ôÃÍÉ乿¤òɽ¤¹C¤Î¼°¤Ç¤â¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤Ë¤Ï¡¢2¼ïÎà¤ÎƯ¤¤¬¤¢¤ê¤Þ¤¹¡£
¤â¤·¡¢¥È¡¼¥¯¥ó·¿¤¬Ê¸»ú¥ê¥Æ¥é¥ë¤Ê¤é¤Ð¡¢
¤½¤Î¿ôÃÍÉ乿¤Ïʸ»ú¤ÎASCIIÉ乿¤Ç¤¢¤ê¡¢
¿ôÃͤòɽ¤¹¤¿¤á¤Ë»ú¶ç²òÀÏ´ï¤ÎÃæ¤ÈƱ¤¸Ê¸»ú¥ê¥Æ¥é¥ë¤ò»È¤¨¤Þ¤¹¡£
¤â¤·¡¢¥È¡¼¥¯¥ó·¿¤¬¼±Ê̻Ҥʤé¤Ð¡¢Å¬ÀÚ¤ÊÈÖ¹æ¤òÄêµÁ¤¹¤ëC¤Î¥Þ¥¯¥í¤È¤·¤Æ¡¢
¤½¤Î¼±Ê̻Ҥ¬Bison¤Ë¤è¤Ã¤ÆÄêµÁ¤µ¤ì¤Þ¤¹¡£
¤·¤¿¤¬¤Ã¤Æ¡¢¤³¤ÎÎã¤Ç¤Ï¡¢NUM
¤Ï¡¢yylex
¤Î¤¿¤á¤Ë»È¤¨¤ë
¥Þ¥¯¥í¤Ë¤â¤Ê¤ê¤Þ¤¹¡£
¥È¡¼¥¯¥ó¤Î°ÕÌ£Ãͤϡ¢¤â¤·Â¸ºß¤¹¤ì¤Ð¡¢Âç°èÊÑ¿ôyylval
¤Ëµ²±¤µ¤ì¡¢
Bison¹½Ê¸²òÀÏ´ï¤Ï¤½¤³¤ò¸«¤Ë¤¤¤¤Þ¤¹
¡Êyylval
¤ÎC¥Ç¡¼¥¿·¿¤Ï¡¢Ê¸Ë¡¤ÎºÇ½é¤ÇÄêµÁ¤µ¤ì¤ëYYSTYPE
¤Ç¤¹¡£
see Declarations for rpcalc
¡Ë¡£
¥Õ¥¡¥¤¥ë¤Î½ª¤ï¤ê¤Ë㤹¤ë¤È¡¢¥È¡¼¥¯¥ó·¿¤Î¥³¡¼¥É0¤¬ÊÖ¤µ¤ì¤Þ¤¹ ¡ÊBison¤Ï¡¢Àµ¤Ç¤Ê¤¤Ç¤°Õ¤ÎÃͤòÆþÎϤνª¤ï¤ê¤Èǧ¼±¤·¤Þ¤¹¡Ë¡£
»ú¶ç²òÀÏ´ï¤Î¥×¥í¥°¥é¥à¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡£
/* * »ú¶ç²òÀÏ´ï¤Ï¡¢¿ôÃͤòÆÉ¤á¤Ð¡¢double·¿¤ÎÃͤò¥¹¥¿¥Ã¥¯¤ËÀѤó¤Ç * ¥È¡¼¥¯¥ó¡ÖNUM¡×¤òÊÖ¤·¡¢¿ôÃͰʳ°¤òÆÉ¤á¤Ð¡¢¤½¤Îʸ»ú¤Î¥¢¥¹¥¡¼É乿¤òÊÖ¤¹¡£ * ¶õÇò¤È¥¿¥Ö¤ÏÆÉ¤ßÈô¤Ð¤µ¤ì¤ë¡£¥Õ¥¡¥¤¥ë¤¬½ª¤ï¤ë¤È0¤òÊÖ¤¹¡£ */ #include <ctype.h>
yylex () { int c; /* ¶õÇòÎà¤òÆÉ¤ßÈô¤Ð¤¹ */ while ((c = getchar ()) == ' ' || c == '\t') ;
/* ¿ôÃͤò½èÍý¤¹¤ë */ if (c == '.' || isdigit (c)) { ungetc (c, stdin); scanf ("%lf", &yylval); return NUM; }
/* ¥Õ¥¡¥¤¥ë¤Î½ª¤ï¤ê¤ò½èÍý¤¹¤ë */ if (c == EOF) return 0; /* 1ʸ»ú¤òÊÖ¤¹ */ return c; }