Next: , Previous: Flex, Up: Flex   [Contents][Index]


8.1.1 Flex¤ÈPOSIX

Flex¤Ï¡¢ ÂçÂΤΤȤ³¤íLex¤ª¤è¤ÓPOSIX¤ÎξÊý¤È¸ß´¹À­¤¬¤¢¤ê¤Þ¤¹¡£ ¾­Íè¤Ï ¡ÊFlex¡¢POSIX¤Î¤É¤Á¤é¤«¤¬ÊѤï¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡Ë¡¢ ¤µ¤é¤ËPOSIX¤È¤Î¸ß´¹À­¤ò¹â¤á¤Æ¤¤¤¯¤Ç¤·¤ç¤¦¡£ ¤·¤«¤·¡¢ Flex¡¢Lex¡¢POSIX¤Ë¤Ï¡¢ °Û¤Ê¤ëÉôʬ¤â¤¤¤¯¤Ä¤«¤¢¤ê¤Þ¤¹¡£ ¤½¤ì¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£

ÇÓ¾Ū¥¹¥¿¡¼¥È¾õÂÖ

Flex¤ÈPOSIX¤ÏÇÓ¾Ū¥¹¥¿¡¼¥È¾õÂÖ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¤¬¡¢ Lex¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£

ÄêµÁ

Lex¤ÈFlex¤Ç¤ÏÄêµÁ¤ÎŸ³«¤ÎÊýË¡¤¬°ã¤¤¤Þ¤¹¡£ Flex¡Ê¤ª¤è¤ÓPOSIX¤Î¥É¥é¥Õ¥È»ÅÍ͡ˤϡ¢ ÄêµÁ¤òŸ³«¤¹¤ë»þ¤Ë´Ý³ç¸Ì( )¤Ç°Ï¤ß¤Þ¤¹¤¬¡¢ Lex¤Ï°Ï¤ß¤Þ¤»¤ó¡£13 ¤³¤Î¤³¤È¤Ï¡¢ FlexÄêµÁ¤Ç¤Ï±é»»»Ò‘^’¡¢‘$’¡¢‘/’¡¢‘<<EOF>>’¡¢¤ª¤è¤Ó‘<start state>’¤Ï»È¤¦¤³¤È¤¬¤Ç¤­¤Ê¤¤¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Æ¤¤¤Þ¤¹¡£

¤³¤Î¤³¤È¤¬¤â¤¿¤é¤¹¼çÍפÊÌäÂê¤Î£±¤Ä¤Ë¡¢ ¥Þ¥Ã¥Á¤ÎÍ¥Àè½ç°Ì¤Ë±Æ¶Á¤òÍ¿¤¨¡¢ Flex¤ÈLex¤Î´Ö¤Ç¥¹¥­¥ã¥ó½èÍý¤ËÈù̯¤Êº¹°Û¤¬½Ð¤Æ¤¯¤ë¤È¤¤¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ ¤³¤ÎÌäÂê¤ÎÎã¤Ë¤Ä¤¤¤Æ¤Ï¡¢ ¥Ñ¥¿¡¼¥ó¡¦¥»¥¯¥·¥ç¥ó¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

input()

Flex¤ª¤è¤ÓPOSIX¤Î¥É¥é¥Õ¥È»ÅÍͤǤϡ¢ input()¤ÏºÆÄêµÁ²Äǽ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ Flex¤ÇÆþÎϤòÀ©¸æ¤¹¤ë¤¿¤á¤Ë¤Ï¡¢ input()¤òºÆÄêµÁ¤¹¤ëÂå¤ï¤ê¤Ë¡¢ YY_INPUT¤È¤¤¤¦³ÈÄ¥µ¡Ç½¤ò»È¤¤¤Þ¤¹ ¡Ê¤³¤ì¤Ï¸½ºß¤Î¤È¤³¤íPOSIX¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡Ë¡£ ¤Þ¤¿¡¢ Lex¤È¤Ï°Û¤Ê¤ê¡¢ Flex¤Îinput()¤Ïyytext¤ÎÃͤòÊѹ¹¤¹¤ë¤È¤¤¤¦ÅÀ¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£

output()

Flex¤Ïoutput()¥ë¡¼¥Á¥ó¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£ ECHO¤Î½ÐÎϤÏyyout·Ðͳ¤Ç¹Ô¤ï¤ì¤Þ¤¹¡£ ¤³¤Îyyout¤Î¥Ç¥Õ¥©¥ë¥È¤Ïstdout¤Ç¤¹¡£ ¤³¤ì¤ò»È¤¦¤è¤¦¤Ëoutput()¤ò½ñ¤¯¤³¤È¤â²Äǽ¤Ç¤¹¤¬¡¢ ¸½ºß¤ÎPOSIX¤Î¥É¥é¥Õ¥È»ÅÍͤϡ¢ output()¤¬Àµ³Î¤Ë¤Ï²¿¤ò¤¹¤Ù¤­¤Ê¤Î¤«¤ò¼¨¤·¤Æ¤¤¤Þ¤»¤ó¡£

