Next: , Previous: Changecom, Up: Input Control   [Contents][Index]


7.4 ñ¸ì¡Êword¡Ë¤Î»ú¶ç¹½Â¤¤òÊѹ¹¤¹¤ë

¥Þ¥¯¥íchangeword¤È¤½¤ì¤Ë´ØÏ¢¤¹¤ëµ¡Ç½¤¹¤Ù¤Æ¤¬¼Â¸³Ãʳ¬¤Ë¤¢¤ê¤Þ¤¹¡£ GNU m4¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ëºÝ configure¤Ë--enable-changeword¥ª¥×¥·¥ç¥ó¤òÍ¿¤¨¤¿¤È¤­¤À¤± ¤³¤Îµ¡Ç½¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¤³¤ì¤«¤éÀè¡¢¤³¤Îµ¡Ç½¤¬Êѹ¹¤µ¤ì¤¿¤ê¡¢ºï½ü¤µ¤ì¤Æ¤·¤Þ¤¦¤³¤È¤µ¤¨¤¢¤ê¤¨¤Þ¤¹¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢¤³¤Îµ¡Ç½¤Ë°Í¸¤·¤¿»È¤¤Êý¤Ï¤·¤Ê¤¤¤Ç²¼¤µ¤¤¡£ ¤³¤Îµ¡Ç½¤Ë¤Ä¤¤¤Æ°Õ¸«¤ò´ó¤»¤Æ¤¤¤¿¤À¤¯¤È¤­¤Ï ¥Ð¥°¤òÊó¹ð¤¹¤ë¤È¤­¤ÈƱ¤¸ÊýË¡¤Ç¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£

m4¤Ë¤è¤Ã¤Æ½èÍý¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Ï¡¢¥¯¥©¡¼¥È¤µ¤ì¤¿Ê¸»úÎó¡¢ Ã±¸ì(ÀøºßŪ¤Ê¥Þ¥¯¥í̾)¡¢¤½¤·¤ÆÃ±½ã¤Ê¥È¡¼¥¯¥ó(¤½¤Î¾¤Îñ°ì¤Îʸ»ú¤¹¤Ù¤Æ) ¤Ëʬ³ä¤µ¤ì¤Þ¤¹¡£ ½é¤á¤Ëñ¸ì¤Ï¼¡¤ÎÀµµ¬É½¸½¤Ë¤è¤Ã¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

[_a-zA-Z][_a-zA-Z0-9]*

changeword¤ò»È¤¨¤Ð¤³¤ÎÀµµ¬É½¸½¤òÊѹ¹¤Ç¤­¤Þ¤¹¡£ ¤¿¤È¤¨¤Ð¿ô»ú¤¬µÍ¤Þ¤Ã¤¿¥Õ¥¡¥¤¥ë¤ËÃÖ´¹¤ò¤«¤±¤¿¤¤¾ì¹ç¤Ê¤É¡¢ m4¤Î»ú¶ç¹½À®µ¬Â§¤ò´Ë¤á¤ë¤ÈÊØÍø¤Ê¤È¤­¤â¤¢¤ë¤Ç¤·¤ç¤¦¡£

changeword(`[_a-zA-Z0-9]+')
define(1, 0)
⇒1

»ú¶ç¹½À®µ¬Â§¤ò¸·¤·¤¯¤¹¤ë¤È ÁȤ߹þ¤ß¥Þ¥¯¥í¤Î¤¦¤Á¤¤¤¯¤Ä¤«¤¬»È¤¨¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¦¤³¤È¤¬Â¿¤¤¤Î¤Ç¡¢ ´Ë¤á¤ë¾ì¹ç¤Û¤ÉÊØÍø¤Ë¤Ï¤Ê¤ê¤Þ¤»¤ó¡£ ¼¡¤ÎÎã¤Î¤è¤¦¤Ë¡¢´Ö°ã¤Ã¤ÆÁȤ߹þ¤ß¥Þ¥¯¥í¤ò¸Æ¤ó¤Ç¤·¤Þ¤¦¤Î¤òÈò¤±¤ë¤¿¤á¤Ë »È¤¦¤³¤È¤Ï¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£

define(`_indir', defn(`indir'))
changeword(`_[_a-zA-Z0-9]*')
esyscmd(foo)
_indir(`esyscmd', `ls')

m4¤Ïñ¸ì¤ò°ìʸ»ú¤º¤ÄÁȤßΩ¤Æ¤Æ¤¤¤¯¤Î¤Ç¡¢ changeword¤ËÅϤ¹¤³¤È¤¬¤Ç¤­¤ëÀµµ¬É½¸½¤Ë¤ÏÀ©¸Â¤¬¤¢¤ê¤Þ¤¹¡£ ¤½¤ì¤Ï¡¢¤â¤·»ØÄꤷ¤¿Àµµ¬É½¸½¤¬‘foo’¤ò¼õÍý¤¹¤ë¤Î¤Ê¤é ¤½¤ÎÀµµ¬É½¸½¤Ï‘f’¤È‘fo’¤â¼õÍý¤¹¤ë¤â¤Î¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤È¤¤¤¦¤â¤Î¤Ç¤¹¡£

