|
|||||||
|
|
FLEXSection: User Commands (1)Updated: April 1995 Index Return to Main Contents ̾¾Îflex - ¹â®¤Ê»ú¶ç²òÀϽèÍý·Ï¤ÎÀ¸À®¥Ä¡¼¥ë½ñ¼°flex [-bcdfhilnpstvwBFILTV78+? -C[aefFmr] -ooutput -Pprefix -Sskeleton] [--help --version] [filename ...]³µÀâËܥޥ˥奢¥ë¤Ï¡¢ ¥Æ¥¥¹¥È¤Î¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¥ó¥°¤ò¹Ô¤¦¥×¥í¥°¥é¥à¤òÀ¸À®¤¹¤ë¥Ä¡¼¥ë flex ¤ò°·¤¤¤Þ¤¹¡£ Ëܥޥ˥奢¥ë¤Ï¥Á¥å¡¼¥È¥ê¥¢¥ë¤È¥ê¥Õ¥¡¥ì¥ó¥¹Àá¤È¤ò´Þ¤ß¤Þ¤¹:
²òÀâ
¥Ä¡¼¥ë¤Îû¤¤³µÀâ
´Êñ¤ÊÎã
ÆþÎÏ¥Õ¥¡¥¤¥ë¤Î¥Õ¥©¡¼¥Þ¥Ã¥È
¥Ñ¥¿¡¼¥ó
flex ¤¬»ÈÍѤ¹¤ë³ÈÄ¥¤·¤¿Àµµ¬É½¸½
ÆþÎϤΥޥåÁÊýË¡
²¿¤¬¥Þ¥Ã¥Á¤¹¤ë¤«¤ò·èÄꤹ¤ëµ¬Â§
¥¢¥¯¥·¥ç¥ó
¥Ñ¥¿¡¼¥ó¤¬¥Þ¥Ã¥Á¤·¤¿»þ¤Ë²¿¤ò¹Ô¤¦¤«¤ò»ØÄꤹ¤ëÊýË¡
À¸À®¤µ¤ì¤¿¥¹¥¥ã¥Ê
flex ¤¬À¸À®¤¹¤ë¥¹¥¥ã¥Ê¤Ë´Ø¤¹¤ë¾ÜºÙ;
ÆþÎϸµ¤ÎÀ©¸æÊýË¡
³«»Ï¾ò·ï
¥¹¥¥ã¥Ê¤Ø¤Îʸ̮¤ÎƳÆþ¤È¡¢
"¥ß¥Ë¥¹¥¥ã¥Ê" ¤ÎÀ©¸æÊýË¡
Ê£¿ô¤ÎÆþÎϥХåե¡
Ê£¿ô¤ÎÆþÎϸµ¤ò°·¤¦ÊýË¡;
¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¯Ê¸»úÎ󤫤饹¥¥ã¥ó¤¹¤ëÊýË¡
¥Õ¥¡¥¤¥ë¤Î½ª¤ê¤Î¥ë¡¼¥ë
¥Õ¥¡¥¤¥ë¤Î½ª¤ê¤Ë¥Þ¥Ã¥Á¤¹¤ëÆÃÊ̤ʥ롼¥ë
»¨Â¿¤Ê¥Þ¥¯¥í
¥¢¥¯¥·¥ç¥ó¤Ç»ÈÍѲÄǽ¤Ê¥Þ¥¯¥í¤Î¤Þ¤È¤á
¥æ¡¼¥¶¤¬»ÈÍѲÄǽ¤ÊÃÍ
¥¢¥¯¥·¥ç¥ó¤Ç»ÈÍѲÄǽ¤ÊÃͤΤޤȤá
Yacc ¤È¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹
lex ¥¹¥¥ã¥Ê¤È yacc ¥Ñ¡¼¥µ¤È¤Î·ë¹ç
¥ª¥×¥·¥ç¥ó
flex ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤È¡¢
"%option" ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
Àǽ´ØÏ¢
¥¹¥¥ã¥Ê¤ò²Äǽ¤Ê¸Â¤ê¹â®¤Ë¤¹¤ëÊýË¡
C++ ¥¹¥¥ã¥Ê¤ÎÀ¸À®
C++ ¥¹¥¥ã¥Ê¥¯¥é¥¹À¸À®¤Î¤¿¤á¤Î
(¼Â¸³Åª¤Ê) µ¡Ç½
Lex ¤ª¤è¤Ó POSIX ¤È¤ÎÈó¸ß´¹À
AT&T lex ¤ª¤è¤Ó POSIX lex ɸ½à¤È
flex ¤È¤Î°ã¤¤
¿ÇÃÇ
flex (¤â¤·¤¯¤ÏÀ¸À®¤·¤¿¥¹¥¥ã¥Ê) ¤¬½ÐÎϤ¹¤ë
¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ç°ÕÌ£¤¬ÌÀ³Î¤Ç¤Ê¤¤¤â¤Î
´ØÏ¢¥Õ¥¡¥¤¥ë
flex ¤¬»ÈÍѤ¹¤ë¥Õ¥¡¥¤¥ë
·ç´Ù / ¥Ð¥°
flex ¤Î´ûÃΤÎÌäÂê
´ØÏ¢¹àÌÜ
¥Ä¡¼¥ë¤Ë´Ø·¸¤¹¤ë¾¤Î¥É¥¥å¥á¥ó¥È
ºî¼Ô
Ï¢ÍíÊýË¡¤ò´Þ¤ß¤Þ¤¹
²òÀâflex ¤Ï ¥¹¥¥ã¥Ê ¤òÀ¸À®¤¹¤ë¤¿¤á¤Î¥Ä¡¼¥ë¤Ç¤¹¡£ ¤³¤³¤Ç¡¢¥¹¥¥ã¥Ê¤È¤Ï¡¢ ¥Æ¥¥¹¥ÈÆâ¤Î»ú¶ç¥Ñ¥¿¡¼¥ó¤ò²òÀϤ¹¤ë¥×¥í¥°¥é¥à¤Ç¤¹¡£ flex ¤Ï»ØÄꤷ¤¿¥Õ¥¡¥¤¥ë¡¢¤â¤·¤¯¤Ï¥Õ¥¡¥¤¥ë̾¤¬Í¿¤¨¤é¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï ɸ½àÆþÎϤ«¤é¡¢À¸À®¤¹¤ë¥¹¥¥ã¥Ê¤Îµ½Ò¤òÆÉ¤ß¹þ¤ß¤Þ¤¹¡£ ¤³¤Îµ½Ò¤Ï¡¢ Àµµ¬É½¸½¤È C ¥³¡¼¥É¤Î¥Ú¥¢¤Î·Á¤ò¤È¤Ã¤Æ¤¤¤Þ¤¹¡£ ¤³¤ì¤Ï ¥ë¡¼¥ë ¤È¸Æ¤Ð¤ì¤Þ¤¹¡£ flex ¤Ï¡¢½ÐÎϤȤ·¤Æ C ¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Î lex.yy.c ¤òÀ¸À®¤·¤Þ¤¹¤¬¡¢¤½¤ÎÃæ¤Ë yylex() ¥ë¡¼¥Á¥ó¤¬ÄêµÁ¤µ¤ì¤Þ¤¹¡£ ¤³¤Î¥Õ¥¡¥¤¥ë¤Ï¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¡¢ -ll ¥é¥¤¥Ö¥é¥ê¤È¤È¤â¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¡¢ ¼Â¹Ô·Á¼°¤È¤Ê¤ê¤Þ¤¹¡£ ¼Â¹Ô·Á¼°¤¬Áö¤ê»Ï¤á¤ë¤È¡¢ Àµµ¬É½¸½¤ò¥Þ¥Ã¥Á¤µ¤»¤ë¤¿¤á¤Ë ÆþÎϤ¬²òÀϤµ¤ì¤Þ¤¹¡£ ¥Þ¥Ã¥Á¤¹¤ë¤â¤Î¤ò¸«¤Ä¤±¤ë¤È¡¢Âбþ¤¹¤ë C ¥³¡¼¥É¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£´Êñ¤ÊÎã¤Þ¤º´Êñ¤ÊÎ㤫¤é¡¢ flex ¤Î»È¤¤Êý¤ò¸«¤Æ¹Ô¤¤Þ¤·¤ç¤¦¡£ ¼¡¤Î flex ¤ÎÆþÎϤϡ¢"username" ¤È¤¤¤¦Ê¸»úÎó¤Ë½Ð²ñ¤¦¤È¥æ¡¼¥¶¤Î¥í¥°¥¤¥ó̾¤ËÃÖ¤´¹¤¨¤ë ¥¹¥¥ã¥Ê¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹:
%%
username printf( "%s", getlogin() );
¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢
flex
¥¹¥¥ã¥Ê¤Ë¥Þ¥Ã¥Á¤·¤Ê¤«¤Ã¤¿¥Æ¥¥¹¥È¤Ï½ÐÎϤ˥³¥Ô¡¼¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢
"username" ¤òŸ³«¤·¤Ê¤¬¤éÆþÎϤò½ÐÎϤ˥³¥Ô¡¼¤¹¤ë¤³¤È¤¬
¤³¤Î¥¹¥¥ã¥Ê¤ÎºÇ½ªÅª¤Ê·ë²Ì¤È¤Ê¤ê¤Þ¤¹¡£
¤³¤ÎÆþÎϤˤϤ¿¤À°ì¤Ä¤Î¥ë¡¼¥ë¤À¤±¤¬¤¢¤ê¤Þ¤¹¡£
"username" ¤Ï
¥Ñ¥¿¡¼¥ó
¤Ç¤¢¤ê¡¢"printf" ¤Ï
¥¢¥¯¥·¥ç¥ó
¤Ç¤¹¡£
"%%" ¤Ï¥ë¡¼¥ë¤Î»Ï¤Þ¤ê¤Î°õ¤Ç¤¹¡£
Ê̤ÎÎã¤ò¸«¤Æ¸«¤Þ¤·¤ç¤¦:
%{
int num_lines = 0, num_chars = 0;
%}
%%
\n ++num_lines; ++num_chars;
. ++num_chars;
%%
main()
{
yylex();
printf( "# of lines = %d, # of chars = %d\n",
num_lines, num_chars );
}
¤³¤Î¥¹¥¥ã¥Ê¤ÏÆþÎϤÎʸ»ú¿ô¤ª¤è¤Ó¹Ô¿ô¤ò¿ô¤¨¤Þ¤¹
(¿ô¤¨¤¿ºÇ½ª·ë²Ì¤òÊó¹ð¤¹¤ë¤À¤±¤Ç¤¹)¡£
ºÇ½é¤Î¹Ô¤Ï 2 ¤Ä¤ÎÂç°èÊÑ¿ô "num_lines" ¤È "num_chars" ¤òÀë¸À¤·¤Þ¤¹¡£
¤³¤ì¤é¤ÎÊÑ¿ô¤Ï¡¢2 ÈÖÌܤΠ"%%" ¤Î¸å¤ËÀë¸À¤µ¤ì¤Æ¤¤¤ë
yylex()
¤È
main()
¤Î¥ë¡¼¥Á¥ó¤«¤é¥¢¥¯¥»¥¹²Äǽ¤Ç¤¹¡£
¤³¤³¤Ë¤Ï 2 ¤Ä¤Î¥ë¡¼¥ë¤¬¤¢¤ê¤Þ¤¹¡£
1 ¤ÄÌܤϲþ¹Ôʸ»ú ("\n") ¤Ë¥Þ¥Ã¥Á¤·¡¢¹Ô¿ô¤Èʸ»ú¿ô¤Î¥«¥¦¥ó¥È¤òÁý²Ã¤µ¤»¤Þ¤¹¡£
¤â¤¦ 1 ¤Ä¤Ï¡¢²þ¹Ôʸ»ú°Ê³°¤ÎÁ´¤Æ¤Îʸ»ú
("." ¤È¤¤¤¦Àµµ¬É½¸½¤Çɽ¤µ¤ì¤Æ¤¤¤Þ¤¹)¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
¼¡¤Ï¤â¤¦¤Á¤ç¤Ã¤ÈÊ£»¨¤ÊÎã¤Ç¤¹:
/* scanner for a toy Pascal-like language */
%{
/* need this for the call to atof() below */
#include <math.h>
%}
DIGIT [0-9]
ID [a-z][a-z0-9]*
%%
{DIGIT}+ {
printf( "An integer: %s (%d)\n", yytext,
atoi( yytext ) );
}
{DIGIT}+"."{DIGIT}* {
printf( "A float: %s (%g)\n", yytext,
atof( yytext ) );
}
if|then|begin|end|procedure|function {
printf( "A keyword: %s\n", yytext );
}
{ID} printf( "An identifier: %s\n", yytext );
"+"|"-"|"*"|"/" printf( "An operator: %s\n", yytext );
"{"[^}\n]*"}" /* eat up one-line comments */
[ \t\n]+ /* eat up whitespace */
. printf( "Unrecognized character: %s\n", yytext );
%%
main( argc, argv )
int argc;
char **argv;
{
++argv, --argc; /* skip over program name */
if ( argc > 0 )
yyin = fopen( argv[0], "r" );
else
yyin = stdin;
yylex();
}
¤³¤ì¤Ï Pascal ¤Î¤è¤¦¤Ê¸À¸ì¤Îñ½ã¤Ê¥¹¥¥ã¥Ê¤Î¸¶·¿¤Ç¤¹¡£
°Û¤Ê¤Ã¤¿¥¿¥¤¥×¤Î
¥È¡¼¥¯¥ó
¤òÄêµÁ¤·¡¢¤³¤ì¤ò¸«ÉÕ¤±¤ë¤ÈÊó¹ð¤·¤Þ¤¹¡£
¤³¤ÎÎã¤Î¾ÜºÙ¤Ï¡¢°Ê¹ß¤ÎÀá¤ÇÀâÌÀ¤·¤Þ¤¹¡£ ÆþÎÏ¥Õ¥¡¥¤¥ë¤Î¥Õ¥©¡¼¥Þ¥Ã¥Èflex ¤ÎÆþÎÏ¥Õ¥¡¥¤¥ë¤Ï 3 ¤Ä¤ÎÉôʬ¤«¤é¤Ê¤ê¡¢ %% ¤À¤±¤«¤é¤Ê¤ë¹Ô¤Ë¤è¤êʬ¤±¤é¤ì¤Þ¤¹:
ÄêµÁ
%%
¥ë¡¼¥ë
%%
¥æ¡¼¥¶¥³¡¼¥É
ÄêµÁ
Éôʬ¤Ï¡¢¥¹¥¥ã¥Ê¤ÎÀë¸À¤òñ½ã²½¤¹¤ëñ½ã¤Ê
̾Á°
¤ÎÄêµÁ¤ÎÀë¸À¤È¡¢¸å¤ÇÀâÌÀ¤¹¤ë
³«»Ï¾ò·ï
¤ÎÀë¸À¤È¤«¤é¤Ê¤ê¤Þ¤¹¡£
̾Á°¤ÎÄêµÁ¤Ï¼¡¤Î·Á¼°¤Ç¤¹:
̾Á° ÄêµÁ
"̾Á°" ¤Ï¸ì¤Ç¤¢¤ê¡¢
¥ì¥¿¡¼¤«¥¢¥ó¥À¡¼¥¹¥³¥¢ ('_') ¤«¤é»Ï¤Þ¤Ã¤Æ 0 ¸Ä°Ê¾å¤Î¥ì¥¿¡¼¡¦¿ô»ú¡¦'_'¡¦'-'
(¥À¥Ã¥·¥å)¤¬Â³¤¤Þ¤¹¡£
ÄêµÁ¤Ï¡¢Ì¾Á°¤Ë³¤¯ºÇ½é¤ÎÈó¶õÇòʸ»ú¤«¤é»Ï¤Þ¤ê¡¢¹ÔËö¤Þ¤Ç³¤¯¤â¤Î¤È¤µ¤ì¤Þ¤¹¡£
ÄêµÁ¤Ï¸å¤Ç "{̾Á°}" ¤Ç»²¾È¤Ç¤¡¢"(ÄêµÁ)" ¤òŸ³«¤·¤Þ¤¹¡£
Î㤨¤Ð¡¢
DIGIT [0-9]
ID [a-z][a-z0-9]*
¤Ï¡¢
"DIGIT" ¤¬Ã±°ì¤Î¿ô»ú¤Ë¥Þ¥Ã¥Á¤¹¤ëÀµµ¬É½¸½¤Ç¤¢¤ë¤ÈÄêµÁ¤·¡¢
"ID" ¤¬¥ì¥¿¡¼¤Ë 0 ¸Ä°Ê¾å¤Î¥ì¥¿¡¼¤«¿ô»ú¤¬Â³¤¯Àµµ¬É½¸½¤Ç¤¢¤ë¤ÈÄêµÁ¤·¤Þ¤¹¡£
¸å¤Ç½Ð¤ÆÍè¤ë»²¾È
{DIGIT}+"."{DIGIT}*
¤Ï
([0-9])+"."([0-9])*
¤ÈƱ¤¸¤Ç¤¢¤ê¡¢1 ¸Ä°Ê¾å¤Î¿ô»ú¤Ë '.' ¤¬Â³¤¡¢
0 ¸Ä°Ê¾å¤Î¿ô»ú¤¬Â³¤¯¤â¤Î¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
flex ¤ÎÆþÎϤΠ¥ë¡¼¥ë ¤Ï¼¡¤Î·Á¼°¤Î°ìÏ¢¤Î¥ë¡¼¥ë¤«¤é¤Ê¤ê¤Þ¤¹:
¥Ñ¥¿¡¼¥ó ¥¢¥¯¥·¥ç¥ó
¤³¤³¤Ç¡¢¥Ñ¥¿¡¼¥ó¤Ï¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤Æ¤¤¤Æ¤Ï¤Ê¤é¤º¡¢
¥¢¥¯¥·¥ç¥ó¤ÏƱ¤¸¹Ô¤«¤é»Ï¤Þ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¥Ñ¥¿¡¼¥ó¤È¥¢¥¯¥·¥ç¥ó¤Î¾ÜºÙ¤Ï¸å¤Î²òÀâ¤ò¸«¤Æ²¼¤µ¤¤¡£ ºÇ¸å¤Ë¡¢¥æ¡¼¥¶¥³¡¼¥É¤ÎÉôʬ¤Ïñ½ã¤Ë¤½¤Î¤Þ¤Þ¤Î·Á¤Ç lex.yy.c ¤Ë¥³¥Ô¡¼¤µ¤ì¤Þ¤¹¡£ ¥¹¥¥ã¥Ê¤ò¸Æ¤Ó½Ð¤¹¤Þ¤¿¤Ï¸Æ¤Ó½Ð¤µ¤ì¤ëÉÕ¿ï¥ë¡¼¥Á¥ó¤Î¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£ ¤³¤ÎÉôʬ¤Ï¤¢¤Ã¤Æ¤â̵¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó; ̵¤¤¾ì¹ç¤Ë¤Ï¡¢ÆþÎÏ¥Õ¥¡¥¤¥ëÃæ¤Î 2 ÈÖÌܤΠ%% ¤â¾Êά¤Ç¤¤Þ¤¹¡£ ÄêµÁ¤È¥ë¡¼¥ë¤ÎÉôʬ¤Ç¤Ï¡¢ ¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿ ¥Æ¥¥¹¥È¤È %{ ¤È %} ¤È¤Î´Ö¤Î¥Æ¥¥¹¥È¤Ï¤½¤Î¤Þ¤Þ¤Î·Á¤Ç½ÐÎϤ˥³¥Ô¡¼¤µ¤ì¤Þ¤¹ (¤³¤ÎºÝ %{} ¤Ïºï½ü¤µ¤ì¤Þ¤¹)¡£ %{} ¤Ï¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¹Ô¤Ë¸½¤ì¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¥ë¡¼¥ë¤ÎÉôʬ¤Ç¤Ï¡¢ ºÇ½é¤Î¥ë¡¼¥ë¤ÎÁ°¤Ë¸½¤ì¤ë¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿¤â¤·¤¯¤Ï %{} Éôʬ¤Î¥Æ¥¥¹¥È¤Ï¡¢ ¥¹¥¥ã¥ó¥ë¡¼¥Á¥ó¤Ë¥í¡¼¥«¥ë¤ÊÊÑ¿ô¤È¡¢ (Àë¸À¤Î¸å¤Ç¤Ï)¥¹¥¥ã¥ó¥ë¡¼¥Á¥ó¤ËÆþ¤ë¤¿¤Ó¤Ë¼Â¹Ô¤µ¤ì¤ë¥³¡¼¥É¤È¤òÀë¸À¤·¤Þ¤¹¡£ ¥ë¡¼¥ëÉôʬ¤Î¾¤Î¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿¤â¤·¤¯¤Ï %{} Éôʬ¤Î¥Æ¥¥¹¥È¤Ï ½ÐÎϤ˥³¥Ô¡¼¤µ¤ì¤Þ¤¹¤¬¡¢ °ÕÌ£¤Ï¤Á¤ã¤ó¤ÈÄêµÁ¤µ¤ì¤Æ¤ª¤é¤º¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥¨¥é¡¼¤È¤Ê¤ë¤«¤âÃΤì¤Þ¤»¤ó (¤³¤Î»ÅÍÍ¤Ï POSIX ¸ß´¹¤Î¤¿¤á¤Ë¤¢¤ê¤Þ¤¹; ¾¤Î¤³¤Î¤è¤¦¤Ê»ÅÍͤϰʹߤò¸«¤Æ²¼¤µ¤¤)¡£ ÄêµÁ¤ÎÉôʬ(¥ë¡¼¥ë¤ÎÉôʬ¤Ç¤Ï¤Ê¤¤¤Ç¤¹)¤Ç¤Ï¡¢ ¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥³¥á¥ó¥È("/*" ¤«¤é»Ï¤Þ¤ë¹Ô) ¤Ï¼¡¤Î "*/" ¤Þ¤Ç ¤½¤Î¤Þ¤Þ¤Î·Á¤Ç¥³¥Ô¡¼¤µ¤ì¤Þ¤¹¡£ ¥Ñ¥¿¡¼¥óÆþÎÏ¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¿¡¼¥ó¤Ï³ÈÄ¥¤·¤¿Àµµ¬É½¸½¤ò»È¤Ã¤Æµ½Ò¤·¤Þ¤¹¡£ °Ê²¼¤Ë¼¨¤·¤Þ¤¹:
x ʸ»ú 'x' ¤Ë¥Þ¥Ã¥Á¡£
. ²þ¹Ô¤ò½ü¤¯Á´¤Æ¤Îʸ»ú(¥Ð¥¤¥È)¡£
[xyz] "ʸ»ú¥¯¥é¥¹"; ¤³¤Î¾ì¹ç¡¢'x', 'y', 'z' ¤Î¤¤¤º¤ì¤Ë¤â
¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
[abj-oZ] ÈϰϻØÄê¤ò´Þ¤à "ʸ»ú¥¯¥é¥¹"; ¤³¤Î¾ì¹ç¡¢'a', 'b' ¤È
'j' ¤«¤é 'o' ¤Þ¤Ç¤ÎǤ°Õ¤Î¥ì¥¿¡¼¤È 'Z' ¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
[^A-Z] "ÈÝÄêʸ»ú¥¯¥é¥¹"; ¥¯¥é¥¹¤Ë´Þ¤Þ¤ì¤Ê¤¤Ç¤°Õ¤Îʸ»ú¤Ë
¥Þ¥Ã¥Á¤·¤Þ¤¹¡£ ¤³¤Î¾ì¹ç¡¢'A' ¤«¤é 'Z' ¤Þ¤Ç¤ÎÂçʸ»ú
¡Ö°Ê³°¤Î¡×ʸ»ú¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
[^A-Z\n] Âçʸ»ú¤È²þ¹Ô¤ò¡Ö½ü¤¯¡×Á´¤Æ¤Îʸ»ú¡£
r* 0 ¤â¤·¤¯¤Ï¤½¤ì°Ê¾å¤Î r¡£r ¤ÏǤ°Õ¤ÎÀµµ¬É½¸½¡£
r+ 1 ¤â¤·¤¯¤Ï¤½¤ì°Ê¾å¤Î r¡£
r? 0 ¤â¤·¤¯¤Ï 1¤Ä¤Î r (¡Ö¤ª¤Þ¤±¡×¤Î r)
r{2,5} 2 ¤Ä¤«¤é 5¤Ä¤Þ¤Ç¤Î r¡£
r{2,} 2 ¤Ä°Ê¾å¤Î r¡£
r{4} ¤Á¤ç¤¦¤É 4¤Ä ¤Î r¡£
{̾Á°} "̾Á°" ¤ÎÄêµÁ¤ÎŸ³«¡£
(¾å¤ò»²¾È)
"[xyz]\"foo"
ʸ»úÎó [xyz]"foo
\X X ¤¬ 'a', 'b', 'f', 'n', 'r', 't', 'v' ¤Î¤¤¤º¤ì¤«¤Î
¤È¤¡¢ANSI-C ¤Ç¤Î \X ¤Î²ò¼á¤È¤Ê¤ê¤Þ¤¹¡£
¤½¤ì°Ê³°¤Î¾ì¹ç¡¢Ê¸»ú 'X' ('*' ¤Î¤è¤¦¤Ê¥ª¥Ú¥ì¡¼¥¿¤Î
°ÕÌ£¤òÂǤÁ¾Ã¤·¡¢¤½¤Îʸ»ú¼«ÂΤò»ØÄꤹ¤ëºÝ¤Ë»È¤¤¤Þ¤¹)¡£
\123 8¿Ê¿ô¤Ç 123 ¤Èɽ¤µ¤ì¤ëʸ»ú¡£
\x2a 16¿Ê¿ô¤Ç 2a ¤Èɽ¤µ¤ì¤ëʸ»ú¡£
(r) r ¤Ë¥Þ¥Ã¥Á; ()¤Ï Í¥Àè½ç°Ì¤òÊѤ¨¤ë¤¿¤á¤Ë»ÈÍÑ¡£
(°Ê²¼¤ò»²¾È)
rs Àµµ¬É½¸½ r ¤ËÀµµ¬É½¸½ s ¤¬Â³¤¯; ¡ÖÏ¢·ë(concatenation)¡×
¤È¸Æ¤Ó¤Þ¤¹¡£
r|s r ¤â¤·¤¯¤Ï s¡£
r/s ¸å¤í¤Ë s ¤¬Â³¤¯»þ¤Î r¡£
s ¤Ë¥Þ¥Ã¥Á¤¹¤ë¥Æ¥¥¹¥È¤Ï¤³¤Î¥ë¡¼¥ë¤Î "ºÇĹŬ¹ç" ¤òȽÄꤹ¤ë
»þ¤Ë¤Ï´Þ¤Þ¤ì¤Þ¤¹¤¬¡¢¥¢¥¯¥·¥ç¥ó¤¬¼Â¹Ô¤µ¤ì¤ëÁ°¤Ë
ÆþÎϤËÌᤵ¤ì¤Þ¤¹¡£
¥¢¥¯¥·¥ç¥ó¤Ï r ¤Ë¥Þ¥Ã¥Á¤¹¤ë¥Æ¥¥¹¥È¤À¤±¤ò¸«¤Þ¤¹¡£
¤³¤Î¥Ñ¥¿¡¼¥ó¤Ï "±¦Ê¸Ì®(trailing context)" ¤È¸Æ¤Ð¤ì¤Þ¤¹¡£
(flex ¤¬Àµ³Î¤Ë¥Þ¥Ã¥ÁÉÔǽ¤Ê r/s ¤ÎÁȹ礻¤ÏÊ£¿ô¤¢¤ê¤Þ¤¹;
"´í¸±¤Ê±¦Ê¸Ì®" ¤Ë¤Ä¤¤¤Æ¤Ï¡¢
°Ê¹ß¤Î¡¢·ç´Ù / ¥Ð¥° ¤ÎÀá¤Îµ½Ò¤ò¸«¤Æ²¼¤µ¤¤¡£)
^r ¹ÔƬ¤Ë¤¢¤ë r¡£(¥¹¥¥ã¥ó¤Î»Ï¤Þ¤ê¤â¤·¤¯¤Ï
¥¹¥¥ã¥ó¤µ¤ì¤¿²þ¹Ô¤Î±¦¤Ç¤¹)¡£
r$ ¹ÔËö¤Ë¤¢¤ë r¡£"r/\n" ¤ÈÅù²Á(²þ¹Ô¤ÎÁ°¤Ç¤¹)¡£
"r/\n" ¤ÈƱ¤¸¤Ç¤¹¡£
flex ¤Î "²þ¹Ô" ¤Îɽ¸½¤Ï flex ¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿
C ¥³¥ó¥Ñ¥¤¥é¤¬²ò¼á¤¹¤ë '\n' ¤È´°Á´¤Ë°ìÃפ¹¤ë¤³¤È¤Ë
Ãí°Õ¤·¤Æ²¼¤µ¤¤;
ÆÃÄê¤Î¥·¥¹¥Æ¥à DOS ¤Ç¤Ï \r ¤òÆþÎϤ«¤é¼è¤ê½ü¤¯¤«
"r$" ¤òɽ¤¹¤¿¤á¤ËÌÀ¼¨Åª¤Ë r/\r\n ¤ò»ÈÍѤ¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
<s>r ³«»Ï¾ò·ï s ¤Ë¤ª¤±¤ë r¡£(³«»Ï¾ò·ï¤Ë¤Ä¤¤¤Æ¤Ï°Ê²¼¤ò
»²¾È)¡£
<s1,s2,s3>r
¾å¤ËƱ¤¸¡£¤¿¤À¤·³«»Ï¾ò·ï¤Ï s1, s2, s3 ¤Î¤¤¤º¤ì¤Ç¤â¤è¤¤¡£
<*>r Ǥ°Õ¤Î³«»Ï¾ò·ï¤Î r¡£³«»Ï¾ò·ï¤ÏÇÓ¾Ū¤Ê¤â¤Î¤Ç¤â¤è¤¤¡£
<<EOF>> ¥Õ¥¡¥¤¥ë¤Î½ªÎ»¡£
<s1,s2><<EOF>>
³«»Ï¾ò·ï¤¬ s1 ¤â¤·¤¯¤Ï s2 ¤Ç¤¢¤ë¤È¤¤Î¥Õ¥¡¥¤¥ë¤Î½ªÎ»¡£
ʸ»ú¥¯¥é¥¹Ãæ¤Ç¤Ï¡¢Á´¤Æ¤ÎÀµµ¬É½¸½¤Î¥ª¥Ú¥ì¡¼¥¿¤Ï¡¢
¥¨¥¹¥±¡¼¥× ('\') ¤ª¤è¤Ó
ʸ»ú¥¯¥é¥¹¥ª¥Ú¥ì¡¼¥¿¤Ç¤¢¤ë '-' ¤È ']' ¤È¥¯¥é¥¹¤ÎÀèÆ¬¤Î '^' ¤ò½ü¤
ÆÃÊ̤ʰÕÌ£¤ò¼º¤¦¤³¤È¤ËÃí°Õ¤·¤Æ²¼¤µ¤¤¡£
¾å¤Ëµó¤²¤¿Àµµ¬É½¸½¤ÏÍ¥Àè½ç°Ì¤Ë¤è¤Ã¤Æ¥°¥ë¡¼¥×¤Ëʬ¤±¤é¤ì¤Æ¤¤¤Þ¤¹¡£ °ìÈÖ¾å¤Î¥°¥ë¡¼¥×¤¬ºÇ¤â¹â¤¤Í¥ÀèÅ٤ǡ¢ °ìÈÖ²¼¤Î¥°¥ë¡¼¥×¤ÎÍ¥Àè½ç°Ì¤¬ºÇ¤âÄ㤯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ ¥°¥ë¡¼¥×Æâ¤Ç¤ÏƱ¤¸Í¥Àè½ç°Ì¤Ç¤¹¡£Î㤨¤Ð¡¢
foo|bar*
¤Ï
(foo)|(ba(r*))
¤ÈƱ¤¸¤Ç¤¹¡£¤Ê¤¼¤Ê¤é '*' ¥ª¥Ú¥ì¡¼¥¿¤ÏÏ¢·ë¤è¤êÍ¥ÀèÅÙ¤¬¹â¤¯¡¢
Ï¢·ë¤ÏÁª¸À ('|') ¤è¤êÍ¥ÀèÅÙ¤¬¹â¤¤¤«¤é¤Ç¤¹¡£¤³¤Î¥Ñ¥¿¡¼¥ó¤Ï
ʸ»úÎó "foo"
¤â¤·¤¯¤Ï
ʸ»úÎó "ba" ¤Ë 0 ¸Ä°Ê¾å¤Î r ¤¬¤Ä¤Å¤¯¤â¤Î¤Î
¤É¤Á¤é¤Ë¤â
¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
"foo" ¤â¤·¤¯¤Ï 0 ¸Ä°Ê¾å¤Î "bar" ¤Ë¥Þ¥Ã¥Á¤µ¤»¤ë¤¿¤á¤Ë¤Ï¼¡¤Îɽ¸½¤ò»ÈÍѤ·¤Æ²¼¤µ¤¤:
foo|(bar)*
0 ¸Ä°Ê¾å¤Î "foo" ¤Þ¤¿¤Ï "bar" ¤Ë¥Þ¥Ã¥Á¤¹¤ë¤¿¤á¤Ë¤Ï¼¡¤Îɽ¸½¤ò»ÈÍѤ·¤Æ²¼¤µ¤¤:
(foo|bar)*
ʸ»ú¤â¤·¤¯¤Ïʸ»úÈϰϤ˲䨡¢Ê¸»ú¥¯¥é¥¹¤âʸ»ú¥¯¥é¥¹¤Î ɽ¸½ ¤ò´Þ¤ß¤Þ¤¹¡£ ¤³¤ì¤é¤Îɽ¸½¤Ï [: ¤ª¤è¤Ó :] ¤Î¥Ç¥ê¥ß¥¿¤Ë°Ï¤Þ¤ì¤Þ¤¹ (ʸ»ú¥¯¥é¥¹¤Î '[' ¤È ']' ¤È¤Î´Ö¤Ë¸½¤ì¤ëɬÍפ¬¤¢¤ê¤Þ¤¹; ¾¤ÎÍ×ÁǤ¬Ê¸»ú¥¯¥é¥¹Ãæ¤Ë¸½¤ì¤Æ¤â¹½¤¤¤Þ¤»¤ó)¡£ ͸ú¤Êɽ¸½¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹:
[:alnum:] [:alpha:] [:blank:]
[:cntrl:] [:digit:] [:graph:]
[:lower:] [:print:] [:punct:]
[:space:] [:upper:] [:xdigit:]
¤³¤ì¤é¤Îɽ¸½¤ÏÂбþ¤¹¤ëɸ½à C ¤Î
isXXX
´Ø¿ô¤ËŬ¹ç¤¹¤ëÁ´¤Æ¤Îʸ»ú½¸¹ç¤ò»Ø¼¨¤·¤Þ¤¹¡£Î㤨¤Ð¡¢
[:alnum:]
¤Ï
isalnum()
¤¬¿¿¤òÊÖ¤¹Ê¸»ú¤ò»Ø¼¨¤·¤Þ¤¹ - ¤¹¤Ê¤ï¤Á¤¹¤Ù¤Æ¤Î¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È¤È¿ô»ú¤Ç¤¹¡£
isblank(),
¤¬Ìµ¤¤¥·¥¹¥Æ¥à¤Ç¤Ï¡¢flex ¤Ï
[:blank:]
¤ò¶õÇò¤È¥¿¥Ö¤ÈÄêµÁ¤·¤Þ¤¹¡£
Î㤨¤Ð°Ê²¼¤Îɽ¸½¤ÏÁ´¤ÆÆ±¤¸¤Ç¤¹:
[[:alnum:]]
[[:alpha:][:digit:]]
[[:alpha:]0-9]
[a-zA-Z0-9]
¥¹¥¥ã¥Ê¤¬Âçʸ»ú¾®Ê¸»ú¤ò°Õ¼±¤·¤Ê¤¤¾ì¹ç(
-i
¥Õ¥é¥°»ØÄê»þ)
[:upper:]
¤È
[:lower:]
¤Ï
[:alpha:]
¤ÈƱ¤¸¤Ç¤¹¡£
¥Ñ¥¿¡¼¥ó¤Ë´Ø¤¹¤ëÃí°ÕÅÀ¤Ç¤¹:
ÆþÎϤΥޥåÁÊýË¡À¸À®¤·¤¿¥¹¥¥ã¥Ê¤ò¼Â¹Ô¤¹¤ë¤È¡¢ ¥¹¥¥ã¥Ê¤ÏÆþÎϤò¸«¤Æ¥Ñ¥¿¡¼¥ó¤Ë¥Þ¥Ã¥Á¤¹¤ëʸ»úÎó¤òõ¤·¤Þ¤¹¡£ 1 ¤è¤ê¿¤¯¤Î¥Þ¥Ã¥Á¤ò¸«ÉÕ¤±¤ë¤È¡¢ºÇĹ¥Æ¥¥¹¥È¤Î¥Þ¥Ã¥Á¤òºÎÍѤ·¤Þ¤¹ (±¦Ê¸Ì®(trailing context rule)¤Î¸å¤í¤ÎÉôʬ¤âŤµ¤Ë´Þ¤ß¤Þ¤¹¤¬¡¢ ¸å¤í¤ÎÉôʬ¤ÏÆþÎϤËÌᤵ¤ì¤Þ¤¹)¡£ Ʊ¤¸Ä¹¤µ¤Î¥Þ¥Ã¥Á¤ò 2 ¤Ä°Ê¾å¸«ÉÕ¤±¤¿¾ì¹ç¡¢ flex ÆþÎÏ¥Õ¥¡¥¤¥ë¤ÇºÇ½é¤Ëµ½Ò¤µ¤ì¤¿¥ë¡¼¥ë¤òºÎÍѤ·¤Þ¤¹¡£¥Þ¥Ã¥Á¤¬·èÄꤹ¤ë¤È¡¢¥Þ¥Ã¥Á¤ËÂбþ¤¹¤ë¥Æ¥¥¹¥È( ¥È¡¼¥¯¥ó ¤È¸Æ¤Ð¤ì¤Þ¤¹)¤¬¥°¥í¡¼¥Ð¥ëʸ»ú¥Ý¥¤¥ó¥¿ yytext ¤Ë¤è¤ê»ÈÍѲÄǽ¤È¤Ê¤ê¡¢Ä¹¤µ¤¬¥°¥í¡¼¥Ð¥ëÀ°¿ô yyleng ¤Ë¤è¤ê»ÈÍѲÄǽ¤È¤Ê¤ê¤Þ¤¹¡£ ¤½¤Î¸å¡¢¥Þ¥Ã¥Á¤·¤¿¥Ñ¥¿¡¼¥ó¤ËÂбþ¤¹¤ë ¥¢¥¯¥·¥ç¥ó ¤¬¼Â¹Ô¤µ¤ì(¥¢¥¯¥·¥ç¥ó¤Î¾ÜºÙ¤Êµ½Ò¤Ï¸å¤Ç¹Ô¤¤¤Þ¤¹)¡¢ »Ä¤ê¤ÎÆþÎϤ¬»Ä¤ê¤Î¥Þ¥Ã¥Á¤Î¤¿¤á¤Ë¥¹¥¥ã¥ó¤µ¤ì¤Þ¤¹¡£ ¥Þ¥Ã¥Á¤¬¸«ÉÕ¤«¤é¤Ê¤¤¤È¡¢ ¥Ç¥Õ¥©¥ë¥È¥ë¡¼¥ë ¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹: ÆþÎϤμ¡¤Îʸ»ú¤¬¥Þ¥Ã¥Á¤·¤¿¤È¸«Ê蘆¤ì¡¢ ɸ½à½ÐÎϤ˥³¥Ô¡¼¤µ¤ì¤Þ¤¹¡£ºÇ¤â´Êñ¤ÇÀµÅö¤Ê flex ¤ÎÆþÎϤϰʲ¼¤ÎÄ̤ê¤Ç¤¹:
%%
¤³¤ì¤Ï¡¢ÆþÎϤòñ½ã¤Ë½ÐÎϤ˥³¥Ô¡¼(1 ÅÙ¤Ë 1 ʸ»ú¤º¤Ä)¤¹¤ë¥¹¥¥ã¥Ê¤òÀ¸À®¤·¤Þ¤¹¡£
yytext ¤Ï 2 ¤Ä¤Î°Û¤Ê¤Ã¤¿ÊýË¡¤Ë¤è¤êÄêµÁ¤µ¤ì¤¦¤ë¤³¤È¤ËÃí°Õ¤·¤Æ²¼¤µ¤¤: ʸ»ú ¥Ý¥¤¥ó¥¿ ¤â¤·¤¯¤Ïʸ»ú ÇÛÎó ¤Ç¤¹¡£ flex ¤¬¤É¤Á¤é¤ÎÄêµÁ¤ò»ÈÍѤ¹¤ë¤«¤ÏÆÃÊ̤ʥǥ£¥ì¥¯¥Æ¥£¥Ö %pointer ¤â¤·¤¯¤Ï %array ¤ò flex ¤ÎÆþÎϤκǽé¤Î(ÄêµÁ)Éôʬ¤Ë´Þ¤á¤ë¤³¤È¤Ë¤è¤êÀ©¸æ¤Ç¤¤Þ¤¹¡£ ¥Ç¥Õ¥©¥ë¥È¤Ï %pointer ¤Ç¤¢¤ê¡¢ -l lex ¸ß´¹¥ª¥×¥·¥ç¥ó¤ò»ÈÍѤ·¤¿¾ì¹ç¤Ë¤ÏÎ㳰Ū¤Ë yytext ¤ÏÇÛÎó¤Ë¤Ê¤ê¤Þ¤¹¡£ %pointer ¤ò»ÈÍѤ¹¤ëÍøÅÀ¤Ï¥¹¥¥ã¥ó¤¬¹â®¤Ç¤¢¤ë¤³¤È¡¢ Èó¾ï¤ËÂ礤ʥȡ¼¥¯¥ó¤Ë¥Þ¥Ã¥Á¤¹¤ë»þ¤Ë¤â (ưŪ¥á¥â¥ê¤ò»ÈÍѤ·¿Ô¤¯¤µ¤Ê¤¤¸Â¤ê)¥Ð¥Ã¥Õ¥¡¥ª¡¼¥Ð¥Õ¥í¡¼¤È¤Ê¤é¤Ê¤¤¤³¤È¤Ç¤¹¡£ ·çÅÀ¤Ï¡¢¥¢¥¯¥·¥ç¥ó¤¬ yytext ¤ò½¤Àµ¤¹¤ë¤³¤È¤¬À©¸Â¤µ¤ì¤ë¤³¤È(¼¡ÀỲ¾È)¡¢ unput() ¸Æ¤Ó½Ð¤·¤¬ yytext ¤Î¸½ºß¤ÎÆâÍÆ¤òÇ˲õ¤¹¤ë¤³¤È¤Ç¤¹¡£ ¤³¤ì¤Ï°Û¤Ê¤ë lex ¥Ð¡¼¥¸¥ç¥ó´Ö¤Ç¤Î°Ü¿¢À¤Ë´Ø¤¹¤ëƬÄˤμï¤Ç¤¹¡£ %array ¤ÎÍøÅÀ¤Ï yytext ¤ÎÆâÍÆ¤ò»×¤Ã¤¿Ä̤ê¤ËÊѹ¹¤Ç¤¤ë¤³¤È¡¢ unput() ¤ò¸Æ¤Ó½Ð¤·¤Æ¤â yytext ¤ÎÆâÍÆ¤¬Ç˲õ¤µ¤ì¤Ê¤¤¤³¤È¤Ç¤¹(²¼µ»²¾È)¡£ ¤½¤Î¾å¡¢´û¸¤Î lex ¥×¥í¥°¥é¥à¤Ï yytext ¤ò³°Éô¤«¤é¼¡¤Î·Á¼°¤ÎÀë¸À¤ò»ÈÍѤ·¤Æ¥¢¥¯¥»¥¹¤·¤Æ¤¤¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹:
extern char yytext[];
¤³¤ÎÄêµÁ¤Ï
%pointer
»ÈÍÑ»þ¤Ë¤Ï¸í¤ê¤Ç¤¹¤¬¡¢
%array
»ÈÍÑ»þ¤Ë¤ÏÀµ¤·¤¤¤Ç¤¹¡£
%array ¤Ï yytext ¤òʸ»ú¿ô YYLMAX (¥Ç¥Õ¥©¥ë¥È¤Ï½½Ê¬Â礤ÊÃÍ)¤ÎÇÛÎó¤Ç¤¢¤ë¤ÈÄêµÁ¤·¤Þ¤¹¡£ ¤³¤ÎÂ礤µ¤Ï¡¢ flex ¤ÎÆþÎϤκǽé¤ÎÉôʬ¤Çñ½ã¤Ë YYLMAX ¤ò°Û¤Ê¤Ã¤¿ÃÍ¤Ë #define ¤¹¤ë¤³¤È¤Ë¤è¤êÊѹ¹¤Ç¤¤Þ¤¹¡£ ¾åµ¤ÎÄ̤ꡢ %pointer »ÈÍÑ»þ¤Ë¤Ï yytext ¤ÏÂ礤ʥȡ¼¥¯¥ó¤ò³ÊǼ¤¹¤ë¤¿¤á¤ËưŪ¤ËÂ礤¯¤Ê¤ê¤Þ¤¹¡£ ¤³¤Î¤³¤È¤Ï %pointer ¤ò»ÈÍѤ·¤¿¥¹¥¥ã¥Ê¤ÏÈó¾ï¤ËÂ礤ʥȡ¼¥¯¥ó (Î㤨¤Ð¥³¥á¥ó¥È¥Ö¥í¥Ã¥¯Á´ÂÎ)¤ò³ÊǼ²Äǽ¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¤¬¡¢ ¥¹¥¥ã¥Ê¤¬ yytext ¤ÎÂ礤µ¤òÊѤ¨¤ë¤¿¤Ó¤Ë¥È¡¼¥¯¥óÁ´ÂΤòÀèÆ¬¤«¤éºÆ¥¹¥¥ã¥ó¤¹¤ë¤³¤È¤¬É¬ÍפȤʤ뤿¤á ¤³¤Î¤è¤¦¤Ê¥È¡¼¥¯¥ó¤ËÂФ¹¤ë¥Þ¥Ã¥Á¥ó¥°¤ÏÃÙ¤¯¤Ê¤ê¤¦¤ë¤³¤È¤ò³Ð¤¨¤Æ¤ª¤¤¤Æ²¼¤µ¤¤¡£ ¸½ºß¡¢ yytext ¤Ï unput() ¤¬·ë²Ì¤È¤·¤ÆÊÖ¤¹¥Æ¥¥¹¥È¤¬Â礤¤»þ¤Ë¤ÏưŪ¤Ë¤ÏÂ礤¯¤Ê¤ê ¤Þ¤»¤ó; ¼Â¹Ô»þ¥¨¥é¡¼¤È¤Ê¤ê¤Þ¤¹¡£ ¤Þ¤¿¡¢ %array ¤Ï C++ ¥¹¥¥ã¥Ê¥¯¥é¥¹¤Ç¤Ï»ÈÍѤǤ¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ²¼¤µ¤¤( c++ ¥ª¥×¥·¥ç¥ó¤Ë´Ø¤·¤Æ¤Ï²¼µ»²¾È)¡£ ¥¢¥¯¥·¥ç¥ó¥ë¡¼¥ëÃæ¤Î¥Ñ¥¿¡¼¥ó¤ÏÂбþ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ò»ý¤Á¤Þ¤¹¡£ ¥¢¥¯¥·¥ç¥ó¤ÏǤ°Õ¤Î C ¤Îʸ¤Ç¤¹¡£ ¥Ñ¥¿¡¼¥ó¤ÏºÇ½é¤Î¥¨¥¹¥±¡¼¥×¤µ¤ì¤Æ¤¤¤Ê¤¤¶õÇòʸ»ú¤Ç½ª¤ê¤Þ¤¹; ¹Ô¤Î»Ä¤ê¤¬¥¢¥¯¥·¥ç¥ó¤Ç¤¹¡£ ¥¢¥¯¥·¥ç¥ó¤¬¶õ¤Ç¤¢¤ë¾ì¹ç¡¢ ¥Ñ¥¿¡¼¥ó¤¬¥Þ¥Ã¥Á¤·¤¿»þ¤ËÆþÎϥȡ¼¥¯¥ó¤Ïñ½ã¤Ë¼Î¤Æ¤é¤ì¤Þ¤¹¡£ Î㤨¤ÐÆþÎϤ«¤éÁ´¤Æ¤Î "zap me" ¤òºï½ü¤¹¤ë¥×¥í¥°¥é¥à¤Î»ÅÍͤò¼¨¤·¤Þ¤¹:
%%
"zap me"
(ÆþÎϤξ¤ÎÁ´¤Æ¤Îʸ»ú¤ò½ÐÎϤ˥³¥Ô¡¼¤·¤Þ¤¹¡£
¤Ê¤¼¤Ê¤é¥Ç¥Õ¥©¥ë¥È¥ë¡¼¥ë¤Ë¥Þ¥Ã¥Á¤¹¤ë¤«¤é¤Ç¤¹¡£)
¼¡¤Ï¡¢Ê£¿ô¤Î¶õÇò¤äʸ»ú¤òñ°ì¤Î¶õÇò¤Ë°µ½Ì¤·¹ÔËö¤Î¶õÇò¤ò¼Î¤Æ¤ë¥×¥í¥°¥é¥à¤Ç¤¹:
%%
[ \t]+ putchar( ' ' );
[ \t]+$ /* ignore this token */
¥¢¥¯¥·¥ç¥ó¤¬ '{' ¤ò´Þ¤à¾ì¹ç¡¢¥¢¥¯¥·¥ç¥ó¤ÏÂбþ¤¹¤ë '}' ¤Þ¤Ç³¤¡¢ Ê£¿ô¹Ô¤ËÅϤë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ flex ¤Ï C ¤Îʸ»úÎ󤪤è¤Ó¥³¥á¥ó¥È¤Ë´Ø¤·¤ÆÃΤäƤª¤ê¡¢ ¤½¤ì¤é¤ÎÃæ¤Î¥Ö¥ì¡¼¥¹¤ò¸í²ò¤¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢ ¥¢¥¯¥·¥ç¥ó¤¬ %{ ¤Ç»Ï¤Þ¤ë¤³¤È¤òµö¤·¡¢¼¡¤Î %} ¤Þ¤Ç¤Î¥Æ¥¥¹¥È¤¬¥¢¥¯¥·¥ç¥ó¤Ç¤¢¤ë¤È¤·¤Þ¤¹ (¥¢¥¯¥·¥ç¥óÆâÉô¤ÎǤ°Õ¸Ä¤Î¥Ö¥ì¡¼¥¹¤Ë¤Ï´Ø·¸¤¢¤ê¤Þ¤»¤ó)¡£ ¿âľ¥Ð¡¼ ('|') ¤Î¤ß¤«¤é¤Ê¤ë¥¢¥¯¥·¥ç¥ó¤Ï "¼¡¤Î¥ë¡¼¥ë¤ÈƱ¤¸" ¤ò°ÕÌ£¤·¤Þ¤¹¡£ÀâÌÀ¤Ï°Ê²¼¤ò¸«¤Æ²¼¤µ¤¤¡£ ¥¢¥¯¥·¥ç¥ó¤ÏǤ°Õ¤Î C ¥³¡¼¥É¤ò´Þ¤à¤³¤È¤¬½ÐÍè¤Þ¤¹¡£ ¤³¤ì¤Ë¤Ï¡¢ yylex() ¤ò¸Æ¤Ó½Ð¤·¤¿¥ë¡¼¥Á¥ó¤ËÂФ·¤ÆÃͤòÊÖ¤¹ return ʸ¤â´Þ¤Þ¤ì¤Þ¤¹¡£ yylex() ¤¬¸Æ¤Ð¤ì¤ë¤¿¤Ó¡¢ºÇ¸å¤Ë»Ä¤Ã¤¿¥È¡¼¥¯¥ó¤«¤é½èÍý¤òºÆ³«¤·¡¢ ¥Õ¥¡¥¤¥ë¤Î½ªÎ»¤â¤·¤¯¤Ï return ¤ò¼Â¹Ô¤¹¤ë¤Þ¤Ç½èÍý¤ò¹Ô¤¤¤Þ¤¹¡£ ¥¢¥¯¥·¥ç¥ó¤Ï¼«Í³¤Ë yytext ¤òÊѹ¹¤Ç¤¤Þ¤¹¤¬¡¢Îã³°¤ÏŤµ¤òÁý¤ä¤¹¤³¤È¤Ç¤¹ (ʸ»ú¤òËöÈø¤Ë²Ã¤¨¤ë¤³¤È¤Ë¤Ê¤ê¡¢ ¤³¤ì¤ÏÆþÎÏ¥¹¥È¥ê¡¼¥à¤Î¸å³¤¹¤ëʸ»ú¤ò¾å½ñ¤¤·¤Þ¤¹)¡£ ¤³¤ì¤Ï %array »ÈÍÑ»þ¤Ë¤ÏÅö¤Æ¤Ï¤Þ¤ê¤Þ¤»¤ó(¾å½Ò); ¤³¤Î¾ì¹ç yytext ¤ò¼«Í³¤ËÊѹ¹¤Ç¤¤Þ¤¹¡£ ¥¢¥¯¥·¥ç¥ó¤Ï¼«Í³¤Ë yyleng ¤òÊѹ¹¤Ç¤¤Þ¤¹¤¬¡¢¥¢¥¯¥·¥ç¥ó¤¬ yymore() ¤ò»ÈÍѤ¹¤ë»þ¤Ë¤ÏÎ㳰Ū¤ËÊѹ¹¤·¤Æ¤Ï¤¤¤±¤Þ¤»¤ó(¸å½Ò)¡£ ¿¤¯¤ÎÆÃÊ̤ʥǥ£¥ì¥¯¥Æ¥£¥Ö¤¬¤¢¤ê¡¢¥¢¥¯¥·¥ç¥óÃæ¤Ë´Þ¤á¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹:
yymore() ¤Î»ÈÍѤ˴ؤ· 2 ¤Ä¤ÎÃí°ÕÅÀ¤¬¤¢¤ê¤Þ¤¹¡£ ¤Þ¤º¡¢ yymore() ¤Ï¸½ºß¤Î¥È¡¼¥¯¥ó¤ÎÂ礤µ¤òÈ¿±Ç¤¹¤ë yyleng ¤ÎÃͤÎÀµ³Î¤µ¤Ë°Í¸¤¹¤ë¤³¤È¤Ç¤¢¤ê¡¢ yymore() »ÈÍÑ»þ¤Ë¤Ï yyleng ¤òÊѹ¹¤·¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£ ¼¡¤Ë¡¢ ¥¹¥¥ã¥Ê¤Î¥¢¥¯¥·¥ç¥ó¤Ë yymore() ¤¬¤¢¤ë¤È¡¢¥¹¥¥ã¥Ê¤Î¥Þ¥Ã¥Á®Å٤˼㴳°±Æ¶Á¤¬¤¢¤ê¤Þ¤¹¡£
yyless ¤Ï¥Þ¥¯¥í¤Ç¤¢¤ê¡¢flex ÆþÎÏ¥Õ¥¡¥¤¥ë¤Ç¤Î¤ß»ÈÍѲÄǽ¤Ç¤¢¤ê¡¢ Ê̤Υ½¡¼¥¹¥Õ¥¡¥¤¥ë¤«¤é¤Ï»ÈÍÑÉÔǽ¤Ç¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ²¼¤µ¤¤¡£
unput() »ÈÍÑ»þ¤Î½ÅÍפÊÀøºßŪ¤ÊÌäÂê¤Ï¡¢ %pointer »ÈÍÑ»þ(¥Ç¥Õ¥©¥ë¥È)¤Ë unput() ¤ò¸Æ¤Ó½Ð¤¹¤È¡¢ ±¦Ã¼¤Îʸ»ú¤«¤é³«»Ï¤· 1 ʸ»ú¤º¤Äº¸¤Ë¸þ¤«¤Ã¤Æ¾ÃÈñ¤µ¤ì¡¢ yytext ¤ÎÆâÍÆ¤¬ Ç˲õ ¤µ¤ì¤ë¤³¤È¤Ç¤¹¡£ (¾åµÎã¤Î¤è¤¦¤Ë) unput() ¸Æ¤Ó½Ð¤·¸å¤â yytext ¤ÎÆâÍÆ¤òÊݸ¤¹¤ë¤¿¤á¤Ë¤Ï¡¢»Ï¤á¤ËÊ̤ξì½ê¤Ë¥³¥Ô¡¼¤¹¤ë¤«¡¢ ¥¹¥¥ã¥Ê¤ò %array ¤ò»È¤¦¤è¤¦¤Ë¹½ÃÛ¤¹¤ë¤³¤È¤Ç¤¹(ÆþÎϤΥޥåÁÊýË¡»²¾È)¡£ ºÇ¸å¤Ë¡¢ EOF ¤òÌᤷ¤ÆÆþÎÏ¥¹¥È¥ê¡¼¥à¤Ë¥Õ¥¡¥¤¥ë¤Î½ª¤ê¤ò¥Þ¡¼¥¯¤¹¤ë¤È¤Ï ½ÐÍè¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ²¼¤µ¤¤¡£
À¸À®¤µ¤ì¤¿¥¹¥¥ã¥Êflex ¤Î½ÐÎÏ¤Ï lex.yy.c ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Ç¤¢¤ê¡¢¥¹¥¥ã¥ó¥ë¡¼¥Á¥ó yylex() ¤È¡¢¥È¡¼¥¯¥ó¤Î¥Þ¥Ã¥Á¥ó¥°¤Ë»ÈÍѤ¹¤ëÊ£¿ô¤Î¥Æ¡¼¥Ö¥ë¤È¡¢ Ê£¿ô¤ÎÉÕ°¥ë¡¼¥Á¥ó¤È¥Þ¥¯¥í¤«¤é¤Ê¤ê¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢ yylex() ¤Ï¼¡¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤Þ¤¹:
int yylex()
{
... various definitions and the actions in here ...
}
(´Ä¶¤¬´Ø¿ô¥×¥í¥È¥¿¥¤¥×¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¾ì¹ç¡¢
"int yylex( void )" ¤È¤Ê¤ê¤Þ¤¹¡£)
¤³¤ÎÄêµÁ¤Ï "YY_DECL" ¥Þ¥¯¥í¤òÄêµÁ¤¹¤ë¤³¤È¤Ë¤è¤êÊѹ¹¤Ç¤¤Þ¤¹¡£
Î㤨¤Ð¼¡¤Î¤è¤¦¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹:
#define YY_DECL float lexscan( a, b ) float a, b;
¤³¤ì¤Ï¥¹¥¥ã¥ó¥ë¡¼¥Á¥ó¤Î̾Á°¤ò
lexscan
¤È¤·¡¢ÉâÆ°¾®¿ôÅÀ¿ô¤òÊÖ¤¹¤è¤¦¤Ë¤·¡¢2 ¤Ä¤ÎÉâÆ°¾®¿ôÅÀ¿ô¤ò°ú¿ô¤È¤·¤Þ¤¹¡£
K&R ¤ÎÈó¥×¥í¥È¥¿¥¤¥×¤Î´Ø¿ôÀë¸À¤ò»ÈÍѤ·¤Æ¥¹¥¥ã¥ó¥ë¡¼¥Á¥ó¤ËÂФ·¤Æ°ú¿ô¤ò
Í¿¤¨¤ë¾ì¹ç¡¢ÄêµÁ¤ò¥»¥ß¥³¥í¥ó(;)¤Ç½ªÎ»¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
yylex() ¤Ï¸Æ¤Ð¤ì¤ë¤¿¤Ó¡¢¥°¥í¡¼¥Ð¥ëÆþÎÏ¥Õ¥¡¥¤¥ë yyin (¥Ç¥Õ¥©¥ë¥È¤Ç¤Ïɸ½àÆþÎÏ)¤«¤é¥È¡¼¥¯¥ó¤ò¥¹¥¥ã¥ó¤·¤Þ¤¹¡£ ¥Õ¥¡¥¤¥ë¤Î½ª¤ê¤Ë¤Ê¤ë(¤³¤Î¾ì¹ç 0 ¤òÊÖ¤·¤Þ¤¹)¤«¡¢ ¥¢¥¯¥·¥ç¥ó¤¬ return ʸ¤ò¼Â¹Ô¤¹¤ë¤Þ¤Ç¡¢¼Â¹Ô¤ò³¤±¤Þ¤¹¡£ ¥¹¥¥ã¥Ê¤¬¥Õ¥¡¥¤¥ë¤Î½ª¤ê¤ËÅþ㤹¤ë¤È¡¢ yyin ¤¬¿·¤¿¤Ê¥Õ¥¡¥¤¥ë¤ò»Ø¤µ¤Ê¤¤¤« (¿·¤¿¤Ê¥Õ¥¡¥¤¥ë¤ò»Ø¤¹¾ì¹ç¤Ï¤³¤Î¥Õ¥¡¥¤¥ë¤Î¥¹¥¥ã¥ó¤ò³¤±¤Þ¤¹)¡¢ yyrestart() ¤¬¸Æ¤Ð¤ì¤Ê¤¤¸Â¤ê¡¢ ¸å³¤¹¤ë¸Æ¤Ó½Ð¤·¤Ï̤ÄêµÁ¤Ç¤¹¡£ yyrestart() ¤Ï FILE * ¥Ý¥¤¥ó¥¿( YY_INPUT ¤òÀßÄꤷ¤Æ yyin °Ê³°¤Î¥½¡¼¥¹¤ò¥¹¥¥ã¥ó¤¹¤ë¤è¤¦¤Ë¤·¤¿¾ì¹ç¤Ë¤Ï nil ¤â²Ä¤Ç¤¹) ¤Ç¤¢¤ë°ú¿ô¤ò 1 ¤Ä¤È¤ê¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤«¤é¤Î¥¹¥¥ã¥ó¤Î¤¿¤á¤Ë yyin ¤ò½é´ü²½¤·¤Þ¤¹¡£ ËܼÁŪ¤Ë¡¢ yyin ¤ò¿·¤·¤¤ÆþÎÏ¥Õ¥¡¥¤¥ë¤Ë³ä¤êÅö¤Æ¤ë¤³¤È¤È yyrestar() ¤ò»ÈÍѤ¹¤ë¤³¤È¤È¤ÏƱ¤¸¤Ç¤¹; ¸å¼Ô¤ÏÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Î flex ¤È¤Î¸ß´¹À¤Î¤¿¤á¤Ë»ÈÍѲÄǽ¤Ç¤¢¤ê¡¢ ¤Þ¤¿¥¹¥¥ã¥ó¤ÎÅÓÃæ¤ÇÆþÎÏ¥Õ¥¡¥¤¥ë¤òÊѤ¨¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£ °ú¿ô¤ò yyin ¤È¤·¤Æ¸Æ¤Ó½Ð¤¹¤³¤È¤Ë¤è¤ê¡¢¸½ºß¤ÎÆþÎϥХåե¡¤ò¼Î¤Æ¤ë¤³¤È¤â½ÐÍè¤Þ¤¹; ¤¿¤À¤·¡¢ YY_FLUSH_BUFFER (¾å½Ò)¤ò»ÈÍѤ¹¤ëÊý¤¬Îɤ¤¤Ç¤¹¡£ yyrestart() ¤Ï INITIAL ¤Î³«»Ï¾ò·ï¤òÊѹ¹¤· ¤Ê¤¤ ¤³¤È¤ËÃí°Õ¤·¤Æ²¼¤µ¤¤ (¸å½Ò¤Î³«»Ï¾ò·ï»²¾È)¡£ ¤¢¤ë¥¢¥¯¥·¥ç¥óÃæ¤Ç return ʸ¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ë¤è¤ê yylex() ¤¬¥¹¥¥ã¥ó¤ò»ß¤á¤¿¾ì¹ç¡¢¥¹¥¥ã¥Ê¤ÏºÆÅٸƤӽФ·²Äǽ¤Ç¤¢¤ê¡¢ ¤³¤Î¾ì¹ç¥¹¥¥ã¥ó¤Î»Ä¤ê¤ÎÉôʬ¤«¤éºÆ³«¤·¤Þ¤¹¡£ ¥Ç¥Õ¥©¥ë¥È¤Ç(¸úΨ¤Î¤¿¤á)¡¢¥¹¥¥ã¥Ê¤Ïñ½ã¤Ê getc() ¥³¡¼¥ë¤Ç¤Ï¤Ê¤¯¥Ö¥í¥Ã¥¯¥ê¡¼¥É¤ò¹Ô¤¤¡¢ yyin ¤«¤éʸ»ú¤òÆÉ¤ß¤Þ¤¹¡£ ÆþÎϼèÆÀÊýË¡¤Ï YY_INPUT ¥Þ¥¯¥í¤òÄêµÁ¤¹¤ë¤³¤È¤Ë¤è¤êÀ©¸æ¤Ç¤¤Þ¤¹¡£ YY_INPUT ¸Æ¤Ó½Ð¤·¼ê½ç¤Ï "YY_INPUT(buf,result,max_size)" ¤Ç¤¹¡£ ¤³¤Î¥¢¥¯¥·¥ç¥ó¤Ï¡¢ buf ʸ»úÇÛÎóÃæ¤ËºÇÂç max_size ʸ»ú¤òÍѰդ·¡¢À°¿ôÊÑ¿ô result Ãæ¤ËÆÉ¤á¤¿Ê¸»ú¿ô¤â¤·¤¯¤ÏÄê¿ô YY_NULL (Unix ¥·¥¹¥Æ¥à¤Ç¤Ï 0)¤òÆþ¤ì¤ÆÊÖ¤·¤Þ¤¹¡£ ¥Ç¥Õ¥©¥ë¥È¤Î YY_INPUT ¤Ï¥°¥í¡¼¥Ð¥ë¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿ "yyin" ¤«¤éÆÉ¤ß¤Þ¤¹¡£ YY_INPUT ¤Î¥µ¥ó¥×¥ëÄêµÁ¤Ç¤¹(ÆþÎÏ¥Õ¥¡¥¤¥ë¤ÎÄêµÁÉô¤Ë³ÊǼ):
%{
#define YY_INPUT(buf,result,max_size) \
{ \
int c = getchar(); \
result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \
}
%}
¤³¤ÎÄêµÁ¤Ë¤è¤ê¡¢ÆþÎϽèÍý¤Ï 1 ÅÙ¤Ë 1 ʸ»ú¤º¤Ä¹Ô¤¦¤è¤¦¤ËÊѹ¹¤µ¤ì¤Þ¤¹¡£
¥¹¥¥ã¥Ê¤¬ YY_INPUT ¤«¤é¥Õ¥¡¥¤¥ë¤Î½ª¤ê¤òÄÌÃΤµ¤ì¤¿¾ì¹ç¡¢ ¥¹¥¥ã¥Ê¤Ï yywrap() ´Ø¿ô¤ò¥Á¥§¥Ã¥¯¤·¤Þ¤¹¡£ yywrap() ´Ø¿ô¤¬µ¶(¥¼¥í)¤òÊÖ¤¹¾ì¹ç¡¢´Ø¿ô¤Ï³¹ÔÃæ¤Ç¤¢¤ë¤È¤µ¤ì¡¢ yyin ¤òÊÌ¤ÎÆþÎÏ¥Õ¥¡¥¤¥ë¤ò»Ø¤¹¤è¤¦¤ËÀßÄꤷ¡¢¥¹¥¥ã¥ó¤ò³¹Ô¤·¤Þ¤¹¡£ ´Ø¿ô¤¬¿¿(Èó¥¼¥í)¤òÊÖ¤¹¾ì¹ç¡¢¥¹¥¥ã¥Ê¤Ï½ªÎ»¤·¡¢¸Æ¤Ó½Ð¤·¸µ¤Ë 0 ¤òÊÖ¤·¤Þ¤¹¡£ ¤É¤Á¤é¤Î¾ì¹ç¤â³«»Ï¾ò·ï¤ÏÊѲ½¤·¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ²¼¤µ¤¤; ¤Ä¤Þ¤ê INITIAL ¤Ë¤ÏÌá¤ê ¤Þ¤»¤ó¡£ ÆÈ¼«¤Î yywrap() ¤òÀßÄꤷ¤Ê¤¤¾ì¹ç¡¢ %option noyywrap (¤³¤Î¾ì¹ç¥¹¥¥ã¥Ê¤Ï yywrap() ¤¬ 1 ¤òÊÖ¤·¤¿¤«¤Î¤è¤¦¤Ëưºî¤·¤Þ¤¹)¤ò»ÈÍѤ¹¤ë¤«¡¢¥Õ¥é¥° -ll ¤ò»ØÄꤷ¤Æ¥Ç¥Õ¥©¥ë¥È¤Î¥ë¡¼¥Á¥ó(¾ï¤Ë 1 ¤òÊÖ¤·¤Þ¤¹)¤ò»ÈÍѤ·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ ¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¯¥á¥â¥êÃæ¤Î¥Ð¥Ã¥Õ¥¡¤«¤é¥¹¥¥ã¥ó¤¹¤ë¤¿¤á¤Î 3 ¤Ä¤Î¥ë¡¼¥Á¥ó¤ò »ÈÍѲÄǽ¤Ç¤¹: yy_scan_string(), yy_scan_bytes(), yy_scan_buffer() ¡£ ¤³¤ì¤é¤Ë´Ø¤¹¤ëµÄÏÀ¤ÏÊ£¿ô¤ÎÆþÎϥХåե¡¤ÎÀá¤ò»²¾È¤·¤Æ²¼¤µ¤¤¡£ ¥¹¥¥ã¥Ê¤Ï¡¢¼«¸Ê¤Î ECHO ½ÐÎϤò yyout ¥°¥í¡¼¥Ð¥ë(¥Ç¥Õ¥©¥ë¥È¤Ç¤Ïɸ½à½ÐÎϤǤ¢¤ê¡¢ Ê̤ΠFILE ¥Ý¥¤¥ó¥¿¤Ë³ä¤êÅö¤Æ¤ë¤³¤È¤ÇºÆÄêµÁ¤Ç¤¤Þ¤¹)¤Ë½ñ¤¤Þ¤¹¡£ ³«»Ï¾ò·ïflex ¤Ï¡¢¾ò·ïŪ¤Ë͸ú¤È¤Ê¤ë¥ë¡¼¥ë¤Î¤¿¤á¤Îµ¡¹½¤òÄ󶡤·¤Þ¤¹¡£ ¥Ñ¥¿¡¼¥ó¤Î¥×¥ì¥Õ¥£¥Ã¥¯¥¹¤¬ "<sc>" ¤È¤Ê¤Ã¤Æ¤¤¤ë¥ë¡¼¥ë¤Ï¡¢ ¥¹¥¥ã¥Ê¤¬ "sc" ¤È¤¤¤¦Ì¾Á°¤Î³«»Ï¾ò·ï¤Ë¤¤¤ë¾ì¹ç¤Î¤ß͸ú¤Ç¤¹¡£ Î㤨¤Ð¡¢
<STRING>[^"]* { /* eat up the string body ... */
...
}
¤Ï¥¹¥¥ã¥Ê¤¬ "STRING" ³«»Ï¾ò·ï¤Ë¤¤¤ë»þ¤Î¤ß͸ú¤Ç¤¢¤ê¡¢
<INITIAL,STRING,QUOTE>\. { /* handle an escape ... */
...
}
¤Ï¸½ºß¤Î³«»Ï¾ò·ï¤¬¡¢
"INITIAL", "STRING", "QUOTE" ¤Î¤¤¤º¤ì¤«¤Î¾ì¹ç¤Î¤ß͸ú¤Ç¤¹¡£
³«»Ï¾ò·ï¤Ï¡¢ÆþÎϤÎÄêµÁ(ÀèÆ¬)Éô¤Ë¤ª¤¤¤Æ¡¢¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤Ê¤¤¹Ô¤Ç %s ¤â¤·¤¯¤Ï %x ¤«¤é»Ï¤Þ¤ê̾Á°¤¬Â³¤¯¹Ô¤Ë¤ª¤¤¤ÆÀë¸À¤µ¤ì¤Þ¤¹¡£ Á°¼Ô¤Ï ÆâÊñŪ ³«»Ï¾ò·ï¤ò¡¢ ¸å¼Ô¤Ï ÇÓ¾Ū ³«»Ï¾ò·ï¤ò¡¢¤½¤ì¤¾¤ìÀë¸À¤·¤Þ¤¹¡£ ³«»Ï¾ò·ï¤ò͸ú¤Ë¤¹¤ë¤Î¤Ï BEGIN ¥¢¥¯¥·¥ç¥ó¤Ç¤¹¡£ ¼¡¤Î BEGIN ¥¢¥¯¥·¥ç¥ó¤¬¼Â¹Ô¤µ¤ì¤ë¤Þ¤Ç¡¢Í¿¤¨¤é¤ì¤¿³«»Ï¾ò·ï¤Î¥ë¡¼¥ë¤Ï͸ú¤Ç¤¢¤ê¡¢ ¾¤Î³«»Ï¾ò·ï¤Î¥ë¡¼¥ë¤Ï̵¸ú¤Ç¤¹¡£ ³«»Ï¾ò·ï¤¬ ÆâÊñŪ ¤Ê¾ì¹ç¡¢³«»Ï¾ò·ï¤ò»ý¤¿¤Ê¤¤¥ë¡¼¥ë¤â¤Þ¤¿Í¸ú¤Ç¤¹¡£ ³«»Ï¾ò·ï¤¬ ÇÓ¾Ū ¤Ê¾ì¹ç¡¢ ³«»Ï¾ò·ï¤òËþ¤¿¤¹¥ë¡¼¥ë ¤À¤± ¤¬Í¸ú¤Ç¤¹¡£ Ʊ¤¸ÇÓ¾³«»Ï¾ò·ï¤Ë°Í¸¤¹¤ë¥ë¡¼¥ë¤ÎÁȤϡ¢ flex ÆþÎÏÃæ¤ÎÊ̤Υ롼¥ë¤È¤ÏÆÈΩ¤Ê¥¹¥¥ã¥Ê¤òµ½Ò¤·¤Þ¤¹¡£ ¤½¤Î¤¿¤á | ||||||