Ratfor¥¹¥­¥ã¥Ê

Flex¡¢POSIX¤Î¤É¤Á¤é¤â¡¢ Lex¤ÎRatfor14¥¹¥­¥ã¥Ê¡¦¥ª¥×¥·¥ç¥ó¡Ê%r¡Ë¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£

yylineno

¤³¤ì¤Ï¡¢ Flex¤äPOSIX¤Ë¤Ï¸ºß¤·¤Ê¤¤¡¢ ¥É¥­¥å¥á¥ó¥È²½¤µ¤ì¤Æ¤¤¤Ê¤¤Lex¤Îµ¡Ç½¤Ç¤¹¡£15 ¤·¤«¤·¡¢ Flex¤Ç¹Ô¿ô¤ò¥«¥¦¥ó¥È¤¹¤ëµ¡Ç½¤ò¼ÂÁõ¤¹¤ë¤Î¤ÏÆñ¤·¤¯¤¢¤ê¤Þ¤»¤ó¡£ ÄêµÁÃæ¤Ë¹Ô¿ô¥«¥¦¥ó¥Èµ¡Ç½¤òÁȤ߹þ¤àÊýË¡¤ÎÎã¤Ë¤Ä¤¤¤Æ¤Ï¡¢ See Miscellaneous¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

yywrap()

¸½ºß¤Î¤È¤³¤íyywrap()¤Ï¥Þ¥¯¥í¤Ç¤¹¡£ POSIX¤Î¥É¥é¥Õ¥È»ÅÍͤǤϡ¢ ¤³¤ì¤Ï´Ø¿ô¤Ç¤¢¤ë¤Ù¤­¤È¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢ ¤ª¤½¤é¤¯¾­Íè¤ÏÊѹ¹¤µ¤ì¤ë¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£16

unput()

¸½ºß¤Î¤È¤³¤íunput()¤Ïyytext¤Èyyleng¤ÎÃͤòÇ˲õ¤·¤Þ¤¹¤¬¡¢ ¼¡¤Î¥È¡¼¥¯¥ó¤¬¥Þ¥Ã¥Á¤µ¤ì¤ë¤Þ¤Ç¤Ï¡¢ ¤³¤ì¤ÏÉÔÅö¤Ç¤¹¡£ Lex¤ÈPOSIX¤Ç¤Ï¡¢ yytext¤Èyyleng¤Ïunput()¤Î±Æ¶Á¤ò¼õ¤±¤Þ¤»¤ó¡£17

¿ôÃÍÈϰÏ

POSIX ¤Ë¤è¤ë¤È¡¢ ‘abc{1,3}’¤Ï ¡Öab¤Î¸å¤í¤Ë£±¸Ä¡¢£²¸Ä¡¢¤Þ¤¿¤Ï£³¸Ä¤Îc¤¬Â³¤¯¤â¤Î¡× ¤Ë¥Þ¥Ã¥Á¤¹¤Ù¤­¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ Flex¤Ï¤³¤Î¤È¤ª¤ê¤Ëư¤­¤Þ¤¹¤¬¡¢ Lex¤Ï¤³¤ì¤ò ¡Ö£±¸Ä¡¢£²¸Ä¡¢¤Þ¤¿¤Ï£³¸Ä¤Îabc¡× ¤È²ò¼á¤·¤Þ¤¹¡£

yytext

Flex¤Ë¤ª¤¤¤Æyytext¤ÎÀµ¤·¤¤ÄêµÁ¤Ï‘extern char *yytext’¤Ç¤¹¤¬¡¢ Lex¤Ç¤Ï‘extern char yytext[]’¤Ç¤¹¡£18 ÇÛÎó¤Ë¤è¤ë¥¢¥¯¥»¥¹ÊýË¡¤Ï¡¢ À­Ç½¤Ë¤«¤Ê¤ê¤Î±Æ¶Á¤òµÚ¤Ü¤¹¤Î¤Ç¡¢ Flex¤Ç¤Ï‘extern char *yytext’¤ò»È¤¤Â³¤±¤ë¤Ç¤·¤ç¤¦¡£

ºÇ¿·¤ÎPOSIX¥É¥é¥Õ¥È»ÅÍͤϡ¢ ‘%array’¤È‘%pointer’¤òƳÆþ¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢ ξÊý¤ÎÊýË¡¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£ ¤³¤ì¤Ï¡¢ Flex¤ÈLex¤Î¤¤¤º¤ì¤Ë¤â¤Þ¤ÀÁȤ߹þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó¡£19

¥Æ¡¼¥Ö¥ë¡¦¥µ¥¤¥º

