Previous: Start State Notes (Flex 2.5), Up: Start States [Contents][Index]
¥×¥í¥°¥é¥ß¥ó¥°¤Ë¤ª¤¤¤Æ¡¢ ²¿¤«¤ò¤¹¤ëÊýË¡¤ò³Ø¤Ö¤Î¤ËºÇÎɤÎÊýË¡¤Ï¡¢ ¼ÂºÝ¤Ë¤½¤ì¤ò¤ä¤Ã¤Æ¤ß¤ë¤³¤È¤Ç¤¹¡£ ¤½¤Î¤³¤È¤Ëα°Õ¤·¡¢ ¥¹¥¿¡¼¥È¾õÂÖ¤ò¤É¤Î¤è¤¦¤Ë»È¤¦¤³¤È¤¬¤Ç¤¤ë¤«¤ò¼¨¤¹¼ÂÎã¤ò°Ê²¼¤Ëµó¤²¤Þ¤¹¡£
/* * dates.lex: ÆüÉդΰۤʤë·Á¼°¤ò¼±Ê̤¹¤ë¤¿¤á¤Ë * ¥¹¥¿¡¼¥È¾õÂÖ¤ò»ÈÍѤ¹¤ëÎã */ %{ #include <ctype.h> char month[20],dow[20],day[20],year[20]; %}
skip of|the|[ \t,]* /* ¤³¤Îʸ»ú¤ÎʤӤò̵»ë¤¹¤ë */ mon (mon(day)?) /* ÍËÆü¤Î̾Á°¤ÎŤ¤·Á¼°¤Èû¤¤·Á¼°¤Î */ tue (tue(sday)?) /* ¤É¤Á¤é¤Ë¤â¥Þ¥Ã¥Á¤¹¤ë¤è¤¦ÀßÄꤹ¤ë */ wed (wed(nesday)?) thu (thu(rsday)?) fri (fri(day)?) sat (sat(urday)?) sun (sun(day)?)
/* °Ê²¼¤Ï¤¹¤Ù¤Æ¤Î²Äǽ¤ÊÍËÆü¤òɽ¤¹ */ day_of_the_week ({mon}|{tue}|{wed}|{thu}|{fri}|{sat}|{sun}) jan (jan(uary)?) /* ¤¹¤Ù¤Æ¤Î·î¤Ë¤Ä¤¤¤ÆÆ±ÍͤΤ³¤È¤ò¹Ô¤¦ */ feb (feb(ruary)?) mar (mar(ch)?) apr (apr(il)?) may (may) jun (jun(e)?) jul (jul(y)?) aug (aug(ust)?) sep (sep(tember)?) oct (oct(ober)?) nov (nov(ember)?) dec (dec(ember)?)
/* °Ê²¼¤Ï¤¹¤Ù¤Æ¤Î²Äǽ¤Ê·î¤Î̾Á°¤òɽ¤¹ */ first_half ({jan}|{feb}|{mar}|{apr}|{may}|{jun}) second_half ({jul}|{aug}|{sep}|{oct}|{nov}|{dec}) month {first_half}|{second_half}
/* * Æü¡¢·î¡¢Ç¯¤Î¿ôÃÍ·Á¼° * ¤³¤ì¤é¤Ï½ÅÊ£¤·¤Æ¤¤¤ë¤¿¤á¡¢Àµ¤·¤¯¥Ñ¡¼¥¹¤¹¤ë¤Ë¤Ï¡¢ * ¥¹¥¿¡¼¥È¾õÂÖ¤ÈÆüÉդηÁ¼°¤Ë´Ø¤¹¤ë¤¢¤ëÄøÅÙ¤ÎÃμ± * ¤¬É¬ÍפǤ¢¤ë¤³¤È¤ËÃí°Õ */ nday [1-9]|[1-2][0-9]|3[0-1] nmonth [1-9]|1[0-2] nyear [0-9]{1,4}
/* ǯ¤ÈÆü¤Î¤¿¤á¤Î³ÈÄ¥»Ò */ year_ext (ad|AD|bc|BC)? day_ext (st|nd|rd|th)?
/* * ¤³¤Î¥×¥í¥°¥é¥à¤ÎºÇ¸å¤Ë¤¢¤ë¥ë¡¼¥ë¤ò»È¤Ã¤Æ¤¹¤Ù¤Æ¤Î̵´Ø·¸¤Ê * ¥Æ¥¥¹¥È¤ò½èÍý¤¹¤ë¤¿¤á¤Ë¡¢ÈóÇÓ¾Ū¤Ê¥¹¥¿¡¼¥È¾õÂÖ¤ò»È¤¦¡£ * ¤³¤¦¤·¤Ê¤¤¤È¡¢¸Ä¡¹¤Î¥¹¥¿¡¼¥È¾õÂ֤Υ֥í¥Ã¥¯¤Ë¥ë¡¼¥ë¤òÄɲà * ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¯¤Ê¤ë¡£µ¬ÌϤÎÂ礤¤¥¹¥¥ã¥Ê¤Ë¤ª¤¤¤Æ¤Ï¡¢ * ¤³¤ì¤Ï¼Â¹Ô²Äǽ¤ÊÁªÂò»è¤Ç¤¢¤ë¤³¤È¤¬Â¿¤¤¡£¤Ê¤¼¤Ê¤é¡¢¥ë¡¼¥ë * ¤ÎÄɲäϥ¹¥¥ã¥Ê¤Î¥¹¥Ô¡¼¥É¤Ë±Æ¶Á¤òÍ¿¤¨¤Ê¤¤¤«¤é¤Ç¤¢¤ë¡£ * ¤³¤³¤Ç¤Ï¡¢´Ê·é¤µ¤òÍ¥À褵¤»¤ë¤³¤È¤Ë¤¹¤ë */ %s LONG SHORT %s DAY MONTH /* Ť¤·Á¼°¤ÎÆüÉդΤ¿¤á¤ËÄɲä·¤¿¾õÂÖ */ %s YEAR_FIRST YEAR_LAST YFMONTH YLMONTH
%% /* * ÍËÆü¤Ï¾ï¤ËºÇ½é¤ËÃÖ¤«¤ì¡¢¸å¤í¤Ë³¤¯ÆüÉդν¤¾þ»Ò¤È¤·¤Æ * µ¡Ç½¤¹¤ë¤â¤Î¤È²¾Äꤵ¤ì¤ë¡£¤è¤Ã¤Æ¡¢ÍËÆü¤ÏÊ£¿ô¤ÎÆüÉÕ·Á¼° * ¤Î´Ö¤Ç¶¦ÍѲÄǽ¤Ç¤¢¤ë */ <LONG>{day_of_the_week} strcpy(dow,yytext);
/* * ·î-Æü-ǯ¤È¤¤¤¦·Á¼°¤ÎÆüÉÕ¤ò½èÍý¤¹¤ë * ¥Ñ¡¼¥¹¾õÂÖ¤Ï * LONG->[·î¤Ë¥Þ¥Ã¥Á]->DAY->LONG * ¤Î¤è¤¦¤ËÁ«°Ü¤¹¤ë */ <LONG>{month} strcpy(month,yytext); BEGIN(DAY); <DAY>{nday}{day_ext} strcpy(day,yytext); BEGIN(LONG);
/* * Æü-·î-ǯ¤È¤¤¤¦·Á¼°¤ÎÆüÉÕ¤ò½èÍý¤¹¤ë * ¥Ñ¡¼¥¹¾õÂÖ¤Ï * LONG->[Æü¤Ë¥Þ¥Ã¥Á]->MONTH->LONG * ¤Î¤è¤¦¤ËÁ«°Ü¤¹¤ë */ <LONG>{nday}{day_ext} strcpy(day,yytext); BEGIN(MONTH); <MONTH>{month} strcpy(month,yytext); BEGIN(LONG);
/* * ÆüÉÕ¤Îǯ¤ÎÉôʬ¤ÏºÇ¸å¤ËÃÖ¤«¤ì¤ë¤â¤Î¤È¹Í¤¨¤é¤ì¤ë¡£¤·¤¿¤¬¤Ã¤Æ¡¢ * ǯ¤ò¸«¤Ä¤±¤¿¤é¥Ñ¡¼¥¹¤µ¤ì¤¿ÆüÉÕ¤òɽ¼¨¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£¤â¤Á * ¤í¤ó¡¢ÆüÉդȤ·¤ÆÉÔÅö¤Ê¤â¤Î¤Ç¤¢¤ì¤Ð¥´¥ß¤¬½ÐÎϤµ¤ì¤ë¤³¤È¤Ë¤Ê¤ë */ <LONG>{nyear}{year_ext} { printf("Long:\n"); printf(" DOW : %s \n",dow); printf(" Day : %s \n",day); printf(" Month : %s \n",month); printf(" Year : %s \n",yytext); strcpy(dow,""); strcpy(day,""); strcpy(month,""); }
/* * Æü-·î-ǯ¤È¤¤¤¦·Á¼°¤ÎÆüÉÕ¤ò½èÍý¤¹¤ë * SHORT¾õÂ֤ǿôÃÍ·Á¼°¤ÎÆü¤ò¸«¤Ä¤±¤¿¾ì¹ç¤Ï¡¢Ç¯¤¬ÆüÉդκǸå¤ÎÉôʬ * ¤Ë¤Ê¤ë¤È²¾Äꤹ¤ë * ¥Ñ¡¼¥¹¾õÂÖ¤Ï * SHORT->[Æü¤Ë¥Þ¥Ã¥Á]->YEAR_LAST->YLMONTH->SHORT * ¤Î¤è¤¦¤ËÁ«°Ü¤¹¤ë */ <SHORT>{nday} strcpy(day,yytext); BEGIN(YEAR_LAST); <YEAR_LAST>{nmonth} strcpy(month,yytext);BEGIN(YLMONTH); <YLMONTH>{nyear} strcpy(year,yytext); BEGIN(SHORT);
/* * ǯ-·î-Æü¤È¤¤¤¦·Á¼°¤ÎÆüÉÕ¤ò½èÍý¤¹¤ë * SHORT¾õÂ֤ǿôÃÍ·Á¼°¤Îǯ¤ò¸«¤Ä¤±¤¿¾ì¹ç¤Ï¡¢Æü¤¬ÆüÉդκǸå¤ÎÉôʬ * ¤Ë¤Ê¤ë¤È²¾Äꤹ¤ë * ¥Ñ¡¼¥¹¾õÂÖ¤Ï * SHORT->[ǯ¤Ë¥Þ¥Ã¥Á]->YEAR_FIRST->YFMONTH->SHORT * ¤Î¤è¤¦¤ËÁ«°Ü¤¹¤ë */ <SHORT>{nyear} strcpy(year,yytext); BEGIN(YEAR_FIRST); <YEAR_FIRST>{nmonth} strcpy(month,yytext);BEGIN(YFMONTH); <YFMONTH>{nday} strcpy(day,yytext); BEGIN(SHORT);
/* * ¿ôÃÍ·Á¼°¤ÎÆüÉդǤϡ¢Ç¯¤ÏºÇ½é¤Ë¤Ê¤ë¤³¤È¤âºÇ¸å¤Ë¤Ê¤ë¤³¤È¤â²Äǽ¡£ * ¤·¤¿¤¬¤Ã¤Æ¡¢¥Ñ¡¼¥¹¤·¤¿¤â¤Î¤ò¤¤¤Äɽ¼¨¤¹¤Ù¤¤«¤ò¼¨¤¹¤Î¤Ë²þ¹Ô¤ò»È¤¦ */ <SHORT>\n { printf("Short:\n"); printf(" Day : %s \n",day); printf(" Month : %s \n",month); printf(" Year : %s \n",year); strcpy(year,""); strcpy(day,""); strcpy(month,""); }
/* * °Ê²¼¤Ë¤è¤ê¡¢Ã»¤¤¡Ê¿ô»ú¡Ë·Á¼°¤ÈŤ¤¡Ê±Ñ¿ô»ú¡Ë·Á¼°¤È¤òÀڤ괹¤¨¤ë */ long\n BEGIN(LONG); short\n BEGIN(SHORT);
/* * °Ê²¼¤Î¥ë¡¼¥ë¤Ï¡¢Ìµ´Ø·¸¤Ê¥Æ¥¥¹¥È¤ò¸«¤Ä¤±¤ÆÇË´þ¤¹¤ë * ¡Ê¥Þ¥Ã¥Á¤µ¤ì¤¿¥Æ¥¥¹¥È¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¤ÏECHO¤µ¤ì¤Ê¤¤¤¬¡¢ * ¥Þ¥Ã¥Á¤µ¤ì¤Ê¤«¤Ã¤¿¥Æ¥¥¹¥È¤ÏECHO¤µ¤ì¤ë¡£¥Ô¥ê¥ª¥É¤Ï * ²þ¹Ô°Ê³°¤Î¤¹¤Ù¤Æ¤Îʸ»ú¤ò¸«¤Ä¤±¤ë¡£²þ¹Ô¤Ï\n¤Ë¤è¤Ã¤Æ * ¸«¤Ä¤±¤é¤ì¤ë¡Ë */ {skip}* \n .
¤³¤Î¼ÂÎã¤Ï¡¢ ÍÍ¡¹¤Ê·Á¼°¤ÎÆüÉÕ¤ò¥¹¥¥ã¥ó¤·¡¢ ¹½À®Ã±°Ì¤Ëʬ³ä¤·¤Þ¤¹¡£ Î㤨¤Ð¡¢ °Ê²¼¤Î¤â¤Î¤òÀµ¤·¤¯¥¹¥¥ã¥ó¤·¡¢ ÆüÉդθġ¹¤ÎÉôʬ¤ò¼±Ê̤·¤Þ¤¹¡£
short 1989:12:23 1989:11:12
23:12:1989 11:12:1989 1989/12/23 1989/11/12 23/12/1989 11/12/1989 1989-12-23 1989-11-12 23-12-1989
11-12-1989 long Friday the 5th of January, 1989 Friday, 5th of January, 1989
Friday, January 5th, 1989 Fri, January 5th, 1989 Fri, Jan 5th, 1989 Fri, Jan 5, 1989
FriJan 5, 1989 FriJan5, 1989 FriJan51989 Jan51989
¥Õ¥¡¥¤¥ë¤ÎºÇ½é¤ÎÉôʬ¤Ç¤Ï¡¢ ·î¡¢¤ª¤è¤Ó¡¢ÆüÉդΰۤʤëÉôʬ¤Ë»È¤ï¤ì¤ë¿ô»ú·Á¼°¤òñ¤ËÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£ ¤³¤Î¼ÂÎã¤Ç¤Ï¡¢ ¤¢¤ëÆÃÄê¤ÎÊýË¡¤Ç¥¹¥¥ã¥ó½èÍý¤¬¿Ê¹Ô¤¹¤ë¤è¤¦¶¯À©¤¹¤ë¤¿¤á¤Ë¡¢ ¥¹¥¿¡¼¥È¾õÂÖ¤ò»È¤¤¤Þ¤¹¡£ Î㤨¤Ð¡¢ ¹Ô¤ÎÀèÆ¬¤Ç‘1989’¤ò¸«¤Ä¤±¤ì¤Ð¡¢ ¤½¤ì¤¬Æü¤È·î¤ÎÁȤ߹ç¤ï¤»¤Ç¤Ï¤Ê¤¯Ç¯¤Ç¤¢¤ê¡¢ ¤·¤¿¤¬¤Ã¤Æ¡¢ ÆüÉդμ¡¤ÎÉôʬ¤¬·î¤Ë°ã¤¤¤Ê¤¤¤³¤È¤¬Ê¬¤ê¡¢ ¥¹¥¥ã¥ó½èÍý¤¬¤½¤Î¤È¤ª¤ê¤Ë¿Ê¤à¤è¤¦¶¯À©¤·¤Þ¤¹¡£ ¤³¤Î¤³¤È¤Ë¤è¤ê¡¢ Èó¾ï¤Ëñ½ã¤Ê¾õÂÖ¶îÆ°¤Î¥Ñ¡¼¥µ¤ò¸ú²ÌŪ¤ËºîÀ®¤·¤¿¤³¤È¤Ë¤Ê¤ê¡¢ ÆüÉÕ¤ò¤½¤Î¹½À®Í×ÁǤˤ¦¤Þ¤¯Ê¬³ä¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹ ¡Ê¤³¤Î¥¹¥¥ã¥Ê¤ÎÆâÉô¤Çµ¯¤³¤Ã¤Æ¤¤¤ë¤³¤È¤ò¥Õ¥í¡¼¡¦¥Á¥ã¡¼¥È¤ËÉÁ¤¤¤Æ¤ß¤ì¤Ð¡¢ ¤³¤Î¤³¤È¤¬ÌÀÎÆ¤Ë¸«¤Æ¤È¤ì¤ë¤Ç¤·¤ç¤¦¡Ë¡£
¤³¤Î¥Þ¥Ë¥å¥¢¥ëÃæ¤Î¾¤Î¼ÂÎã¤ÈƱÍͤˡ¢ ¤³¤Î¼ÂÎã¤â
flex -i dates.lex cc -o dates lex.yy.c -lfl
¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ë¤è¤ê¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ ¤Þ¤¿¡¢ examples¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤ª¤¤¤ÆÃ±¤Ë‘make dates’¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢ ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³¤È¤â¤Ç¤¤Þ¤¹¡£
Previous: Start State Notes (Flex 2.5), Up: Start States [Contents][Index]