Next: Flex and Bison, Previous: Flex and C (Flex 2.5), Up: Interfacing to Flex [Contents][Index]
¤¢¤ëñ¸ì¤¬¸½¤ì¤¿»þ¤Ë¡¢ ¤½¤ì¤òÊ̤Îñ¸ì¤ËÃÖ¤´¹¤¨¤ëɬÍפÎÀ¸¤¸¤ë¤³¤È¤¬¤è¤¯¤¢¤ê¤Þ¤¹¡£ Î㤨¤Ð¡¢ ¤¢¤ë̾Á°¤¬¸½¤ì¤ë¤¿¤Ó¤Ë¡¢ ¤½¤ì¤ò¤¢¤ë£±¤Ä¤Î´Ä¶ÊÑ¿ô¤ÎÃͤÇÃÖ¤´¹¤¨¤Æ¤¯¤ì¤ë¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤òºî¤ê¤¿¤¤¤È¤·¤Þ¤·¤ç¤¦¡£ ¤½¤·¤Æ¡¢ °Ê²¼¤Î¤è¤¦¤Ê¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¡¢ ¤½¤Î¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤¬¥Õ¥£¥ë¥¿¤È¤·¤ÆÆ°ºî¤¹¤ë¤è¤¦¤Ë¤µ¤»¤¿¤¤¤È¤·¤Þ¤¹¡£
nick% myname < infile | more nick% myname < infile > outfile
°Ê²¼¤Ë¡¢ ¤³¤¦¤·¤¿¤³¤È¤ò¼Â¸½¤¹¤ëÊýË¡¤ò¼¨¤¹Flex¥Õ¥¡¥¤¥ë¤Î´Êñ¤ÊÎã¤òµó¤²¤Þ¤¹¡£
/* * myname.lex : ¥È¡¼¥¯¥ó¤ÎÃÖ¤´¹¤¨¤ò¹Ô¤¦Flex¥×¥í¥°¥é¥à * ¤Î¥µ¥ó¥×¥ë */ %% %NAME { printf("%s",getenv("LOGNAME")); } %HOST { printf("%s",getenv("HOST")); } %HOSTTYPE { printf("%s",getenv("HOSTTYPE"));} %HOME { printf("%s",getenv("HOME")); } %%
¤³¤Î¥½¡¼¥¹¡¦¥Õ¥¡¥¤¥ë¤Ïexamples¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ê¡¢ ¤½¤Î̾Á°¤Ïmyname.lex¤Ç¤¹¡£ ¤³¤ì¤ò¥Ó¥ë¥É¤¹¤ë¤Ë¤Ï¡¢ examples¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë°Üư¤·¤Æ‘make myname’¤ò¼Â¹Ô¤¹¤ë¤«¡¢ °Ê²¼¤ò¼Â¹Ô¤·¤Þ¤¹¡£
flex myname.lex cc lex.yy.c -o myname -lfl
¤³¤³¤Ç‘-lfl’¤Ï¡¢
¥ê¥ó¥«¤ËÂФ·¤ÆFlex¥é¥¤¥Ö¥é¥ê¤ò¥ê¥ó¥¯¤¹¤ë¤è¤¦ÄÌÃΤ·¤Þ¤¹¡£
¸½ºß¤Î¤È¤³¤í¡¢
Flex¥é¥¤¥Ö¥é¥ê¤Ë¤Ï¥Ç¥Õ¥©¥ë¥È¤Îmain()
´Ø¿ô¤À¤±¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£
¾Íè¤Î¥Ð¡¼¥¸¥ç¥ó¤ÎFlex¤Ç¤Ï¡¢
¾¤Î´Ø¿ô¤â´Þ¤Þ¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£
Flex¥é¥¤¥Ö¥é¥ê¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢
¤³¤ÎÉôʬ¤Ï‘-ll’¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
¤¤¤º¤ì¤Î¾ì¹ç¤Ç¤â¡¢ ºÇ½ªÅª¤Ë¤Ïmyname¤È¤¤¤¦Ì¾Á°¤Î¼Â¹Ô¥Õ¥¡¥¤¥ë¤¬À¸À®¤µ¤ì¤ë¤Ï¤º¤Ç¤¹¡£ ¤³¤ì¤Ï¡¢ °Ê²¼¤Î¤è¤¦¤ÊÊÑ´¹½èÍý¤ò¼Â¹Ô¤¹¤ë¥Õ¥£¥ë¥¿¤Ç¤¹¡£
%NAME
¥æ¡¼¥¶¤Î¥í¥°¥¤¥ó̾¤ËÃÖ¤´¹¤¨¤é¤ì¤Þ¤¹¡£
%HOST
¥æ¡¼¥¶¤Î¥Û¥¹¥È¡¦¥³¥ó¥Ô¥å¡¼¥¿Ì¾¤ËÃÖ¤´¹¤¨¤é¤ì¤Þ¤¹¡£
%HOSTTYPE
¥æ¡¼¥¶¤Î¥Û¥¹¥È¡¦¥³¥ó¥Ô¥å¡¼¥¿¤Î¥Þ¥·¥ó¡¦¥¿¥¤¥×¤ËÃÖ¤´¹¤¨¤é¤ì¤Þ¤¹¡£
%HOME
¥æ¡¼¥¶¤Î¥Û¡¼¥à¡¦¥Ç¥£¥ì¥¯¥È¥ê¤òɽ¤¹¥Ñ¥¹¤ËÃÖ¤´¹¤¨¤é¤ì¤Þ¤¹¡£
¤·¤¿¤¬¤Ã¤Æ¡¢ °Ê²¼¤Î¤è¤¦¤ÊÆâÍÆ¤ò»ý¤Ä¥Õ¥¡¥¤¥ëmyname.txt¤òºîÀ®¤·¤Æ¡¢
Hello, my name is %NAME. Actually "%NAME" isn't my real name, it is the alias I use when I'm on %HOST, which is the %HOSTTYPE I use. My HOME directory is %HOME.
°Ê²¼¤ò¼Â¹Ô¤¹¤ë¤È¡¢
myname < myname.txt
°Ê²¼¤Î¥Æ¥¥¹¥È¤Ë»÷¤¿¤â¤Î¤¬stdout
¤Ø½ñ¤¹þ¤Þ¤ì¤Þ¤¹¡£
Hello, my name is foobar. Actually "foobar" isn't my real name, it is the alias I use when I'm on baz, which is the cray I use. My HOME directory is /home/foo/foobar.
¤³¤Î¥×¥í¥°¥é¥à¤¬¤¦¤Þ¤¯Æ°ºî¤¹¤ë¤Î¤Ï¡¢
yyin
¤Èyyout
¤¬¥Ç¥Õ¥©¥ë¥È¤Ç¤Ïstdin
¡¢stdout
¤Ë¤½¤ì¤¾¤ì³ä¤êÅö¤Æ¤é¤ì¡¢
¤«¤Ä¡¢
¥Ç¥Õ¥©¥ë¥È¤Î¥¢¥¯¥·¥ç¥ó¤¬yyin
¤ÎÆâÍÆ¤òyyout
¤Ë¥³¥Ô¡¼¤¹¤ë¤«¤é¤Ç¤¹¡£
¤Þ¤¿¡¢
¸Ä¡¹¤Î¥ë¡¼¥ë¤ËÂбþ¤¹¤ëÍ£°ì¤Î¥¢¥¯¥·¥ç¥ó¤¬Ã±°ì¹Ô¤Çµ½Ò¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢
‘{ }’¤ÏɬÍפǤϤʤ¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¡¢
¥¢¥¯¥·¥ç¥ó¤ò‘{ }’¤Ç°Ï¤à¤«Èݤ«¤Ï¡¢
¸Ä¿ÍŪ¤Ê¹¥¤ß¤ÎÌäÂê¤Ë¤Ê¤ê¤Þ¤¹¡£
¤³¤ì¤¬¡¢ °úÍÑÉä¤Ç°Ï¤Þ¤ì¤¿Éôʬ¤Ë¤¢¤ë¤â¤Î¤â´Þ¤á¤Æ¡¢ »ØÄꤵ¤ì¤¿Ì¾Á°¤¬¸½¤ì¤ë¤È¤³¤í¤¹¤Ù¤Æ¤Ë¥Þ¥Ã¥Á¤·¤¿¤³¤È¤Ëµ¤¤¬¤Ä¤¤Þ¤·¤¿¤«¡© Flex¤Ë¤ª¤¤¤Æ¤Ï¡¢ °úÍÑÉä¤Ç°Ï¤Þ¤ì¤¿Éôʬ¤Ë¤¢¤ë¤â¤Î¤Ë¥Þ¥Ã¥Á¤µ¤»¤¿¤¯¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢ ¤½¤ì¤ËÂбþ¤¹¤ë¥ë¡¼¥ë¤òºîÀ®¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢ ¤½¤¦¤·¤Ê¤¤¤è¤¦ÌÀ¼¨Åª¤ËFlex¤ËÄÌÃΤ·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ °Ê²¼¤ËÎã¤ò¼¨¤·¤Þ¤¹¡£
/* * myname2.lex : ¥È¡¼¥¯¥ó¤ÎÃÖ¤´¹¤¨¤ò¹Ô¤¦Flex¥×¥í¥°¥é¥à¤ÎÎã */ %{ #include <stdio.h> %} %x STRING %% \" ECHO; BEGIN(STRING); <STRING>[^\"\n]* ECHO; <STRING>\" ECHO; BEGIN(INITIAL);
%NAME { printf("%s",getenv("LOGNAME")); } %HOST { printf("%s",getenv("HOST")); } %HOSTTYPE { printf("%s",getenv("HOSTTYPE"));} %HOME { printf("%s",getenv("HOME")); }
¤³¤ÎÎã¤Ç¤Ï¡¢ ÇÓ¾Ū¥¹¥¿¡¼¥È¾õÂÖ¤ò»È¤Ã¤Æ¡¢ ʸ»úÎóÃæ¤Î¥Æ¥¥¹¥È¤¬Êѹ¹¤µ¤ì¤ë¤³¤È¤Î¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£ ¤³¤ÎÎã¤âexamples¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë¤â¤Î¤Ç¡¢ ¤½¤Î̾Á°¤Ïmyname2.lex¤Ç¤¹¡£