Next: Handling Strings, Previous: Useful Code, Up: Useful Code [Contents][Index]
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
¤ÎÃæ¤Ë¤¢¤ëÎã¤È¤Û¤È¤ó¤ÉƱ°ì¤Ç¤¹¡£
¤è¤êŤ¤¥Æ¥¥¹¥È¡¦¥Ö¥í¥Ã¥¯¤Ë¥Þ¥Ã¥Á¤¹¤ë¤¿¤á¡¢
¤Ï¤ë¤«¤Ë¹â®¤Ç¤¹¤·¡¢
¥ë¡¼¥ë¤ÎÃæ¤Ç²þ¹Ô¤Î¤ß¤Ë¥Þ¥Ã¥Á¤µ¤»¤ëɬÍפ⤢¤ê¤Þ¤»¤ó¡£