Next: , Previous: Handling Numbers, Up: Useful Code   [Contents][Index]


9.4 Ê£¿ô¤Î¥¹¥­¥ã¥Ê

»þ¤Ë¤Ï¡¢ £±¤Ä¤Î¥×¥í¥°¥é¥à¤ÎÃæ¤ÇÊ£¿ô¤Î¥¹¥­¥ã¥Ê¤ò»ý¤ÄɬÍפ¬¤¢¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¤¬¡¢ ¤³¤¦¤¹¤ë¤È¡¢ £²²ó°Ê¾å¸½¤ì¤ë´Ø¿ô¤äÊÑ¿ô¤Ë¤Ä¤¤¤Æ¡¢ ¥ê¥ó¥«¤¬Ê¸¶ç¤ò¸À¤Ã¤Æ¤­¤Þ¤¹¡£ ¤³¤ì¤ò²óÈò¤¹¤ë¤¿¤á¤Ë¤Ï¡¢ ¥¹¥­¥ã¥Ê¤È¤½¤ì¤Ë´ØÏ¢¤¹¤ë¤¹¤Ù¤Æ¤Î¤â¤Î¤Î̾Á°¤òÊѹ¹¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¤¹¤Ù¤Æ¤Î¥¹¥­¥ã¥Ê´Ø¿ô¡¢¥Þ¥¯¥í¡¢¤ª¤è¤Ó¥Ç¡¼¥¿¤Î̾Á°¤Ï‘yy’¤â¤·¤¯¤Ï‘YY’¤Ç»Ï¤Þ¤ê¤Þ¤¹¤Î¤Ç¡¢ ¤³¤ì¤Ï¤­¤ï¤á¤Æ´Êñ¤Ç¤¹¡£ ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤³¤È¤Ï¡¢ ̾Á°¤ÎÀÜÆ¬¼­¤òÊѹ¹¤¹¤ë¤³¤È¤À¤±¤Ç¤¹¡£ ¤³¤ì¤Ïsed¤ò»È¤Ã¤Æ´Êñ¤Ë¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢ ¤³¤³¤Ç¤Ï¤ª¤â¤·¤íȾʬ¤Ç¡¢ ¤³¤ì¤ò¹Ô¤¦flex¥¹¥­¥ã¥Ê¤ò¼¨¤·¤Þ¤·¤ç¤¦¡£20

/*
 * replace.lex : flex¤Ë¤è¤êÀ¸À®¤µ¤ì¤¿¥¹¥­¥ã¥Ê¤ä
 *               bison¤Ë¤è¤êÀ¸À®¤µ¤ì¤¿¥Ñ¡¼¥µ¤Î
 *               °ìÉô¤Î̾Á°¤òÊѹ¹¤¹¤ë´Êñ¤Ê¥Õ¥£¥ë¥¿
 */

%{
#include <stdio.h>

char lower_replace[1024];
char upper_replace[1024];

%}

%%

"yy"   fprintf(yyout,"%s",lower_replace);
"YY"   fprintf(yyout,"%s",upper_replace);

%%

int main(argc,argv)
int argc;
char **argv;
{
   if(argc < 3){
     printf("Usage %s lower UPPER\n",argv[0]);
     exit(1);
   }
   strcpy(lower_replace,argv[1]);
   strcpy(upper_replace,argv[2]);
   yylex();
   return(0);
}

¤¹¤Ù¤Æ¤Î¥¹¥­¥ã¥Ê´Ø¿ô¤Î̾Á°¤òÊѹ¹¤¹¤ë¤Ë¤Ï¡¢ ¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Ç°Ê²¼¤Î¤è¤¦¤Ë¼Â¹Ô¤¹¤ë¤À¤±¤Ç¤¹¡£

replace myscan_ MYSCAN_ < lex.yy.c > myscan.c

¤³¤ì¤Ë¤è¤ê¡¢ ¹¥¤­¤Ê¤À¤±Â¿¤¯¤Î¥¹¥­¥ã¥Ê¤ò´Þ¤á¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤Û¤È¤ó¤ÉƱ¤¸¤³¤È¤ò¡¢ ÇÓ¾Ū¥¹¥¿¡¼¥È¾õÂÖ¤ÈÊ£¿ô¤Î¥Ð¥Ã¥Õ¥¡¤ò»È¤Ã¤Æ¼Â¸½¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¤¬¡¢ ¤½¤ÎÊýË¡¤Ï¿¾¯Ê£»¨¤Ë¤Ê¤ê¤Þ¤¹¡£

Ãí¡§¤¤¤¯¤Ä¤«¤ÎFlexÆâÉô¥ë¡¼¥Á¥ó¤Ï¡¢ ¾­ÍèFlex¥é¥¤¥Ö¥é¥ê¡Ê‘-lfl’¡Ë¤ÎÃæ¤Ë°Ü¤µ¤ì¤ë¤Ç¤·¤ç¤¦¡£ ¤½¤¦¤Ê¤ë¤È¡¢ ¤³¤Î¥Æ¥¯¥Ë¥Ã¥¯¤Ïµ¡Ç½¤·¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£ ¤·¤«¤·¡¢ ¤³¤ÎÊѹ¹¤¬¹Ô¤ï¤ì¤ë»þ¤Ë¤Ï¡¢ Êѹ¹¤¹¤ëɬÍפΤ¢¤ë´Ø¿ô̾¤òÊѹ¹¤¹¤ëÊýË¡¤ò¡¢ Flex¼«¿È¤¬¥µ¥Ý¡¼¥È¤¹¤ë¤è¤¦¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£21


Footnotes

(20)

ÌõÃí¡§Flex 2.5¤Ç¤Ï¡¢ Flexµ¯Æ°»þ¤Ë‘-Pprefix’¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¤«¡¢ ¥¹¥­¥ã¥ÊÄêµÁ¥Õ¥¡¥¤¥ë¤ÎÃæ¤Ë‘%option prefix="prefix"’¤ò»ØÄꤹ¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢ ÀÜÆ¬¼­‘yy’¤òÊ̤Îʸ»úÎó¤ËÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

(21)

ÌõÃí¡§Flex 2.5¤Ç¤Ï¡¢ ‘-Pprefix’¥ª¥×¥·¥ç¥ó¤ä‘%option prefix="prefix"’¤ò»ØÄꤹ¤ë¤³¤È¤Ë¤è¤ê¡¢ ´Ø¿ô̾¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£