Next: , Previous: Useful Code, Up: Useful Code   [Contents][Index]


9.1 ¥³¥á¥ó¥È¤Î½èÍý

Flex and C¤Ë¤ª¤¤¤Æ½Ò¤Ù¤¿¤è¤¦¤Ë¡¢ ¥³¥á¥ó¥È¤Ïinput()¤ò»È¤Ã¤Æ½èÍý¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¤³¤ì¤ò¹Ô¤¦¤¿¤á¤Î¥³¡¼¥É¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

%%
"/*" {
        int a,b;
        
        a = input();
        while(a != EOF){
          b = input();
          if(a == '*' && b == '/'){
            break;
           }else{
            a = b;
           }
         }
        if(a == EOF){
          error_message("EOF in comment");
        }
      }

¤³¤ì¤Ï¡¢ Flex¤ÈLex¤ÎξÊý¤ÇÀµÅö¤Ê¥³¡¼¥É¤Ç¤¹¡£ ¥³¥á¥ó¥È¤ÏÇÓ¾Ū¥¹¥¿¡¼¥È¾õÂÖ¤ò»È¤Ã¤Æ½èÍý¤¹¤ë¤³¤È¤â²Äǽ¤Ç¡¢ ¤³¤Á¤é¤ÎÊý¤¬¤è¤êÈþ¤·¤¯¡¢ ¤è¤ê¸úΨŪ¤Ç¤¹¡£ ¥¹¥¿¡¼¥È¾õÂÖ¤ò»È¤Ã¤Æ¥³¥á¥ó¥È¤ò½èÍý¤¹¤ë¥³¡¼¥É¤Ï¡¢ °Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

%x COMMENT
%%
"/*"                  BEGIN(COMMENT);
<COMMENT>[^\n]
<COMMENT>\n   
<COMMENT><<EOF>>      yyerror("EOF in comment");
<COMMENT>"*/"         BEGIN(INITIAL);

²þ¹Ô¤Î£±¤ÄÁ°¤Þ¤Ç¤È²þ¹Ô¤È¤òÊÌ¡¹¤Ë½èÍý¤·¤¿Êý¤¬Îɤ¤¤Î¤Ï¡¢ ¤½¤¦¤·¤Ê¤¤¤È¡¢ ÆâÉô¤Î¥Þ¥Ã¥Á½èÍýÍѤΥХåե¡¤ò¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤µ¤»¤Æ¤·¤Þ¤¦¤è¤¦¤Ê¥ë¡¼¥ë¤òºî¤ë¤³¤È¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦¤«¤é¤Ç¤¹¡£ Lex¤ÏÇÓ¾Ū¥¹¥¿¡¼¥È¾õÂÖ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢ ¤³¤Î¥³¡¼¥É¤ÏLex¤Ç¤Ïư¤­¤Þ¤»¤ó¡£ ¤³¤ÎÎã¤Ïʬ¤«¤ê¤ä¤¹¤¤¤Î¤Ç¤¹¤¬¡¢ ¼ÂºÝ¤Ë¤Ïñ°ìʸ»ú¤ò¥Þ¥Ã¥Á¤¹¤ë¤Î¤Ë¿¤¯¤Î»þ´Ö¤ò̵Â̤˾ÃÈñ¤¹¤ë¤¿¤á¡¢ Èó¸úΨŪ¤Ç¤¹¡£ ¤â¤Ã¤ÈŤ¤¥Æ¥­¥¹¥È¤Ë¥Þ¥Ã¥Á¤¹¤ë¤è¤¦¤ËÊѹ¹¤¹¤ë¤³¤È¤Ç¡¢ ¥¹¥Ô¡¼¥É¤ò¤«¤Ê¤ê¸þ¾å¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ Î㤨¤Ð¡¢ °Ê²¼¤Î¤è¤¦¤Ë½ñ¤­Ä¾¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

%x COMMENT
%%
"/*"                     BEGIN(COMMENT);
<COMMENT>[^*\n]*         
<COMMENT>[^*\n]*\n
<COMMENT>"*"+[^*/\n]*    /* ;ʬ¤Ê*¤òõ¤¹ */
<COMMENT>"*"+[^*/\n]*\n
<COMMENT><<EOF>>         yyerror("EOF in comment");
<COMMENT>"*"+"/"         BEGIN(INITIAL);

¤³¤ì¤Ï¡¢ Flex¤È°ì½ï¤ËÇÛÉÛ¤µ¤ì¤Æ¤¤¤ëflexdoc.1¤ÎÃæ¤Ë¤¢¤ëÎã¤È¤Û¤È¤ó¤ÉƱ°ì¤Ç¤¹¡£ ¤è¤êŤ¤¥Æ¥­¥¹¥È¡¦¥Ö¥í¥Ã¥¯¤Ë¥Þ¥Ã¥Á¤¹¤ë¤¿¤á¡¢ ¤Ï¤ë¤«¤Ë¹â®¤Ç¤¹¤·¡¢ ¥ë¡¼¥ë¤ÎÃæ¤Ç²þ¹Ô¤Î¤ß¤Ë¥Þ¥Ã¥Á¤µ¤»¤ëɬÍפ⤢¤ê¤Þ¤»¤ó¡£