changeword¤Ë¤Ï¡¢¤â¤¦°ì¤Äµ¡Ç½¤¬¤¢¤ê¤Þ¤¹¡£ »ØÄꤷ¤¿Àµµ¬É½¸½¤ÎÃæ¤Ë¥«¥Ã¥³\( \)¤Ç¤¯¤¯¤é¤ì¤¿Éôʬɽ¸½¤¬1¤Ä°Ê¾å¸ºß¤¹¤ë ¾ì¹ç¡¢ºÇ½é¤Î¥«¥Ã¥³¤Ç¤¯¤¯¤é¤ì¤¿Éôʬɽ¸½¤Î³°Â¦¤Ë¤¢¤ë¥Æ¥­¥¹¥È¤¬¡¢ ¥·¥ó¥Ü¥ë¤òɽ°ú¤­¤¹¤ëÁ°¤Ë¼Î¤Æ¤é¤ì¤Þ¤¹¡£

changecom(`/*', `*/')
changeword(`#\([_a-zA-Z0-9]*\)')
#esyscmd(ls)

¤³¤¦¤¹¤ë¤È¡¢m4¤Ï¤¹¤Ù¤Æ¤Î¥Þ¥¯¥í¤Î¸Æ¤Ó½Ð¤·¤ÎÀèÆ¬¤Ë ‘#’µ­¹æ¤òɬÍפȤ¹¤ë¤è¤¦¤Ë¤Ê¤ë¤Î¤Ç¡¢ m4¤Ç¥·¥§¥ë¥¹¥¯¥ê¥×¥È¤ò½èÍý¤¹¤ë¤È¤­¤Ë shift¥³¥Þ¥ó¥É¤¬m4¤Ë°û¤ß¹þ¤Þ¤ì¤Æ¤·¤Þ¤ï¤Ê¤¤¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£ ¤Þ¤¿¼ï¡¹¤Î°ìÈÌŪ¤Êñ¸ì¤ò¼º¤¦¤³¤È¤Ê¤¯¥×¥ì¡¼¥ó¥Æ¥­¥¹¥È¤ò ½èÍý¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

m4¤Î¥Þ¥¯¥íÃÖ´¹¤Ï¥Æ¥­¥¹¥È¤Ë´ð¤Å¤¤¤Æ¤¤¤Þ¤¹¤¬¡¢ TeX¤Î¤â¤Î¤Ï¥È¡¼¥¯¥ó¤Ë´ð¤Å¤¤¤Æ¤¤¤Þ¤¹¡£ changeword¤Ë¤è¤Ã¤Æ¡¢¤³¤Î°ã¤¤¤òÉ⤭Ħ¤ê¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¤¿¤È¤¨¤Ð¼¡¤ÎÎã¤ÏƱ¤¸¥¢¥¤¥Ç¥¢¤òTeX¤Èm4¤Çɽ¸½¤·¤¿¤â¤Î¤Ç¤¹¡£ ½é¤á¤ÏTeX ¥Ð¡¼¥¸¥ç¥ó¤«¤é¤Ç¤¹¡£

\def\a{\message{Hello}}
\catcode`\@=0
\catcode`\\=12
@a

¤Ä¤®¤Ëm4¥Ð¡¼¥¸¥ç¥ó¤Ç¤¹¡£

define(a, `errprint(`Hello')')
changeword(`@\([_a-zA-Z0-9]*\)')
@a

TeX¤ÎÎã¤Ë¤ª¤¤¤Æ¡¢ºÇ½é¤Î¹Ô¤Ï¥Þ¥¯¥ía¤¬‘Hello’¥á¥Ã¥»¡¼¥¸¤ò ɽ¼¨¤¹¤ë¤è¤¦¤ËÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£ 2¹ÔÌܤÏ\¤ÎÂå¤ï¤ê¤Ë@¤ò¥¨¥¹¥±¡¼¥×ʸ»ú¤È¤·¤Æ»È¤¨¤ë¤è¤¦¤Ë ÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£ 3¹ÔÌܤÏ\¤ò¥¨¥¹¥±¡¼¥×ʸ»ú¤Ç¤Ï¤Ê¤¯Ä̾ï¤Îɽ¼¨²Äǽʸ»ú¤È¤·¤Æ ÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£ 4¹ÔÌܤϥޥ¯¥ía¤ò¸Æ¤Ó½Ð¤·¤Æ¤¤¤Þ¤¹¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢¤³¤Î¥Õ¥¡¥¤¥ë¤ËÂФ·¤ÆTeX¤òÁö¤é¤»¤ë¤È ‘Hello’¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡£

m4¤ÎÎã¤òm4¤ËÍ¿¤¨¤ë¤È‘errprint(Hello)’¤òɽ¼¨¤·¤Þ¤¹¡£ ¤³¤ÎÍýͳ¤ÏTeX¤Ï¥Þ¥¯¥í¤¬ÄêµÁ¤µ¤ì¤¿¤È¤­¤Ë¥Þ¥¯¥íÄêµÁ¤Î»ú¶ç²òÀÏ ¤ò¹Ô¤¦¤Î¤ËÂФ·¡¢m4¤Ïñ½ã¤Ë¥Æ¥­¥¹¥È¤òÊݸ¤·¤Æ¤ª¤­¡¢ »ú¶ç²òÀϤϼºݤ˥ޥ¯¥í¤¬»È¤ï¤ì¤ë¤Þ¤Ç¸å²ó¤·¤Ë¤¹¤ë¤«¤é¤Ç¤¹¡£

changeword¤ò»ÈÍѤ¹¤ë¤È¡¢ m4¤Î®ÅÙ¤¬7ÇܤۤÉÃÙ¤¯¤Ê¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£