Next: Translation Tables, Previous: Interactive Scanners, Up: Other Flex Features [Contents][Index]
¥Æ¡¼¥Ö¥ë¤Î°µ½Ì¤È¥¹¥Ô¡¼¥É¤ÎÎΰè¤Ç¤Ï¡¢ Flex¤ÏLex¤ÎǽÎϤò¤Ï¤ë¤«¤Ë¾å²ó¤Ã¤Æ¤¤¤Þ¤¹¡£ Flex¤Ï¡¢ »È¤ï¤ì¤ë¥ª¥×¥·¥ç¥ó¤Ë±þ¤¸¤Æ¡¢ Lex¤è¤ê¤â¤Ï¤ë¤«¤Ë¹â®¤Ê¥Æ¡¼¥Ö¥ë¡¢ ¤¢¤ë¤¤¤Ï¡¢ ¤Ï¤ë¤«¤Ë¾®¤µ¤¤¥Æ¡¼¥Ö¥ë¤òÀ¸À®¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ ¤³¤ÎÀá¤Ç¤Ï¡¢ ÍøÍѲÄǽ¤Ê¥ª¥×¥·¥ç¥ó¤È³Æ¥ª¥×¥·¥ç¥ó¤¬¥¹¥Ô¡¼¥É¤Ë¤â¤¿¤é¤¹±Æ¶Á¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£ °ìÈÌŪ¤Ë¤Ï¡¢ ¥Æ¡¼¥Ö¥ë¤¬°µ½Ì¤µ¤ì¤ë¤Û¤É¡¢ ¤½¤Î¥¹¥Ô¡¼¥É¤ÏÃÙ¤¯¤Ê¤ê¤Þ¤¹¡£ Flex¤Ç¤Ï¡¢ ¤³¤¦¤·¤¿¥ª¥×¥·¥ç¥ó¤ò¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ç»ØÄꤷ¤Þ¤¹¡£ ¥ª¥×¥·¥ç¥ó¤Ï°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹¡£11
¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï¡¢
Flex¤¬¥Õ¥ë¡¦¥Æ¡¼¥Ö¥ë¡Êfull table¡Ë¤òÀ¸À®¤¹¤Ù¤¤Ç¤¢¤ë¤³¤È¤ò»ØÄꤷ¤Þ¤¹¡£
¤³¤Î¥Æ¡¼¥Ö¥ë¤Ï¤Þ¤Ã¤¿¤¯°µ½Ì¤µ¤ì¤º¡¢
¥µ¥¤¥º¤¬Â礤¯¤Ê¤ê¤Þ¤¹¤¬¡¢
¥¹¥Ô¡¼¥É¤Ï®¤¯¤Ê¤ê¤Þ¤¹¡£
¤³¤Î¥ª¥×¥·¥ç¥ó¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¤Ï¡¢
¥¢¥¯¥·¥ç¥ó¤ÎÉôʬ¤ËREJECT
¤ò»È¤¦¤³¤È¤Ï¤Ç¤¤Ê¤¤ÅÀ¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
Ãí¡§‘-f’¥Õ¥é¥°¤È‘-F’¥Õ¥é¥°¤Ï¡¢ Flex¤¬À¸À®¤¹¤ë¥Æ¡¼¥Ö¥ë¤Ë¤ª¤¤¤ÆÁê°ã¤ò¤â¤¿¤é¤·¤Þ¤¹¡£ ‘-f’¥Õ¥é¥°¤Ï¥Õ¥ë¡¦¥Æ¡¼¥Ö¥ë¡Êfull table¡Ë¤òÀ¸À®¤·¡¢ ‘-F’¥Õ¥é¥°¤Ï¥Õ¥¡¥¹¥È¡¦¥Æ¡¼¥Ö¥ë¡Êfast table¡Ë¤òÀ¸À®¤·¤Þ¤¹¡£ ¥Õ¥¡¥¹¥È¡¦¥Æ¡¼¥Ö¥ë¤È¤Ï¡¢ ¥¹¥Ô¡¼¥É¤òºÇÂç¸Â¤Ë¤¹¤ë¤è¤¦ºÇŬ²½¤µ¤ì¤¿¥Æ¡¼¥Ö¥ë·Á¼°¤Ç¤¢¤ê¡¢ °ìÊý¡¢ ¥Õ¥ë¡¦¥Æ¡¼¥Ö¥ë¤Ë¤ÏºÇŬ²½¤Ï°ìÀڻܤµ¤ì¤Þ¤»¤ó¡£ ¤â¤¿¤é¤µ¤ì¤ë·ë²Ì¤Ï¤è¤¯»÷¤Æ¤¤¤Þ¤¹¤¬¡¢ ¥Æ¡¼¥Ö¥ë¤Î¥µ¥¤¥º¤ÏÂ礤¯°Û¤Ê¤ë¤â¤Î¤Ë¤Ê¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï¥Õ¥¡¥¹¥È¡¦¥Æ¡¼¥Ö¥ë¡Êfast table¡Ë·Á¼°¤òÍѤ¤¤Æ¥Æ¡¼¥Ö¥ë¤òÀ¸À®¤¹¤ë¤è¤¦Flex¤ËÄÌÃΤ·¤Þ¤¹¡£ °ìÈÌŪ¤Ë¤Ï¡¢ ¤³¤Î¥Æ¡¼¥Ö¥ë¤Î¥¹¥Ô¡¼¥É¤ÏÀè¤ËÀâÌÀ¤·¤¿¥Õ¥ë¡¦¥Æ¡¼¥Ö¥ë¡Êfull table¡Ë¤È¤Û¤È¤ó¤ÉƱ¤¸¤Ç¤¹¤¬¡¢ »È¤ï¤ì¤ë¥Ñ¥¿¡¼¥ó¤Ë±þ¤¸¤Æ¡¢ ¤½¤Î¥µ¥¤¥º¤Ï¾®¤µ¤¯¤âÂ礤¯¤â¤Ê¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£ ¸¶Â§¤È¤·¤Æ¡¢ ¤¹¤Ù¤Æ¤Î¼±Ê̻Ҥò¥¥ã¥Ã¥Á¤¹¤ë¥ë¡¼¥ë¤Î¤Û¤«¤Ë¥¡¼¥ï¡¼¥É¤Î°ìÍ÷¤â»ý¤Ä¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ¤Ï¡¢ ‘-f’¥ª¥×¥·¥ç¥ó¤ò»È¤¦¤Ù¤¤Ç¤¹¡£ Î㤨¤Ð¡¢
ALPHA [a-zA-Z] NUM [0-9] ALPHANUM {ALPHA}|{NUM} %% begin return(BEGIN_SYM); … rules and actions … end return(END_SYM); {ALPHA}{ALPHANUM}* return(IDENTIFIER);
¤Ï‘-f’¥Õ¥é¥°¤ò»È¤Ã¤Æ½èÍý¤¹¤Ù¤¤Ç¤¢¤ê¡¢
{ALPHA}{ALPHANUM}* {ECHO; return(lookup(yytext));}
¤Ï‘-F’¥Õ¥é¥°¤ò»È¤Ã¤Æ½èÍý¤¹¤Ù¤¤Ç¤¹¡£
¤³¤ì¤é¤Î¥ª¥×¥·¥ç¥ó¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
¥¢¥¯¥·¥ç¥ó¤ÎÉôʬ¤ËREJECT
¤ò»È¤¦¤³¤È¤¬¤Ç¤¤Ê¤¤ÅÀ¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤Î¥ª¥×¥·¥ç¥ó¤ò»È¤¦¤È¡¢
Àǽ¤Ë¤Ï¤ï¤º¤«¤·¤«±Æ¶Á¤òµÚ¤Ü¤µ¤º¤Ë¡¢
¥Æ¡¼¥Ö¥ë¤Î¥µ¥¤¥º¤ò¤«¤Ê¤ê¾®¤µ¤¯¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
‘-Ce’¤¬»È¤ï¤ì¤ë¤È¡¢
Flex¤ÏƱÅù¥¯¥é¥¹¡Êequivalence classes¡Ë¤òºîÀ®¤·¤Þ¤¹¡£
ƱÅù¥¯¥é¥¹¤È¤Ï¡¢
Ʊ°ì¤ÎÊýË¡¤Ç»È¤ï¤ì¤ëʸ»ú¤Î¥°¥ë¡¼¥×¤Ç¤¹¡£
Î㤨¤Ð¡¢
»È¤ï¤ì¤ë¿ô»ú¤¬½¸¹ç[0-9]
¤ÎÈϰϤ˸ÂÄꤵ¤ì¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢
0¤«¤é9¤Þ¤Ç¤Î¿ô¤ÏƱÅù¥¯¥é¥¹¤ÎÃæ¤ËÃÖ¤«¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
ƱÅù¥¯¥é¥¹¤ò»ý¤Ä¥Õ¥¡¥¹¥È¡¦¥Æ¡¼¥Ö¥ë¤Ç¤¹¡£ ¤³¤Î¥ª¥×¥·¥ç¥ó¤Ë¤è¤Ã¤ÆÀ¸À®¤µ¤ì¤¿¥¹¥¥ã¥Ê¤â¤Þ¤¿¹â®¤Ç¤¢¤ê¡¢ ¤«¤Ä¡¢ ‘-Cf’¤¢¤ë¤¤¤Ï‘-CF’¤ò»ØÄꤷ¤ÆÀ¸À®¤µ¤ì¤¿¥¹¥¥ã¥Ê¤ÈÈæ³Ó¤·¤Æ¡¢ ¥µ¥¤¥º¤â¤Ï¤ë¤«¤Ë¾®¤µ¤¯¤Ê¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£ ¥µ¥¤¥º¡¢ ¤Þ¤¿¤Ï¥¹¥Ô¡¼¥É¤Î°ìÊý¤¬Â¾Êý¤ËÈæ¤Ù¤Æ¤Ï¤ë¤«¤Ë½ÅÍפǤ¢¤ë¤È¤¤¤¦¤³¤È¤¬¤Ê¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢ ¤³¤ì¤ÏÎɤ¤ÁȤ߹ç¤ï¤»¤Ç¤¹¡£
Flex¤ËÂФ·¤Æ¥á¥¿Æ±Åù¥¯¥é¥¹¡Êmeta-equivalence classes¡Ë¤ò»È¤¦¤è¤¦ÄÌÃΤ·¤Þ¤¹¡£ ¤³¤ì¤Ï¡¢ °ì½ï¤Ë»È¤ï¤ì¤ë¤³¤È¤¬Â¿¤¤Ê¸»ú¤Î½¸¹ç¡¢ ¤Þ¤¿¤Ï ¡ÊƱÅù¥¯¥é¥¹¤¬»È¤ï¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡Ë ƱÅù¥¯¥é¥¹¤Ç¤¹¡£ ƱÅù¥¯¥é¥¹¤ò»È¤¦¾ì¹ç¤è¤ê¤âÀǽ¤Ï¤µ¤é¤Ë°¤¯¤Ê¤ê¤Þ¤¹¤¬¡¢ ¤³¤ì¤Ï¿¤¯¤Î¾ì¹ç¡¢ ¥Æ¡¼¥Ö¥ë¡¦¥µ¥¤¥º¤ò¾®¤µ¤¯¤¹¤ë¤Î¤ËÈó¾ï¤Ë¸ú²ÌŪ¤ÊÊýË¡¤Ç¤¹¡£
¥Ç¥Õ¥©¥ë¥È¤Î¥Æ¡¼¥Ö¥ë°µ½Ì¤Ç¤¹¡£ ¤³¤Î¥ª¥×¥·¥ç¥ó¤ÇÀ¸À®¤µ¤ì¤ë¥¹¥¥ã¥Ê¤Ï¡¢ Flex¤¬À¸À®¤¹¤ë¥¹¥¥ã¥Ê¤ÎÃæ¤Ç»ö¼Â¾åºÇ¤â¾®¤µ¤¯¡¢ ¤«¤Ä¡¢ ºÇ¤âÀǽ¤ÎÎô¤ë¤â¤Î¤Ë¤Ê¤ê¤Þ¤¹¡£
‘-C’¥ª¥×¥·¥ç¥óñÂΤǤϡ¢ ƱÅù¥¯¥é¥¹¤ä¥á¥¿Æ±Åù¥¯¥é¥¹¤ò»È¤ï¤º¤Ë¥Æ¡¼¥Ö¥ë¤ò°µ½Ì¤¹¤ë¤è¤¦¡¢ Flex¤ËÂФ·¤ÆÄÌÃΤ·¤Þ¤¹¡£
Ãí¡§‘-Cxx’¥ª¥×¥·¥ç¥ó¤Ï¡¢ ¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Ë¤Ï£±¤Ä¤À¤±»ØÄꤹ¤Ù¤¤Ç¤¹¡£ ¤È¤¤¤¦¤Î¤Ï¡¢ ¤³¤Î¤¦¤ÁºÇ¸å¤Ë¸«¤Ä¤«¤Ã¤¿¥ª¥×¥·¥ç¥ó¤À¤±¤¬¼ÂºÝ¤Î¸ú²Ì¤ò»ý¤Ä¤«¤é¤Ç¤¹¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢
flex -Cf -Cem foo.l
¤Ï¡¢ Flex¤Ë‘-Cem’¥ª¥×¥·¥ç¥ó¤ò»È¤ï¤»¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
Flex¤Î¥Ç¥Õ¥©¥ë¥È¤Îưºî¤Ï¡¢ ¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Ç‘-Cem’¥ª¥×¥·¥ç¥ó¤ò»È¤Ã¤¿¾ì¹ç¤ËÁêÅö¤·¤Þ¤¹¡£ ¤³¤Îưºî¤Ç¤Ï°µ½Ì¤òºÇÂç¸Â¤Ë¹Ô¤¦¤³¤È¤Ë¤Ê¤ê¡¢ °ìÈÌŪ¤Ë¤ÏºÇ¤âÃÙ¤¤¥¹¥¥ã¥Ê¤¬À¸À®¤µ¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤³¤¦¤·¤¿¾®¤µ¤Ê¥Æ¡¼¥Ö¥ë¤Ï¤è¤ê®¤¯À¸À®¤µ¤ì¡¢ ¥³¥ó¥Ñ¥¤¥ë¤â¤è¤ê®¤¯¼Â¹Ô¤µ¤ì¤ë¤Î¤Ç¡¢ ¥Ç¥Õ¥©¥ë¥È¤Ï¡¢ ³«È¯Ãʳ¬¤Ç¤ÏÈó¾ï¤ËÊØÍø¤Ç¤¹¡£ ¥¹¥¥ã¥Ê¤Î¥Ç¥Ð¥Ã¥°¤¬½ªÎ»¤·¤¿¸å¤Ï¡¢ ¤è¤ê¹â®¤Ê ¡Ê¤½¤·¤ÆÄ̾ï¤Ï¤è¤ê¥µ¥¤¥º¤ÎÂ礤¤¡Ë ¥¹¥¥ã¥Ê¤òºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
ÌõÃí¡§Flex 2.5¤Ç¤Ï¡¢ ¤³¤³¤ËÎóµó¤µ¤ì¤Æ¤¤¤ë¤â¤Î°Ê³°¤Ë¡¢ ‘-Ca’¥ª¥×¥·¥ç¥ó¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£ ¤³¤ì¤Ë¤Ä¤¤¤Æ¤Ï¡¢ Command Line Switches (Flex 2.5)¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£