Next: , Previous: Flex and C (Flex 2.5), Up: Interfacing to Flex   [Contents][Index]


4.3 Flex¤ÈC¤Î´Êñ¤Ê¼ÂÎã

¤¢¤ëñ¸ì¤¬¸½¤ì¤¿»þ¤Ë¡¢ ¤½¤ì¤òÊ̤Îñ¸ì¤ËÃÖ¤­´¹¤¨¤ëɬÍפÎÀ¸¤¸¤ë¤³¤È¤¬¤è¤¯¤¢¤ê¤Þ¤¹¡£ Î㤨¤Ð¡¢ ¤¢¤ë̾Á°¤¬¸½¤ì¤ë¤¿¤Ó¤Ë¡¢ ¤½¤ì¤ò¤¢¤ë£±¤Ä¤Î´Ä¶­ÊÑ¿ô¤ÎÃͤÇÃÖ¤­´¹¤¨¤Æ¤¯¤ì¤ë¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤òºî¤ê¤¿¤¤¤È¤·¤Þ¤·¤ç¤¦¡£ ¤½¤·¤Æ¡¢ °Ê²¼¤Î¤è¤¦¤Ê¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¡¢ ¤½¤Î¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤¬¥Õ¥£¥ë¥¿¤È¤·¤ÆÆ°ºî¤¹¤ë¤è¤¦¤Ë¤µ¤»¤¿¤¤¤È¤·¤Þ¤¹¡£

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¤È¤¤¤¦Ì¾Á°¤Î¼Â¹Ô¥Õ¥¡¥¤¥ë¤¬À¸À®¤µ¤ì¤ë¤Ï¤º¤Ç¤¹¡£ ¤³¤ì¤Ï¡¢ °Ê²¼¤Î¤è¤¦¤ÊÊÑ´¹½èÍý¤ò¼Â¹Ô¤¹¤ë¥Õ¥£¥ë¥¿¤Ç¤¹¡£

¤·¤¿¤¬¤Ã¤Æ¡¢ °Ê²¼¤Î¤è¤¦¤ÊÆâÍÆ¤ò»ý¤Ä¥Õ¥¡¥¤¥ë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¤Ç¤¹¡£