Previous: Buffer Manipulation (Flex 2.5), Up: Multiple Input Buffers   [Contents][Index]


5.5.4 Ê£¿ô¥Ð¥Ã¥Õ¥¡¤ò»È¤¦¼ÂÎã

Ê£¿ô¤Î¥Ð¥Ã¥Õ¥¡¤ò»È¤¦¤È¤¤¤¦¥¢¥¤¥Ç¥¢¤òÍý²ò¤¹¤ë¤¿¤á¤Î¼ê½õ¤±¤È¤·¤Æ¡¢ ¥¤¥ó¥¯¥ë¡¼¥É¤¹¤Ù¤­¥Õ¥¡¥¤¥ë¤òõ¤¹C¤Î¥¹¥­¥ã¥Ê¤Î°ìÉô¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£ ¤³¤ì¤ÏC¤Î#include¤Î¤¦¤Á¡¢ °úÍÑÉä¤Ç°Ï¤Þ¤ì¤¿Ê¸»úÎó¤Î¤ß¤ò¼õ¤±ÉÕ¤±¤Þ¤¹¡£ Î㤨¤Ð¡¢

#include"file1.c"
#include "file2.c"
#include " file3.c"

¤Ï¡¢ ºÇ¸å¤ÎÎã¤Î¥Õ¥¡¥¤¥ë̾¤¬¶õÇò¤ò´Þ¤à¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢ ¤¤¤º¤ì¤âÀµÅö¤ÊÆþÎϤǤ¹¡£ ¤³¤³¤Ç¤ÎÎã¤Ï¤Þ¤¿¡¢ EOF¥ë¡¼¥ë¤È¥¹¥¿¡¼¥È¾õÂ֤λÈÍÑË¡¤ò¼Â±é¤¹¤ëÎɤ¤Îã¤Ç¤â¤¢¤ê¤Þ¤¹¡£

/*
 * eof_rules.lex : Ê£¿ô¥Ð¥Ã¥Õ¥¡¡¢EOF¥ë¡¼¥ë¡¢¥¹¥¿¡¼¥È¾õÂÖ
 *                 ¤Î»È¤¤Êý¤ÎÎã
 */

%{

#define MAX_NEST 10                   

YY_BUFFER_STATE include_stack[MAX_NEST];
int             include_count = -1;

%}

%x INCLUDE

%%

^"#include"[ \t]*\"  BEGIN(INCLUDE);
<INCLUDE>\"          BEGIN(INITIAL); 
<INCLUDE>[^\"]+ {  /* ¥¤¥ó¥¯¥ë¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤Î̾Á°¤ò³ÍÆÀ¤¹¤ë */
        if ( include_count >= MAX_NEST){
           fprintf( stderr, "Too many include files" );
           exit( 1 );
        }

        include_stack[++include_count] = YY_CURRENT_BUFFER;

        yyin = fopen( yytext, "r" );
        if ( ! yyin ){
           fprintf(stderr,"Unable to open \"%s\"\n",yytext);
           exit( 1 );
        }

        yy_switch_to_buffer(
                   yy_create_buffer(yyin,YY_BUF_SIZE));

        BEGIN(INITIAL);
      }
<INCLUDE><<EOF>>  {
        fprintf( stderr, "EOF in include" );
        yyterminate();
      }
<<EOF>> {
        if ( include_count <= 0 ){
          yyterminate();
        } else {
          yy_delete_buffer(include_stack[include_count--] );
          yy_switch_to_buffer(include_stack[include_count] );
          BEGIN(INCLUDE);
        }
      }
[a-z]+             ECHO;
.|\n               ECHO;

¥¹¥¿¡¼¥È¾õÂÖ¤ò»È¤Ã¤Æ¥Õ¥¡¥¤¥ë̾¤Î¥¹¥­¥ã¥Ê¤òÀ¸À®¤¹¤ëÊýË¡¤ä¡¢ ¥Ð¥Ã¥Õ¥¡¤ÎÀÚ¤êÂØ¤¨¤òȯÀ¸¤µ¤»¤ëÊýË¡¤ËÃíÌܤ·¤Æ¤¯¤À¤µ¤¤¡£ ¤Û¤«¤ËÃíÌܤ¹¤Ù¤­½ÅÍפÊÅÀ¤Ï¡¢ <<EOF>>¤ò¼è¤ê°·¤¦¥»¥¯¥·¥ç¥ó¡¢ ¤ª¤è¤Ó¡¢ ¸Å¤¤¥Ð¥Ã¥Õ¥¡¤ËÉüµ¢¤¹¤ëºÝ¤ËBEGIN¤ò»È¤Ã¤Æ³Î¼Â¤ËÀµ¤·¤¤¾õÂÖ¤ËÁ«°Ü¤¹¤ë¤è¤¦¤Ë¤¹¤ëÅÀ¤Ç¤¹¡£ ¤³¤ì¤òÂÕ¤ë¤È¡¢ ¾õÂÖ¤ÏINITIAL¤Ë¥ê¥»¥Ã¥È¤µ¤ì¡¢ #include¤ÎºÇ¸å¤Î‘"’¤¬ECHO¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£

Ãí¡§<<EOF>>µ¡Ç½¤Ï¼¡¤ÎÀá¤ÇÀâÌÀ¤·¤Þ¤¹¡£ <<EOF>>¤¬²¿¤Ç¤¢¤ê¡¢ ²¿¤ò¹Ô¤¦¤â¤Î¤«¤È¤¤¤¦ÅÀ¤Ë´Ø¤¹¤ë¾ÜºÙ¤ÊµÄÏÀ¤Ë¤Ä¤¤¤Æ¤Ï¡¢ See Start States¡£