Lex¤Ë¤Ï¥Æ¡¼¥Ö¥ë¡¦¥µ¥¤¥ºÀë¸À»Ò¡Ê%p¡¢%aÅù¡Ë¤¬¤¢¤ê¤Þ¤¹¤¬¡¢ Flex¤Ç¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£ ¸ß´¹À­¤Î¤¿¤á¤Ëǧ¼±¤Ï¤µ¤ì¤Þ¤¹¤¬¡¢ ̵»ë¤µ¤ì¤ë¤À¤±¤Ç¤¹¡£

FLEX_SCANNER

¥¹¥­¥ã¥Ê¤¬Flex¤ÈLex¤Î¤É¤Á¤é¤Ë¤è¤êÀ¸À®¤µ¤ì¤¿¤«¤Ë¤è¤Ã¤Æ¡¢ ¥³¡¼¥É¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤¿¤ê¤·¤Ê¤«¤Ã¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¡¢ FLEX_SCANNER¤¬#define¤Ë¤è¤Ã¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

¥¢¥¯¥·¥ç¥ó

Flex¤Ç¤Ï¡¢ Âç³ç¸Ì¤ÎÂÐ{…}¤ò»È¤¦¤³¤È¤Ê¤¯¡¢ ñ°ì¹Ô¤Ë¤ª¤¤¤ÆÊ£¿ô¤Îʸ¤òÃÖ¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¤³¤ì¤ËÂФ·¤ÆLex¤Ï¡¢ ¤½¤Î¤è¤¦¤Ê¹Ô¤òñ°ìʸ¤ËÀÚ¤êµÍ¤á¤Æ¤·¤Þ¤¤¤Þ¤¹¡£

¥³¥á¥ó¥È

Flex¤Ç¤Ï¥³¥á¥ó¥È¤ò‘#’¤Ç»Ï¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢ Lex¤ÈPOSIX¤Ç¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¤¿¤À¤·¡¢ ¤³¤Î·Á¼°¤Î¥³¥á¥ó¥È¤ò»È¤¦¤³¤È¤Ï¤ª´«¤á¤Ç¤­¤Þ¤»¤ó¡£

yyterminate()¡¢yyrestart()¡¢<<EOF>>¡¢YY_DECL¡¢#line »Ø¼¨»Ò

¤³¤ì¤é¤Ï¤¤¤º¤ì¤âLex¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¤·¡¢ POSIX¤Ë¤ª¤¤¤ÆÌÀ¼¨Åª¤ËÄêµÁ¤µ¤ì¤Æ¤â¤¤¤Þ¤»¤ó¡£ #line»Ø¼¨»Ò¤ÎÀâÌÀ¤Ë´Ø¤·¤Æ¤Ï¡¢ See Flex ¥³¥Þ¥ó¥É¥é¥¤¥ó¡¦¥ª¥×¥·¥ç¥ó¤ÎÍ×Ìó¡£


Footnotes

(13)

ÌõÃí¡§Flex 2.5¤Ç¤Ï¡¢ ‘-l’¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤ÆÀ¸À®¤µ¤ì¤¿¥¹¥­¥ã¥Ê¤Ï¡¢ Lex¤Î¾ì¹ç¤ÈƱ¤¸¤è¤¦¤Ë¡¢ ÄêµÁ¤òŸ³«¤¹¤ë»þ¤Ë´Ý³ç¸Ì( )¤Ç°Ï¤ß¤Þ¤»¤ó¡£

(14)

ÌõÃí¡§Rational Fortran

(15)

ÌõÃí¡§Flex 2.5¤Ç¤Ï¡¢ Flexµ¯Æ°»þ¤Ë‘-l’¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¤«¡¢ ¥¹¥­¥ã¥ÊÄêµÁ¥Õ¥¡¥¤¥ë¤ÎÃæ¤Ë‘%option yylineno’¤ò»ØÄꤹ¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢ ÊÑ¿ôyylineno¤òÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

(16)

ÌõÃí¡§Flex 2.5¤Ç¤Ï¡¢ ‘%option noyywrap’¤¬»ØÄꤵ¤ì¤Ê¤¤¸Â¤ê¡¢ yywrap()¤Ï´Ø¿ô¤Ç¤¹¡£

(17)

ÌõÃí¡§Flex 2.5¤Ç¤Ï¡¢ ‘%array’¤ò»ØÄꤹ¤ì¤Ð¡¢ unput()¤Ïyytext¤ÎÆâÍÆ¤òÇ˲õ¤·¤Þ¤»¤ó¡£

(18)

ÌõÃí¡§Flex 2.5¤Ç¤Ï¡¢ ‘%pointer’¤È‘%array’¤Ë¤è¤ê¡¢ yytext¤Î·¿¤òÁªÂò¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£ ¥Ç¥Õ¥©¥ë¥È¤Ï‘%pointer’¤Ç¤¹¡£

(19)

ÌõÃí¡§Flex 2.5¤Ï¡¢ ‘%pointer’¤È‘%array’¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£