Next: , Up: Multi-function Calc   [Contents][Index]


2.4.1 mfcalc¤Î¤¿¤á¤ÎÄêµÁ

°Ê²¼¤Ë¤Ï¡¢Â¿µ¡Ç½ÅÅÂî¤Î¤¿¤á¤Î¡¢C¤ÈBison¤ÎÀë¸À¤¬¤¢¤ê¤Þ¤¹¡£

%{
#include <math.h>  /* cos(), sin()¤Ê¤É¤Î¿ô³Ø´Ø¿ô¤Î¤¿¤á */
#include "calc.h"  /* `symrec'¤ÎÄêµÁ¤ò´Þ¤à             */
%}
%union {
double     val;    /* ¿ôÃͤòÊÖ¤¹¤¿¤á                   */
symrec  *tptr;     /* µ­¹æÉ½¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¤¿¤á     */
}

%token <val>  NUM        /* ñ½ã¤ÊÇÜÀºÅÙ¿ôÃÍ */
%token <tptr> VAR FNCT   /* ÊÑ¿ô¤È´Ø¿ô       */
%type  <val>  exp

%right '='
%left '-' '+'
%left '*' '/'
%left NEG     /* ÈÝÄê -- ñ¹à¤ÎÉé */
%right '^'    /* ¤Ù¤­¾è           */

/* ʸˡ¤¬Â³¤¯ */

%%

¤³¤Îʸˡ¤ÎƳÆþÉôʬ¤Ç¤Ï¡¢Bison¸À¸ì¤Î¿·¤·¤¤2¤Ä¤Îµ¡Ç½¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ ¤³¤ì¤é¤Îµ¡Ç½¤Ë¤è¤Ã¤Æ¡¢°ÕÌ£Ãͤ¬¤¤¤í¤¤¤í¤Ê¥Ç¡¼¥¿·¿¤ò»ý¤Æ¤Þ¤¹ ¡Êsee More Than One Value Type¡Ë¡£

%unionÀë¸À¤Ï¡¢YYSTYPE¤ÎÄêµÁ¤ÎÂå¤ï¤ê¤Ç¡¢ ²Äǽ¤Ê·¿¤Î°ìÍ÷¤ò»ØÄꤷ¤Þ¤¹¡£ ¤³¤³¤Çµö¤µ¤ì¤ë·¿¤Ï¡¢¡Êexp¤ÈNUM¤Î¤¿¤á¤Î¡ËÇÜÀºÅÙÉâÆ°¾®¿ôÅÀ·¿¤È¡¢ µ­¹æÉ½¤Î¹àÌܤؤΥݥ¤¥ó¥¿¤Ç¤¹¡£ See The Collection of Value Types¡£

Ãͤ¬¤¤¤í¤¤¤í¤Ê·¿¤ò»ý¤Ä¤³¤È¤¬¤Ç¤­¤ë¤Î¤Ç¡¢ °ÕÌ£Ãͤò»È¤¦¤½¤ì¤¾¤ì¤Îʸˡµ­¹æ¤ËÂФ·¤Æ¡¢ ·¿¤ò´ØÏ¢¤Å¤±¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¤³¤ì¤é¤Îµ­¹æ¤ÏNUM¡¢VAR¡¢FNCT¡¢exp¤Ç¤¹¡£ ¤½¤ì¤é¤ÎÀë¸À¤Ï¡¢ÉÔÅù¹æ¤Ç°Ï¤Þ¤ì¤¿¡Ê‘<...>’¡Ë¥Ç¡¼¥¿·¿¤Ë´Ø¤¹¤ë ¾ðÊó¤òÉղäµ¤ì¤Æ¤¤¤Þ¤¹¡£

Bison¤Ï¡¢¤Á¤ç¤¦¤É%token¤¬¥È¡¼¥¯¥ó·¿¤ÎÀë¸À¤Ë»È¤ï¤ì¤ë¤Î¤ÈƱ¤¸¤è¤¦¤Ë¡¢ %type¤¬Èó½ªÃ¼µ­¹æ¤ÎÀë¸À¤Ë»È¤ï¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£ Èó½ªÃ¼µ­¹æ¤ÏÄ̾綠¤ì¤é¤òÄêµÁ¤¹¤ëµ¬Â§¤Ë¤è¤Ã¤Æ°ÅÌÛ¤ËÀë¸À¤µ¤ì¤ë¤Î¤Ç¡¢ %type¤ò¤½¤Îµ¬Â§¤è¤ê¤âÀè¤Ë»È¤Ã¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£ ¤·¤«¤·¡¢exp¤Ï¡¢¤½¤ÎÃͤη¿¤ò»ØÄꤹ¤ë¤Î¤Ç¡¢ ÌÀ¼¨Åª¤ËÀë¸À¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ See Nonterminal Symbols¡£