Previous: Optimizing for Speed, Up: Optimizing for Speed   [Contents][Index]


6.1.1 ¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤Îºï½ü

¥¹¥­¥ã¥Ê¤«¤é¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤òºï½ü¤¹¤ë¤³¤È¤Ï¡¢ ¥¹¥­¥ã¥Ê¤ÎÀ­Ç½¤Ë¤«¤Ê¤ê¤Î±Æ¶Á¤ò¤â¤¿¤é¤·¤Þ¤¹¡£ »Äǰ¤Ê¤¬¤é¡¢ ¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤Îºï½ü¤Ï¤«¤Ê¤êÊ£»¨¤Êºî¶È¤Ë¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£ Î㤨¤Ð¡¢

%%
hurd     return(GNU_OS);
hurdle   return(JUMP);
hurdled  return(JUMPED);

¤Ç¤Ï¡¢ ¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤¬È¯À¸¤·¤Þ¤¹¡£ ¥¹¥­¥ã¥Ê¤¬‘hu’¤ò¥Þ¥Ã¥Á¤·¡¢ ¼¡¤Îʸ»ú¤¬‘r’¤Ç¤Ï¤Ê¤¤¾ì¹ç¡¢ ¥Þ¥Ã¥Á¤µ¤ì¤Ê¤«¤Ã¤¿¥Æ¥­¥¹¥È¤òECHO¤¹¤ë¥Ç¥Õ¥©¥ë¥È¤Î¥ë¡¼¥ë¤ò»È¤Ã¤Æ‘h’¤È‘u’¤ò½èÍý¤¹¤ë¤¿¤á¤Ë¡¢ ¥¹¥­¥ã¥Ê¤Ï¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤ò¹Ô¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ Ʊ¤¸¤³¤È¤¬‘d’¤È‘e’¤Ë¤Ä¤¤¤Æ¤âŬÍѤµ¤ì¤Þ¤¹¡£ ¡Ê¤³¤ì¤Ï¡¢ ²¿¤«¤Ë¥Þ¥Ã¥Á¤¹¤ë¤è¤¦¥¹¥­¥ã¥Ê¤¬ÅØÎϤò·Ñ³¤¹¤ë¤È¤¤¤¦¤³¤È¤¬¡¢ ¤â¤Ï¤ä¤Ç¤­¤Ê¤¤¤«¤é¤Ç¤¹¡£ ¤³¤Î¾ì¹ç¡¢ ¥¹¥­¥ã¥Ê¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¥ë¡¼¥ë¤òŬÍѤ·¡¢ yyext´Ä¶­¤ò¥ê¥»¥Ã¥È¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¤¬¡¢ ¤¤¤º¤ì¤â»þ´Ö¤Î¤«¤«¤ë½èÍý¤Ç¤¹¡£¡Ë

¥³¥Þ¥ó¥É¥é¥¤¥ó¡¦¥ª¥×¥·¥ç¥ó‘-b’¤ò»È¤¦¤³¤È¤Ç¡¢ ¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤òȯÀ¸¤µ¤»¤Æ¤¤¤ë¸¶°ø¤Ë´Ø¤¹¤ë¾ðÊó¤òÃΤ뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¤³¤ì¤Ë¤è¤ê¡¢ ¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤Ë´Ø¤¹¤ë¾ðÊó¤ò´Þ¤àlex.backtrack¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬À¸À®¤µ¤ì¤Þ¤¹¡£ ¾åµ­¤ÎÎã¤Î¾ì¹ç¡¢ ¤³¤Î¥Õ¥¡¥¤¥ë¤Ï°Ê²¼¤Î¤è¤¦¤Ê¾ðÊó¤ò´Þ¤ß¤Þ¤¹¡£

State #6 is non-accepting -
 associated rule line numbers:
        2       3       4
 out-transitions: [ r ]
 jam-transitions: EOF [ \000-q  s-\177 ]

State #7 is non-accepting -
 associated rule line numbers:
        2       3       4
 out-transitions: [ d ]
 jam-transitions: EOF [ \000-c  e-\177 ]

State #9 is non-accepting -
 associated rule line numbers:
        3       4
 out-transitions: [ e ]
 jam-transitions: EOF [ \000-d  f-\177 ]

Compressed tables always backtrack.  

¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¾ðÊó¤Ï¥»¥¯¥·¥ç¥ó¤Ëʬ³ä¤µ¤ì¡¢ ¸Ä¡¹¤Î¥»¥¯¥·¥ç¥ó¤Ë¤ª¤¤¤Æ¡¢ ¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤ò°ú¤­µ¯¤³¤·¤Æ¤¤¤ë£±¤Ä¤Î¾õÂ֤Τ³¤È¤¬µ­½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¸Ä¡¹¤Î¥»¥¯¥·¥ç¥ó¤ÎºÇ½é¤Î¹Ô¤«¤é¡¢ ¾õÂÖÈÖ¹æ¤òÃΤ뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£ £²¹ÔÌܤ«¤é¤Ï¡¢ µ­½Ò¥Õ¥¡¥¤¥ë¤Î²¿¹ÔÌܤ¬´ØÏ¢¤·¤Æ¤¤¤ë¤Î¤«¤òÃΤ뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£ £³¹ÔÌܤ«¤é¤Ï¡¢ ¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤òȯÀ¸¤µ¤»¤¿Ê¸»ú¤òÃΤ뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¤è¤Ã¤Æ¡¢ ºÇ½é¤Î¥Ö¥í¥Ã¥¯¤«¤é¤Ï¡¢ ʸ»ú‘r’¤Ç¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤¬È¯À¸¤·¡¢ ¤½¤ì¤Ïµ­½Ò¥Õ¥¡¥¤¥ë¤Î£²¡¤£³¡¤£´¹ÔÌܤ˴ØÏ¢¤·¤Æ¤¤¤ë¤³¤È¤ò¸«¤Æ¤È¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ºÇ¸å¤Î¹Ô¤Ï¡¢ °µ½Ì¤µ¤ì¤¿¥Æ¡¼¥Ö¥ë¤Ï¾ï¤Ë¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤òȯÀ¸¤µ¤»¤ë¤Î¤Ç¡¢ ¥Æ¡¼¥Ö¥ë°µ½Ì¤ò°ú¤­µ¯¤³¤¹¤è¤¦¤Ê¥³¥Þ¥ó¥É¥é¥¤¥ó¡¦¥ª¥×¥·¥ç¥ó¤ò»È¤¦¾ì¹ç¤Ë¤Ï¡¢ ¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤òºï½ü¤·¤è¤¦¤È¤·¤Æ»þ´Ö¤òÈñ¤ä¤¹¤Ù¤­¤Ç¤Ï¤Ê¤¤¤³¤È¤ò»×¤¤½Ð¤µ¤»¤ë¤¿¤á¤Î¤â¤Î¤Ç¤¹¡£

¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤òºï½ü¤¹¤ë¤¿¤á¤Ë¤Ï¡¢ ¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤¬´ØÍ¿¤·¤Æ¤¤¤ë¾õÂÖ¤ò¥­¥ã¥Ã¥Á¤¹¤ë¥ë¡¼¥ë¤ò²Ã¤¨¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¤³¤ì¤Ï¡¢ ¥¹¥­¥ã¥Ê¤Î¥¹¥Ô¡¼¥É¤Ë¤Ï±Æ¶Á¤òÍ¿¤¨¤Ê¤¤¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ ¥¹¥­¥ã¥Ê¤Î¥¹¥Ô¡¼¥É¤Ï¡¢ ¥ë¡¼¥ë¤Î¿ô¤äÊ£»¨¤µ¤È¤Ï¤Þ¤Ã¤¿¤¯¤È¤¤¤¨¤ë¤Û¤É̵´Ø·¸¤Ç¤¹¡£

¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤òºï½ü¤¹¤ë¤¿¤á¤Ë¥ë¡¼¥ë¤òÄɲ乤ëÊýË¡¤Ï¡¢ £²¼ïÎढ¤ê¤Þ¤¹¡£ Â裱¤ÎÊýË¡¤Ï¡¢ °Ê²¼¤Î¤è¤¦¤Ê¥ë¡¼¥ë¤òÄɲ乤뤳¤È¤Ç¤¹¡£

%%
hurd     return(GNU_OS);
hurdle   return(JUMP);
hurdled  return(JUMPED);
hu       return(OTHER);
hur      return(OTHER);
hurdl    return(OTHER);

Ê̤ÎÊýË¡¤È¤·¤Æ¡¢ ¤¹¤Ù¤Æ¤ò¥­¥ã¥Ã¥Á¤¹¤ë¤è¤¦¤Ê¥ë¡¼¥ë¤òÄɲ乤뤳¤È¤â¤Ç¤­¤Þ¤¹¡£

%%
hurd     return(GNU_OS);
hurdle   return(JUMP);
hurdled  return(JUMPED);
[a-z]+   return(OTHER);

¤³¤ÎÂ裲¤ÎÊýË¡¤òŬÍѤǤ­¤ë¾ì¹ç¤Ï¡¢ ¾ï¤Ë¤³¤ì¤ò»È¤¦¤Ù¤­¤Ç¤¹¡£ ¾åµ­¤Î¤É¤Á¤é¤«¤È‘-b’¥ª¥×¥·¥ç¥ó¤ò°ì½ï¤Ë»È¤¦¤È¡¢

Compressed tables always backtrack.  

¤È¤¤¤¦¥á¥Ã¥»¡¼¥¸¤À¤±¤¬½ÐÎϤµ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤³¤ì¤Ï¡¢ ¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¾õÂÖ¤¬Â¸ºß¤·¤Ê¤¤¤³¤È¤ò¼¨º¶¤·¤Æ¤¤¤Þ¤¹¡£

¤³¤ì¤ËÉտ魯¤ëÌäÂê¤Î£±¤Ä¤È¤·¤Æ¡¢ Ê£»¨¤Ê¥¹¥­¥ã¥Ê¤Ç¤Ï¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°ÌäÂê¤Ï¥«¥¹¥±¡¼¥É¤¹¤ë·¹¸þ¤¬¤¢¤ë¤Î¤Ç¡¢ lex.backtrackÆâ¤Î¾ðÊ󤬺®Íð¤ò¤â¤¿¤é¤¹¤â¤Î¤Ë¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£ ¤·¤«¤·¡¢ ¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥°¤Î¸¶°ø¤ÏÄ̾¡¢£³¸Ä¤Î¥ë¡¼¥ë¤Ë¤·¤Ü¤ë¤³¤È¤¬²Äǽ¤Ê¤Î¤Ç¡¢ ¥Ð¥Ã¥¯¥È¥é¥Ã¥¯¡¦¥Ç¡¼¥¿¤òÄ´¤Ù¤è¤¦¤ÈÅØÎϤ¹¤ë¤À¤±¤ÎÃÍÂǤÁ¤Ï¤¢¤ê¤Þ¤¹¡£