Previous: Rpcalc Line, Up: Rpcalc Rules   [Contents][Index]


2.1.2.3 expr¤ÎÀâÌÀ

exp¥°¥ë¡¼¥×¤Ï¡¢¤¤¤¯¤Ä¤«¤Îµ¬Â§¤ò»ý¤Á¡¢ ¤½¤ì¤¾¤ì¤¬¼°¤Î¼ïÎà¤ËÂбþ¤·¤Æ¤¤¤Þ¤¹¡£ ºÇ½é¤Îµ¬Â§¤Ï¡¢¿ôÃͤ½¤Î¤â¤Î¤Ç¤¢¤ë¤â¤Ã¤È¤âñ½ã¤Ê¼°¤ò½èÍý¤·¤Þ¤¹¡£ Âè2¤Îµ¬Â§¤Ï¡¢2¸Ä¤Î¼°¤Ë²Ã»»µ­¹æ¤¬Â³¤¯¤è¤¦¤Ê¡¢²Ã»»¼°¤ò½èÍý¤·¤Þ¤¹¡£ Âè3¤Îµ¬Â§¤Ï¡¢¸º»»¼°¤ò½èÍý¤¹¤ë¡¢¤È¤¤¤Ã¤¿¶ñ¹ç¤Ç¤¹¡£

exp:      NUM
        | exp exp '+'     { $$ = $1 + $2;    }
        | exp exp '-'     { $$ = $1 - $2;    }
        …
        ;

¤¹¤Ù¤Æ¤Îexpµ¬Â§¤ò¤Þ¤È¤á¤ë¤¿¤á¤Ë‘|’¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¢ ¼¡¤Î¤è¤¦¤ËÊÌ¡¹¤Ë½ñ¤¯¤³¤È¤â²Äǽ¤Ç¤¹¡£

exp:      NUM ;
exp:      exp exp '+'     { $$ = $1 + $2;    } ;
exp:      exp exp '-'     { $$ = $1 - $2;    } ;
        …

µ¬Â§¤Î¤Û¤È¤ó¤É¤Ï¡¢¼°¤ÎÉôÉʤÎÃͤ«¤é¼°¤ÎÃͤò·×»»¤¹¤ë¤¿¤á¤Î¡¢ ¥¢¥¯¥·¥ç¥ó¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£ ¤¿¤È¤¨¤Ð¡¢²Ã»»¤Î¤¿¤á¤Îµ¬Â§¤Ç¤Ï¡¢$1¤Ï¼°¤ÎÂè1¤ÎÉôÉʤò¡¢ $2¤Ï¼°¤ÎÂè2¤ÎÉôÉʤòɽ¤·¤Þ¤¹¡£ Âè3¤ÎÉôÉÊ'+'¤Ï¡¢°ÕÌ£ÃͤˤϴØÏ¢¤¹¤ë¾ðÊó¤ò»ý¤Á¤Þ¤»¤ó¤¬¡¢ ¤â¤·Ãͤò»ý¤Ã¤Æ¤¤¤ì¤Ð¡¢$3¤È¤·¤Æ»²¾È¤Ç¤­¤Þ¤¹¡£ yyparse¤¬¤³¤Îµ¬Â§¤ò»È¤Ã¤Æ²Ã»»¼°¤òǧ¼±¤¹¤ë¤È¡¢ ¼°Á´ÂΤÎÃͤȤ·¤Æ¡¢2¸Ä¤ÎÉôʬ¼°¤ÎÃͤÎϤ¬À¸À®¤µ¤ì¤Þ¤¹¡£ See Actions¡£

¤¹¤Ù¤Æ¤Îµ¬Â§¤ËÂФ·¤Æ¥¢¥¯¥·¥ç¥ó¤ò½ñ¤¯É¬ÍפϤ¢¤ê¤Þ¤»¤ó¡£ ¥¢¥¯¥·¥ç¥ó¤ò¾Êά¤¹¤ë¤È¡¢Bison¤Ï$1¤ÎÃͤò$$¤ËÊ£¼Ì¤·¤Þ¤¹¡£ Âè1¤Îµ¬Â§¤Ç¤Ï¡¢NUM¤ÎÃͤò¤½¤Î¤Þ¤ÞÊ£¼Ì¤¹¤ë¤¿¤á¤Ë¡¢ ¤³¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£

¤³¤³¤Ç¼¨¤·¤¿¥ê¥¹¥È¤Ï¡¢Ë¾¤Þ¤·¤¤½ñ¼°¤Ç¤¹¤¬¡¢ Bison¤¬¤³¤Î¤è¤¦¤ËÍ׵᤹¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ ɬÍפ˱þ¤¸¤Æ¡¢¶õÇò¡¢¥¿¥Ö¡¢²þ¹Ô¤òÃÖ¤±¤Þ¤¹¡£ ¼¡¤Î¤è¤¦¤Ê½ñ¤­Êý¤â²Äǽ¤Ç¤¹¡£

exp   : NUM | exp exp '+' {$$ = $1 + $2; } | …

¤³¤ì¤Ï¡¢¼¡¤Î¥ê¥¹¥È¤ÈÅù²Á¤Ç¤¹¡£

exp:      NUM
        | exp exp '+'    { $$ = $1 + $2; }
        | …

¤·¤«¤·¡¢¸å¼Ô¤Î¤Û¤¦¤¬²ÄÆÉÀ­¤¬Í¥¤ì¤Æ¤¤¤Þ¤¹¡£