= Hangeul Regular Expression Library = ÀÌ ÆäÀÌÁö´Â http://hre.kldp.netÇÁ·ÎÁ§Æ®ÀÇ È¨ÆäÀÌÁöÀÔ´Ï´Ù. [[TableOfContents]] == ¼Ò°³ == '''ÇÑ±Û Á¤±ÔÇ¥Çö½Ä ¶óÀ̺귯¸®'''´Â C ÄÚµå·Î ÀÛ¼ºµÇ¾úÀ¸¸ç, ±âÁ¸ ASCII ±â¹ÝÀÇ Á¤±Ô Ç¥Çö½ÄÀÌ °¡Áö´Â "¸ÖƼ¹ÙÀÌÆ® charset" ¿¡ ´ëÇÑ À߸øµÈ 󸮿¡ ´ëÇØ, 100% ¿Ïº®ÇÏ°Ô Ã³¸®ÇÕ´Ï´Ù. ÇöÀç ÀÌ ÇÁ·ÎÁ§Æ®ÀÇ ¸ñÇ¥´Â POSIX Á¤±Ô Ç¥Çö½ÄÀ» ÁؼöÇÏ´Â ¶óÀ̺귯¸®¸¦ ¸¸µå´Â °ÍÀÌ ¸ñÇ¥ÀÌ´Ù. ÇöÀç v0.9.8 ¿¡ µé¾î¿Í¼­ Character class ¸¦ Á¦¿ÜÇÑ '''POSIX "extended regular expressions"''' ¸¦ ¸ðµÎ ó¸®ÇÒ ¼ö ÀÖÀ¸¸ç, Á¡Â÷ÀûÀ¸·Î '''POSIX "basic regular expressions"''' ¶ÇÇÑ Áö¿øÇÒ °èȹ¿¡ ÀÖ´Ù. '''ÇÑ±Û Á¤±ÔÇ¥Çö½Ä ¶óÀ̺귯¸®'''´Â v0.9 ¹öÀü´ë¿¡ µé¾î¿Í¼­ ÇѱÛÀÇ Æ¯Â¡´ë·Î Ãʼº, Áß¼º, Á¾¼ºÀ» °¢ÀÚ Ã³¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÔÀ¸·Î½á, ÇѱÛÀ» Á» ´õ À¯¿¬ÇÏ°Ô Ç¥ÇöÇÒ ¼ö ÀÖµµ·Ï ±¸ÇöÇÏ¿´À¸¸ç, ÀÌ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ¾Æ·¡ÀÇ '''"ÇÑ±Û Á¤±Ô Ç¥Çö½Ä"''' ¿¡¼­ ¼³¸íµÇ¾î ÀÖÀ¸´Ï, ÂüÁ¶Çϱ⠹ٶõ´Ù. ÇÁ·ÎÁ§Æ® ȨÆäÀÌÁö´Â http://kldp.net/projects/hre''''''¿¡ ÀÚ¸®Àâ°í ÀÖ´Ù. * ÇÁ·Î±×·¥ »óÀÇ ¹ö±×°¡ ÀÖÀ» °æ¿ì, [http://kldp.net/tracker/?group_id=497 ¹®Á¦Á¡ ÃßÀû]ÀÇ '''Bugs''' ¿¡ ±ÛÀ» ³²°Ü ÁÖ¼¼¿ä. * °³¹ßÀÚÀÇ Áö¿øÀÌ ÇÊ¿äÇÒ °æ¿ì, [http://kldp.net/tracker/?group_id=497 ¹®Á¦Á¡ ÃßÀû]ÀÇ '''Support Requests''' ¿¡ ±ÛÀ» ³²°Ü ÁÖ¼¼¿ä. * HRE¿¡ ´ëÇÑ ÆÐÄ¡¸¦ ¸¸µå½Å ºÐÀÌ °è½Ã´Ù¸é [http://kldp.net/tracker/?group_id=497 ¹®Á¦Á¡ ÃßÀû] ÀÇ '''Patchs''' ¿¡ ±ÛÀ» ³²°Ü ÁÖ¼¼¿ä. * HRE¿¡ Ãß°¡µÇ¾úÀ½ ÇÏ´Â ±â´ÉÀÌ ÀÖÀ¸½Ã´Ù¸é http://wiki.kldp.org/imgs/http.png[http://wiki.kldp.org/wiki.php/http://kldp.net/tracker/?group_id=497 ¹®Á¦Á¡ ÃßÀû]ÀÇ '''Feature Requests''' ¿¡ ±ÛÀ» ³²°Ü ÁÖ¼¼¿ä. === Ư¡ === * '''[<Ãʼº,Áß¼º,Á¾¼º>]''' ÇüÅÂÀÇ ÇÑ±Û Á¤±Ô Ç¥Çö½Ä Áö¿ø (HRE »ç¿ëÀÚ ¹®¼­ÀÇ ÇÑ±Û Á¤±Ô Ç¥Çö½ÄÀ» Âü°í) * ¸ÖƼ ¹ÙÀÌÆ® ÄÚµå (ÇѱÛ, ÀϺ»¾î, Unicode µîµî) ¿¡ ´ëÇÑ Á¤È®ÇÑ DFA Äڵ带 ÀÛ¼º * ¿Ï¼ºÇü, Á¶ÇÕÇü, Unicode (ÇöÀç UTF-8 ¸¸ Å×½ºÆ®µÊ) Á¤±Ô Ç¥Çö½Ä Áö¿ø (´Ü, ÀÎÄÚµùÀ» È¥ÇÕÇؼ­ »ç¿ëÇÑ ¹®¼­ÀÇ °æ¿ì, ã´Â °úÁ¤¿¡¼­ À߸øµÈ °á°ú¸¦ µµÃâÇÒ ¼ö Àֱ⠶§¹®¿¡, ÃßõÇÏÁö ¾ÊÀ½. ÇÏÁö¸¸ °¡´ÉÇÔ.) * v0.9.6 ¿¡ µé¾î¿À¸é¼­ ¸ðµç Ç¥Çö½Ä¿¡¼­ À¯´ÏÄÚµå »ç¿ë °¡´É. * v0.9.8 ¿¡ µé¾î¿À¸é¼­ '''POSIX "extended regular expressions"''' ¸¦ Áö¿øÇÏ°Ô µÇ¾ú´Ù. ÇÏÁö¸¸ ¾ÆÁ÷ ¾Æ·¡¿Í °°Àº Character classes ´Â Áö¿øÇÏÁö ¾Ê´Â´Ù. {{{ [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:space:] [:upper:] }}} ==== Áö¿øÇÏ´Â platform µé ==== ÇöÀç '''ÇÑ±Û Á¤±ÔÇ¥Çö½Ä ¶óÀ̺귯¸®'''¿¡¼­ ¼º°øÀûÀ¸·Î Å×½ºÆ®µÈ platform Á¤º¸´Â ¾Æ·¡¿Í °°´Ù. (´Ù¸¥ Arch ȤÀº OS, Lang ¿¡¼­ ¼º°øÀûÀ¸·Î Å×½ºÆ® ¿Ï·á¸¦ ÇϽŠºÐÀº ¾Æ·¡¿¡ Ãß°¡ÇØ ÁÖ½Ã¸é ´ë´ÜÈ÷ °¨»çÇÏ°Ú½À´Ï´Ù. ÄÚµå ¼öÁ¤ÀÌ ÀÖ¾úÀ» °æ¿ì, °³¹ßÀڵ鿡°Ô ¸ÞÀÏ·Î ÆÐÄ¡¸¦ º¸³»ÁÖ¼¼¿ä.) * '''Architecture''' * ix86 * '''Operating System''' * Linux * [http://wiki.kldp.org/wiki.php/NetBSD NetBSD] * '''Language''' * C * Python ==== ±âÁ¸ (¿µ¾î?) Á¤±Ô Ç¥Çö½ÄÀÇ ¹®Á¦Á¡ ==== ¿©±â¿¡¼­´Â °³¹ßÀÚ°¡ ¿Ö ÇÑ±Û Á¤±Ô Ç¥Çö½ÄÀ» ¸¸µé°Ô µÇ¾ú´ÂÁö¿¡ ´ëÇؼ­ ª°Ô À̾߱âÇÏ·Á°í ÇÑ´Ù. ±âÁ¸ grep À̳ª, egrep µî ´Ù¸¥ ¿©Å¸ Á¤±Ô Ç¥Çö½ÄÀ» »ç¿ëÇÒ °æ¿ì, ´ëºÎºÐÀÇ °÷¿¡¼­ ÇѱÛÀ» Á¦´ë·Î ó¸®ÇÏÁö ¸øÇÑ´Ù´Â »ç½ÇÀ» È®ÀÎÇÒ ¼ö Àִµ¥, ¿¹¸¦ µé¾î, {{{ $ grep "[°¡³ª´Ù]" }}} ¿Í °°Àº ¹®¹ýÀÌ ÀÖ´Ù°í °¡Á¤À» ÇßÀ» ¶§, ¹®¹ýÀûÀÎ Àǹ̴ ºñ·Ï "°¡", "³ª", "´Ù" Áß ¸ÅÄ¡µÇ´Â °ÍÀ» ¼±ÅÃÇÏ°íÀÚ ÇÏ´Â ÀǵµÀÌÁö¸¸, ½ÇÁ¦ Çغ¼ °æ¿ì, "¶ó" µµ ÀνÄÀÌ µÈ´Ù. ¿Ö³ÄÇϸé, grep ¿¡¼­´Â ÇѱÛÀ» Áö¿øÇÏÁö ¾Ê±â ¶§¹®¿¡, "°¡", "³ª", "´Ù" ÀÇ Ã¹¹ÙÀÌÆ®, µÎ¹ø° ¹ÙÀÌÆ®¿¡ ´ëÇÑ °¢°¢ÀÇ Ç¥ÇöÀ» ÀνÄÇϱ⠶§¹®ÀÌ´Ù. Áï ¹­¾î¼­ ÇÑ±Û ÇÑ character ·Î ÀνÄÇÏÁö ¸øÇϴµ¥, ÀÌ°ÍÀº 1 ¹ÙÀÌÆ® ÀÌ»óÀ» »ç¿ëÇÏ´Â ¸ðµç ±¹°¡¿¡¼­ ±âÁ¸ Á¤±Ô½ÄÀ» ±×´ë·Î »ç¿ëÇÒ ¼ö ¾ø´Â ÀÌÀ¯Áß ÇϳªÀÌ´Ù. (ÀϺ»¾îµµ 2 ¹ÙÀÌÆ®ÀÌÁö¸¸ ÀڽŵéÀÇ ³ë·ÂÀ¸·Î ÀÌ ¹®Á¦¸¦ ÇØ°áÇÑ µí ÇÏ´Ù.) ÀÌ·¯ÇÑ ¹®Á¦Á¡Àº ¿©·¯ Á¤±Ô½Ä ´ëºÎºÐ¿¡¼­ ¹ß»ýÇϴµ¥, "°¡*", "°¡+", "°¡?", "°¡{3,5}" µîµî ´ëºÎºÐÀÇ Á¤±Ô½Ä Ç¥ÇöÀÌ ¸ÖƼ ¹ÙÀÌÆ® Äڵ带 °¡Áö´Â ±ÛÀÚ¿¡ ´ëÇؼ­´Â ó¸®ÇÏÁö ¸øÇÏ´Â°Ô Çö½ÇÀÌ´Ù. ÀÌ·¯ÇÑ ¹®Á¦Á¡À» ÇØ°áÇϱâ À§Çؼ­ ÀÌ Á¤±Ô Ç¥Çö½Ä ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇÏ°Ô µÇ¾ú´Ù. ÇöÀç CVS ¹öÀü¿¡¼­´Â POSIX ÀÇ "Basic regular expression" ÀÌ ¿øÇÏ´Â ±â´É¿¡ ´ëÇؼ­ ¸ðµÎ ±¸ÇöµÇ¾î ÀÖÀ¸¸ç, ÀÌÁ¦ °¢ BRE, ERE ¸¦ Á¶°Ç¿¡ ¸Â°Ô ¹è¿­ÇÏ´Â °Í¸¸ ó¸®Çϸé, °ð v1.0 ÀÌ µÉ °ÍÀÌ´Ù. === ´ÜÁ¡ === * '''[<¤¡-¤¾,¤¿-¤Ó,¤¡-¤¾>]''' °ú °°Àº ÇüÅÂÀÇ ¹üÀ§¸¦ Á¤ÇÒ °æ¿ì, ÇѱÛÀÇ ¸ðµç ±ÛÀÚ 11742 ÀÚ¸¦ ó¸®ÇØ¾ß Çϱ⠶§¹®¿¡, CPU ÀÇ ¼Óµµ¿¡ µû¶ó, ÇÑ±Û ÀÎÄÚµù¿¡ µû¶ó Â÷ÀÌ°¡ ³¯ ¼ö Àִµ¥, È®Àå ¿Ï¼ºÇüÀÇ °æ¿ì, PIII 600Mhz ¿¡¼­ {{{ Testing in15... ÀԷ ǥÇö½Ä : [<¤¡-¤¾,¤¿-¤Ó,¤¡-¤¾>] ÀÔ·Â ¹®ÀÚ¿­ : aaaaa°­aa Execution times (seconds) Process Syntax : 0.23 (1150%) usr 0.02 ( 0%) sys 0.25 (1253%) wall Apply form : 0.01 (50%) usr 0.00 ( 0%) sys 0.01 (50%) wall Form State : 0.13 (650%) usr 0.00 ( 0%) sys 0.13 (651%) wall TOTAL : 0.02 0.00 0.02 }}} 0~1 ÃÊ°¡ ¼ÒÀ¯µÇ¸ç, À¯´ÏÄÚµåÀÇ °æ¿ì, {{{ Testing in16... ÀԷ ǥÇö½Ä : [<????????????] ÀÔ·Â ¹®ÀÚ¿­ : aaaaaaaaê°뷲aaaaaaaa Execution times (seconds) Process Syntax : 1.75 (8750%) usr 0.02 ( 0%) sys 1.77 (8868%) wall Apply form : 0.02 (100%) usr 0.00 ( 0%) sys 0.02 (100%) wall Form State : 0.74 (3700%) usr 0.00 ( 0%) sys 0.90 (4509%) wall TOTAL : 0.02 0.00 0.02 }}} 1~3 ÃÊ°¡ ¼ÒÈ¿µÈ´Ù. (ÃÖÀûÈ­°¡ Àý½ÇÈ÷ ÇÊ¿ä, HRE »ç¿ëÀÚ ¹®¼­ÀÇ ÇÑ±Û Á¤±Ô Ç¥Çö½ÄÀ» Âü°í) === ERE ¿Í HRE ÀÇ Â÷ÀÌÁ¡ === POSIX "extended regular expressions" (ÀÌÇÏ ERE) ¿Í HRE (ÇÑ±Û Á¤±ÔÇ¥Çö½Ä ¶óÀ̺귯¸®) ¿¡´Â ¾à°£ Â÷ÀÌ°¡ Á¸ÀçÇÑ´Ù. ERE ¿¡ ´ëÇؼ­´Â [http://www.greenend.org.uk/rjk/2002/06/regexp.html Regexp Syntax Summary]¿¡¼­ °³·«ÀûÀ¸·Î È®ÀÎÇÒ ¼ö ÀÖÀ¸¸ç, ¾Æ·¡¿¡¼­´Â ERE ¿Í HREÀÇ Â÷ÀÌÁ¡¸¸ ¾ð±ÞÇϵµ·Ï ÇÏ°Ú´Ù. * ¸ÞŸ¹®ÀÚ . ÀÇ Àǹ̰¡ Á¶±Ý ´Ù¸¨´Ï´Ù. ERE ¿¡¼­´Â ¸ÞŸ¹®ÀÚ . ÀÇ¹Ì¿Í HRE ¿¡¼­ÀÇ ¸ÞŸ¹®ÀÚ . Àǹ̴ »ç½Ç °°Àº Àǹ̸¦ °¡ÁöÁö¸¸, hre_search () ÇÔ¼öÀÇ ·çƾÀ¸·Î ÀÎÇØ, ½ÇÁ¦ »ç¿ëÀÚ°¡ ã°íÀÚ ÇÏ´Â ¹®ÀÚ¿­À» ãÀ» ¶§ ´Ù¸¥ Àǹ̸¦ °¡Áö°Ô µÈ´Ù. Áï, HRE¿¡¼­ÀÇ ¸ÞŸ¹®ÀÚ . ´Â ¿ÀÁ÷ 1 ¹ÙÀÌÆ® ¹®ÀÚ¸¦ À§ÇÑ °ÍÀÌ´Ù. ¿¹Á¦·Î½á ¼³¸íÇÏ´Â °ÍÀÌ Á» ´õ ÀÌÇØÇϱâ ÆíÇÑ °Í °°´Ù. * Á¤±Ô½Ä '''°¡.³ª''' °¡ ÀÖ´Ù°í °¡Á¤À» ÇßÀ» ¶§, ''°¡a³ª''´Â valid ÇÏÁö¸¸, ''°¡³ª³ª''´Â À¯È¿ÇÏÁö ¾Ê´Ù. * ERE ¿¡ Á¸ÀçÇÏÁö ¾Ê´Â "ÇÑ±Û ¹üÀ§ Ç¥Çö½Ä"ÀÌ Á¸ÀçÇÑ´Ù. ÀÌ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº ¾Æ·¡ÀÇ "ÇÑ±Û Á¤±Ô Ç¥Çö½Ä"¿¡ ÀÚ¼¼È÷ ¼³¸íµÇ¾î ÀÖ´Ù. * °¡{0,2}¿Í °°Àº ¹Ýº¹ Ç¥Çö½ÄÀ» ³ªÅ¸³¾ °æ¿ì, { ¿Í } »çÀÌ¿¡ ¿À°ÔµÇ´Â ¼ýÀÚ´Â ERE ¿Í´Â ´Þ¸®, 0 ~ 9 »çÀ̸¸ ¹üÀ§¸¦ Á¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¿ÜÀÇ ºÎºÐÀº ¸ðµÎ ERE ¿Í °°´Ù. ÇöÀç HRE¿¡¼­, ERE ¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¾Æ·¡¿Í °°Àº Äڵ带 hre_compile () ÇÔ¼ö¸¦ ½ÇÇàÇϱâ Àü¿¡ Ãß°¡Çؼ­ ¼³Á¤ÇØ Áà¾ß ÇÑ´Ù. {{{ HRE_OPTIONS_MODE (&option) = HRE_MODE_ERE; }}} == ¹®¼­µé == === HRE »ç¿ëÀÚ ¹®¼­ === (hre¸¦ ÀÚ½ÅÀÇ application ¿¡ È°¿ëÇÏ½Ç ºÐÀº ÀÌ ¹®¼­¸¦ ÂüÁ¶Çϼ¼¿ä.) ==== ¼³Ä¡ ¹æ¹ý ¹× Á¦°Å ==== ===== C ===== * ¼³Ä¡ (v0.9.6d ÀÌ»ó) {{{ $ tar xvvzf hre-version.tar.gz $ cd hre-version $ ./configure $ make $ make check # make install }}} (Cygwin ¿¡¼­µµ À§¿Í °°Àº ¹æ¹ýÀ¸·Î ¼³Ä¡ °¡´ÉÇÏ´Ù.) make install ½Ã configure °úÁ¤¿¡¼­ --prefix ¸¦ ÁöÁ¤ÇØ ÁÖÁö ¾ÊÀ» °æ¿ì, libhre.a ´Â /usr/local/lib ¿¡, hre.h ÆÄÀÏÀº /usr/local/include/hre/hre.h ¿¡ ¼³Ä¡µÈ´Ù. * ¼³Ä¡ (v0.9.6d ÀÌÇÏ ¹öÀü) {{{ $ tar xvzf hre-version.tar.gz $ cd hre-version $ make $ make check }}} v0.9.6d ÀÌÇÏ ¹öÀüÀ» »ç¿ëÇÒ °æ¿ì '''ÀÚ½ÅÀÇ application ¿¡ Ãß°¡ÇÏ´Â ¹æ¹ý''' Áß ''ÆÄÀÏ Ãß°¡ ¹æ¹ý (make install ¸¦ ÅëÇؼ­ /usr/local/ ¿¡ ¼³Ä¡ÇÏÁö ¾ÊÀ» °æ¿ì)'' ´ë·Î »ç¿ëÇؾßÇÑ´Ù. * Á¦°Å {{{ $ make clean $ make uninstall }}} ===== Python ===== * ¼³Ä¡ (v0.1 - Unix) 1. ¿ì¼± À§ÀÇ "C" ¾ð¾î ÆÐÅ°ÁöÀÎ HRE¸¦ ¸ÕÀú À§ÀÇ ¹æ¹ý´ë·Î ¼³Ä¡ÇØ¾ß ÇÑ´Ù. (¿Ö³ÄÇϸé, Python È®Àå ¸ðµâÀº libhre.a ¿Í hre.h ¿¡ ÀÇÁ¸Çϱ⠶§¹®ÀÌ´Ù.) ¼³Ä¡¸¦ Çß´Ù¸é, ¾Æ·¡¿Í °°Àº ¹æ¹ýÀ¸·Î python È®Àå ¸ðµâÀ» ¼³Ä¡ÇÑ´Ù. {{{ $ tar xvvzf pyhre-version.tar.gz $ cd pyhre-version $ python setup.py build $ python test.py $ python test_suite.py # python setup.py install }}} * ¼³Ä¡ (v0.1 - Windows) dist µð·ºÅ丮ÀÇ ÇØ´ç ÆÄÀ̽㠹öÀüÀÇ exe¸¦ ½ÇÇàÇÏ¸é µÈ´Ù. ¸¸¾à MinGW¸¦ ÀÌ¿ëÇؼ­ Á÷Á¢ ÄÄÆÄÀÏ ÇÏ°íÀÚ ÇÏ¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù. python setup.py build --compiler=mingw32 bdist_wininst ==== ÀÚ½ÅÀÇ application ¿¡ Ãß°¡ÇÏ´Â ¹æ¹ý ==== * ÆÄÀÏ Ãß°¡ ¹æ¹ý (make install ¸¦ ÅëÇؼ­ /usr/local/ ¿¡ ¼³Ä¡ÇÏÁö ¾ÊÀ» °æ¿ì) * make install À» ÅëÇؼ­ »ý¼ºµÈ libhre.a ÆÄÀÏ°ú hre.h ÆÄÀÏÀ» ÀÚ½ÅÀÇ application ¿¡ º¹»çÇÑ´Ù. * hre_compile () ¿Í hre_search (), hre_free () ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿©, app ³»¿¡ ±¸ÇöÇÑ´Ù. (ÆÐÅ°Áö³»¿¡ µé¾î ÀÖ´Â sample.c ÆÄÀÏÀ» ÂüÁ¶.) {{{ #include "hre.h" }}} ¿Í °°Àº hre.h ÆÄÀÏÀ» ÀÚ½ÅÀÇ application ¿¡ Ãß°¡ÇÏ¿©¾ß ÇÑ´Ù. * ÆÄÀÏ Ãß°¡ ¹æ¹ý (/usr/local/ ȤÀº make install À» ÅëÇؼ­ ½Ã½ºÅÛ µð·ºÅ丮¿¡ ¼³Ä¡ÇÑ °æ¿ì) * make install À» ÅëÇؼ­ ½Ã½ºÅÛ µð·ºÅ丮¿¡ º¹»çÇÑ´Ù. * hre_compile () ¿Í hre_search (), hre_free () ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿©, app ³»¿¡ ±¸ÇöÇÑ´Ù. (ÆÐÅ°Áö³»¿¡ µé¾î ÀÖ´Â sample.c ÆÄÀÏÀ» ÂüÁ¶.) ´Ü, ¿©±â¼­ À§¿Í ´Ù¸¥ Á¡Àº hre.h ÀÇ include °æ·Î Â÷ÀÌÀÌ´Ù. {{{ #include ; }}} `make install`À» ÅëÇؼ­ ½Ã½ºÅÛ µð·ºÅ丮¿¡ ¼³Ä¡ÇÏ¿´À¸¹Ç·Î À§¿Í °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. * Routine Ãß°¡ ¹æ¹ý Á¤±Ô Ç¥Çö½ÄÀÇ type Àº hre_t À̸ç, ºÎ°úÀûÀ¸·Î µé¾î°¥ ¼ö ÀÖ´Â ¿É¼Ç¿¡ ´ëÇÑ type Àº hre_option_t ÀÌ´Ù. (ÇöÀç hre_option_t ³»ºÎ¿¡´Â Á¤ÀÇµÈ °ÍÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù.) ÇÑ±Û Á¤±Ô Ç¥Çö½Ä ¶óÀ̺귯¸®ÀÇ »ç¿ëÀº ´ÙÀ½°ú °°Àº ´Ü°è·Î ó¸®ÇÑ´Ù. * Á¤±Ô½Ä ÄÄÆÄÀÏ ´Ü°è »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ Á¤±Ô½ÄÀ» ¹ÙÅÁÀ¸·Î »óŵµ¸¦ ±¸¼ºÇÏ¿© °á°úÀûÀ¸·Î hre_t ¿¡ DFA Å×À̺í Á¤º¸¸¦ ³Ö´Â °ÍÀ» ÀǹÌÇÑ´Ù. * ã±â ´Ü°è ã±â¸¦ ¿øÇÏ´Â ¹®ÀÚ¿­°ú ¾Õ¿¡¼­ ±¸¼ºÇÑ DFA Å×À̺íÀ» ¹ÙÅÁÀ¸·Î pattern °ú ¸Â´Â ¹®ÀÚ¿­À» ã´Â´Ù. * Release ´Ü°è DFA Å×À̺íÀ» ±¸¼ºÇÏ°Ô µÇ¸é ±âº»ÀûÀ¸·Î ¸Þ¸ð¸® ÇÒ´çÀ» ÇÏ°Ô µÇ´Âµ¥, »ç¿ëµÈ ¸Þ¸ð¸®¸¦ ¸ðµÎ release ÇÑ´Ù. ÀÚ¼¼ÇÑ ¿¹Á¦ÀÇ °æ¿ì, ÆÐÅ°Áö³»¿¡ µé¾î°¡ ÀÖ´Â ''sample.c'' ÆÄÀÏÀ» »ìÆ캸±â ¹Ù¶õ´Ù. ==== ÇÑ±Û Á¤±Ô Ç¥Çö½Ä ==== KLDP ¿¡¼­ ÇÑ±Û Á¤±Ô Ç¥Çö½ÄÀÇ ³íÀÇ°¡ ÀÖ¾ú´Âµ¥, ±× ±ÛÀº [http://geekforum.kldp.org/stories.php?story=02/03/13/3066192 °Å±â] :) ¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖÀ¸¸ç, ÇÑ±Û Á¤±Ô Ç¥Çö½Ä ¶óÀ̺귯¸®¿¡¼­ Ç¥ÇöÇÏ´Â ¹æ½ÄÀº "À͸í"ÀÇ »ç¿ëÀÚ°¡ ¾Ë·Á ÁֽŠ¹æ¹ýÀ» ¸ðÅ·ΠÇÑ´Ù. ¹°·Ð ±× ¶§ ¿Ã¸®½Å ¹æ¹ý°ú ¾à°£ Â÷ÀÌ°¡ ÀÖ´Ù. ÀÌÀü ±× ±ÛÀº ¾Æ·¡¿Í °°Àº ³»¿ëÀÌ´Ù. ÀÏ´Ü ¿µ¾î Á¤±Ô½Ä ¾²µíÀÌ ÇÑ±Û Á¤±Ô½ÄÀ» ¸¸µå´Â °ÍÀº º°·Î È¿°ú°¡ ¾ø´Ù°í º¾´Ï´Ù. ¿µ¾î³ª ÀϺ»¾î ¸ðµÎ, ±ÛÀÚ ÇϳªÇϳª°¡ ÃÖ¼Ò ´ÜÀ§ÁÒ. (¹°·Ð ÀϺ»¾î´Â 2¹ÙÀÌÆ®ÀÔ´Ï´Ù¸¸, À½Àý ÃßÃ⠺κи¸ ÀÖ´Ù¸é °á°úÀûÀ¸·Î Å« Â÷ÀÌ´Â ¾ø½À´Ï´Ù.) ÇÏÁö¸¸, ÇѱÛÀº ÇÑ ±ÛÀÚ°¡ ±âº»ÀûÀ¸·Î À½¼Ò°¡ Á¶ÇÕµÇ¾î »ý±â±â ¶§¹®¿¡, ±×°ÍÀ» µû·Î ó¸®Çϱâ Èûµì´Ï´Ù. ¼³·É ºÐ¸®´Â ÇÒ ¼ö ÀÖÁö¸¸, ±×°ÍÀ» ¸¶À½´ë·Î Á¶ÇÕÇÏ´Â °ÍÀº ¶Ç ´Ù¸¥ ¹®Á¦ÁÒ. ƯÁ¤ Ãʼº, Á¾¼º ¸î°¡Áö¿¡ ƯÁ¤ Áß¼ºÀ» Á¶ÇÕÇÑ´Ù°í ÇÒ ¶§, ±ÛÀÚ¸¸ Ä¡´Â °ÍÀ¸·Î´Â ¹®Á¦°¡ ÀÖ½À´Ï´Ù. (ÃʼºÀÌ ¤¡, ¤¤, ¤§, ¤©, ¤±, Áß¼ºÀÌ ¤¿, ¤Á, ¤À, ¤Ã, ¤Å, ¤Ä, Á¾¼ºÀÌ ¤¡, ¤¤, ¤©ÀÎ Á¶°ÇÀ» »ý°¢ÇØ º¸¼¼¿ä. À½Àý·Î´Â °ÅÀÇ ºÒ°¡´ÉÇÏÁÒ.) °³ÀÎÀûÀ¸·Î´Â Á¤±Ô½Ä ¾È¿¡ ±¸ºÐ ±âÈ£¸¦ ÀÌ¿ëÇؼ­ ÃÊ, Áß, Á¾¼ºÀ» µû·Î ºÐ¸®ÇÏ´Â °ÍÀÌ ÁÁÀ» °Í °°±º¿ä. ±×·¸´Ù¸é 1. À§ÀÇ °æ¿ì - {{{[¤¡-¤±,¤¿¤Á¤À¤Ã¤Å¤Ä,¤¡¤¤¤©]}}} 1. ÀÚÀ½ ¸ðµÎ - {{{[¤¡-¤¾]}}} 1. ¸ðÀ½ ¸ðµÎ - {{{[,¤¿-¤Ó]}}} 1. Ãʼº,Áß¼ºÀ¸·Î ÀÌ·ç¾îÁø ±Û ¸ðµÎ - {{{[¤¡-¤¾,¤¿-¤Ó]}}} 1. °¡±î³ª´Ùµû¶ó¸¶¹Ùºü»ç½Î¾ÆÀÚÂ¥Â÷īŸÆÄÇÏ - {{{[¤¡-¤¾,¤¿]}}} 1. Ãʼº,Áß¼º,Á¾¼º Áß Áß¼ºÀÌ ¤Ñ°¡ µé¾î°¡´Â ¸ðµç ±Û - {{{[¤¡-¤¾,-,¤¡-¤¾]}}} ±×¸®°í °ýÈ£ ¾È¿¡¼­µµ °°Àº ¹æ¹ýÀ¸·Î ±¸ºÐ ±âÈ£¸¦ ÀÌ¿ëÇؼ­ ÃÊ, Áß, Á¾¼ºÀ» Ç¥½ÃÇÕ´Ï´Ù. ±×·¯´Ï±î °ýÈ£ µîÀÇ ¾È¿¡¼­ ±¸ºÐ ±âÈ£¸¦ ¾²¸é ±×°ÍÀÌ ÃÊ, Áß, Á¾¼ºÀ» ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù. 1. ¤¡À¸·Î ½ÃÀÛÇÏ´Â ±ÛÀÚ´Â ¤¿~¤Ã, ¤¤À¸·Î ½ÃÀÛÇÏ´Â ±ÛÀÚ´Â ¤Ç~¤Ì - [(¤¡,¤¿-¤Ã)(¤¤,¤Ç-¤Ì)] ¾ÆÁ÷ ºÎÁ·ÇÑ Á¡ÀÌ ¸¹Àº °Í °°Àºµ¥ ¿©·¯ºÐÀº ¾î¶»°Ô »ý°¢ÇϽôÂÁö ±Ã±ÝÇϱº¿ä. ¾ÆÁ÷ '''ÇÑ±Û Á¤±Ô Ç¥Çö½Ä''' ½Ä¿¡ ´ëÇÑ Ç¥ÁؾÈ? ÀÌ ÀüÇô Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®¿¡, °³¹ßÀÚ°¡ ¿©·¯ ÀÇ°ßÀ» ÀÐÀ½À¸·Î½á Ç¥ÁؾÈ? À» ¸¸µé ¼ö ¹Û¿¡ ¾ø¾úÀ¸¸ç, ÇöÀç HRE ¿¡¼­ »ç¿ëµÇ´Â ¹æ¹ýÀº ¾Æ·¡¿Í °°´Ù. (±âº»ÀûÀΠƲ¿¡¼­´Â "À͸í" ´ÔÀÇ ÀÇ°ßÀ» µû¶ú´Ù.) {{{[<Ãʼº,Áß¼º,Á¾¼º>]}}} {{{[ ~ ]}}} ¸ÞŸ¹®ÀÚ³» ÇÑ±Û Ç¥ÇöÀº ¹Ýµå½Ã '<' ¿Í '>' »çÀÌ¿¡ ¿Í¾ß Çϸç, 'Ãʼº' ¹× 'Áß¼º', 'Á¾¼º'Àº °¢°¢ ´ÙÀ½°ú °°Àº ¹üÀ§ Ç¥ÇöÀ» ÇÒ ¼ö ÀÖ´Ù. {{{ ¿¹1) ¤¡-¤¾ ¿¹2) ¤¿-¤Á ¿¹3) ¤¡¤¤¤§¤±-¤¾ ¿¹4) ¤¡-¤§¤¾¤§ }}} ¶ÇÇÑ Ãʼº, Áß¼º, Á¾¼º Áß ¹üÀ§ Ç¥ÇöÀ» »ý·«ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¹Ýµå½Ã ',' ´Â Ç×»ó ºÙ¿©ÁÖ¾î¾ß ÇÑ´Ù. Áï ÇÑ±Û Ç¥Çö½Ä¿¡ ´ëÇÑ ÃÖ¼ÒÀÇ Ç¥Çö½ÄÀº [<,,>] °¡ µÇ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ Á¶ÇÕÀ» ÅëÇؼ­ Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°Àº ¹æ¹ýÀÌ ÀÖÀ» ¼ö ÀÖ°Ú´Ù. * {{{[<¤¡-¤§,,>]}}} ¿ÀÁ÷ ÃʼºÀÌ ¤¡ ~ ¤§ ÀÎ °Í. ¿¹) ¤¡, ¤¤, ¤§ * {{{[<¤¡¤¤¤±,¤¿-¤Æ,>]}}} ÃʼºÀÌ ¤¡ ȤÀº ¤¤, ¤± ÀÌ°í, Áß¼ºÀÌ ¤¿ ~ ¤Æ ÀÏ ¼ö ÀÖ´Â °Í. ¿¹) °¡, °è, ¸ï, °¼, µîµî * {{{[<¤¡,¤¿,¤¡-¤§>]}}} ÃʼºÀÌ ¤¡ ÀÌ°í, Áß¼ºÀÌ ¤¿, Á¾¼ºÀÌ ¤¡ ~ ¤§ ÀÎ ¹®ÀÚµé. ¿¹) °¢, °¤ µîµî * {{{[<,¤¿-¤Ó,>]}}} ¿ÀÁ÷ Áß¼ºÀÌ ¤¿ ~ ¤Ó »çÀÌÀÎ °Í. ¿¹) ¤¿, ¤Á, ¤Æ, ¤Å, ¤Ó µîµî * {{{[<¤¡,¤¿-¤Ó,¤¡-¤¾>]}}} ÃʼºÀÌ '¤¡' ÀÎ ¸ðµç ¹®ÀÚ. ¿¹) °¢, °¾, °ß µîµî * {{{[<¤¡-¤¾,¤Á,¤¡-¤¾>]}}} Áß¼ºÀÌ '¤Á' ÀÎ ¸ðµç ¹®ÀÚ. ¿¹) °½, °¾, ¾à µîµî * {{{[<¤¡-¤¾,¤¿-¤Á,¤¡>]}}} Á¾¼ºÀÌ '¤¡' ÀÎ ¸ðµç ¹®ÀÚ * {{{[<¤¡,¤¿,><¤¤,¤Á,>]}}} [ ~ ] ¸ÞŸ ¹®ÀÚ³»¿¡ µÎ ÇÑ±Û Á¤±Ô Ç¥Çö½ÄÀ» »ç¿ëÇÑ °æ¿ì. ¹°·Ð ¿µ¾î¿Í °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. * {{{[ab-cd<¤¡,¤¿,>g-h<¤¤,¤Á,>xy-z]}}} ¿µ¹®°ú ÇѱÛÀ» °°ÀÌ È¥ÇÕÇؼ­ »ç¿ëÇÑ ¿¹Á¦. * {{{[<,,¤¡-¤§>]}}} ''!!! ÀÌ·± Ç¥Çö½ÄÀº Á¸ÀçÇÒ ¼ö ¾ø´Ù. ÇÑ±Û Äڵ忡´Â Á¾¼ºÀ¸·Î ±¸¼ºµÈ ÇÑ±Û ÄÚµå ÀÚü°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. !!!'' * {{{[<,¤¿¤Á,¤¤¤§>]}}} ''!!! ÀÌ·± Ç¥Çö½Ä ¶ÇÇÑ Á¸ÀçÇÒ ¼ö ¾ø´Ù. ÇÑ±Û Äڵ忡´Â ÃʼºÀÌ ¾ø´Â ÇÑ±Û ÄÚµå´Â Á¸ÀçÇÏÁö ¾Ê´Â´Ù. !!!'' * {{{[<¤¡,,¤§>]}}} ''!!! ÀÌ·± Ç¥Çö½Ä ¶ÇÇÑ Á¸ÀçÇÒ ¼ö ¾ø´Ù. ÇÑ±Û Äڵ忡´Â Áß¼ºÀÌ ¾ø´Â ÇÑ±Û ÄÚµå´Â Á¸ÀçÇÏÁö ¾Ê´Â´Ù. !!!'' À§ÀÇ ¿¹Á¦µé¿¡¼­µµ ¾Ë¼ö ÀÖµíÀÌ, ¾î¶°ÇÑ °æ¿ì¶óµµ <,,> ÇüÅ´ À¯ÁöÇÏ°í ÀÖ´Ù´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. ±âº»ÀûÀ¸·Î 'Ãʼº' ¹× 'Áß¼º', 'Á¾¼º' ºÎºÐÀÌ ºñ¾îÀÖÀ» °æ¿ì, ÇØ´ç ¹®ÀÚ°¡ ¾ø´Â ÇѱÛÀ» °Ë»öÇÏ°íÀÚ ÇÑ´Ù. !!!ÁÖÀÇ!!! ÇÑ±Û Á¤±Ô Ç¥Çö½ÄÀ» »ç¿ëÇÒ °æ¿ì, °¡Àå ¹®Á¦½Ã µÉ ¼ö ÀÖ´Â ºÎºÐÀÌ ÇÑ±Û Á¤±Ô½ÄÀÇ compile ½Ã°£Àε¥, [<¤¡-¤¾,¤¿-¤Ó,¤¡-¤¾>] ¿Í °°Àº ¸ðµç ÇѱÛÀ» ó¸®Çϵµ·Ï ¼³Á¤ÇÑ´Ù¸é, È®Àå ¿Ï¼ºÇüÀÇ ¸ðµç ±ÛÀÚÀÎ 11742 ±ÛÀÚ¸¦ ¸ðµÎ ó¸®ÇØ¾ß Çϱ⠶§¹®¿¡, ¿µ¹®ÀÚ¸¦ ó¸®ÇÏ´Â Á¤±Ô Ç¥Çö½Ä ¶óÀ̺귯¸®¿Í ÁúÀûÀ¸·Î ½Ã°£Â÷ÀÌ°¡ ³¯ ¼ö ¹Û¿¡ ¾ø´Ù. ±×·¡¼­ »ç¿ëÀÚ´Â ÇÑ±Û Á¤±Ô Ç¥Çö½ÄÀ» »ç¿ëÇÒ ¶§ ÃÖ¼ÒÇÑÀÇ ÇÑ±Û (Áï, ÀÚ½ÅÀÌ Ã£°íÇÏ ÇÏ´Â ÇÑ±Û ¹üÀ§ÀÇ °¡Àå ÀÛÀº °Í) À» ¼±ÅÃÇÏ¿© performance ¿¡ ½Å°æÀ» ¾µ ÇÊ¿ä°¡ ÀÖ´Ù. ¸ô·Ð ÃßÈÄ ¹öÀü¿¡¼­´Â ÀÌ¿¡ ´ëÇÑ ÃÖÀûÈ­¸¦ ¼öÇàÇϵµ·Ï ÄÚµå °³¼±À» ÇÒ °ÍÀÌ´Ù. ==== »ç¿ëÀÚ ÇÔ¼ö ¼³¸í ==== ÇÑ±Û Á¤±Ô Ç¥Çö½Ä ¶óÀ̺귯¸®¿¡¼­ »ç¿ëÀÚ°¡ ÀÌ ¶óÀ̺귯¸®¸¦ »ç¿ëÇϱâ À§Çؼ­ ¾Ë¾Æ¾ß ÇÏ´Â ÇÔ¼ö´Â ¸ðµÎ 3 °³°¡ Á¸ÀçÇϴµ¥, °¢ ÇÔ¼öÀÇ ¼³¸íÀ» ÇÏ¸é ¾Æ·¡¿Í °°´Ù. * Á¤±Ô½Ä ÄÄÆÄÀÏ ´Ü°è (hre_compile () ÇÔ¼ö) {{{hre_t hre_compile (const char *re, hre_option_t option)}}} À§¿Í °°Àº ¿øÇüÀ» °¡Áö¸ç, »ç¿ëÀÚ°¡ RE ¿¡ ÀÚ½ÅÀÌ Ã£°íÀÚ ÇÏ´Â Regular Expression À» ³Ö°í, OPTION ¿¡´Â ¿øÇÏ´Â ¿É¼ÇÀ» ³Ö´Â´Ù. ¸¸¾à hre_compile () ÀÌ ½ÇÆÐÇÒ °æ¿ì, NULL À» ¹ÝȯÇÏ°Ô µÈ´Ù. ÇöÀç Á¤ÀǵǾî ÀÖ´Â OPTION ¿¡´Â ´ÙÀ½°ú °°Àº ºÎºÐÀÌ ÀÖ´Ù. (ÇöÀç v0.9.8 ¿¡¼­´Â ERE ¸¸ Áö¿øÇÏ°í ÀÖ´Ù.) * ERE ¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¾Æ·¡¿Í °°Àº OPTION À» ¼³Á¤ÇØ¾ß ÇÑ´Ù. HRE_OPTIONS_MODE (&option) = HRE_MODE_ERE; * ã±â ´Ü°è (hre_search () ÇÔ¼ö) {{{int hre_search (hre_t dfa, const char *str)}}} hre_compile () ÇÔ¼ö¸¦ ÅëÇؼ­ »ý¼ºµÈ DFA Å×À̺íÀº hre_t ¿¡ µé¾î°¡ ÀÖ°Ô µÇ¸ç, DFA ´Â hre_compile () ÇÔ¼ö°¡ ¹ÝȯÇÑ °ªÀ», STR ¿¡´Â DFA ÆÐÅÏ°ú ¸ÅÄ¡µÇ´Â ¹®ÀÚ¿­À» ã°íÀÚ ÇÏ´Â ¹®ÀÚ¿­À» ³Ö´Â´Ù. hre_search () ÇÔ¼ö°¡ DFA ÆÐÅÏ°ú ¸ÅÄ¡µÇ´Â °ÍÀ» ãÀ» °æ¿ì, ¸ÅÄ¡µÈ ¹®ÀÚ¿­ÀÇ ³¡ µÞºÎºÐÀ» °¡¸£Å°°Ô µÈ´Ù. ¿¹¸¦ µé¸é, {{{ DFA : abc STR : babcd }}} À§¿Í °°ÀÌ DFA °¡, "abc" ÀÌ°í, ¹®ÀÚ¿­ÀÌ "babcd" ÀÏ °æ¿ì, hre_search () ÇÔ¼ö´Â 4 ¸¦ ¹ÝȯÇÑ´Ù. Áï 4 ´Â STR ÀÇ 'c' ¸¦ °¡¸£Å²´Ù. ¸¸¾à match µÇ´Â ¹®ÀÚ¿­À» ãÀ» ¼ö ¾øÀ» °æ¿ì, -1 À» ¹ÝȯÇÑ´Ù. * Release ´Ü°è (hre_free () ÇÔ¼ö) {{{void hre_free (hre_t dfa)}}} hre_compile () ÇÔ¼ö¸¦ ½ÇÇàÇÏ¿© hre_t ¸¦ µ¹·Á¹ÞÀ» °æ¿ì, hre_t ¸¦ À§ÇØ ÇÒ´çµÈ ¸Þ¸ð¸®µéÀÌ Á¸ÀçÇϴµ¥, ÀÌ DFA Å×À̺íÀ» ½Ã½ºÅÛ¿¡ release ÇÑ´Ù. (free ÇÑ´Ù.) ½ÇÁ¦ À§ »ç¿ëÇÑ ¿¹Á¦¸¦ ¾ð±ÞÇÑ´Ù¸é, ¾Æ·¡¿Í °°ÀÌ ±¸¼ºÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. (Á» ´õ ÀÚ¼¼ÇÏ°í ½ÇÁúÀûÀÎ ¿¹Á¦´Â src/sample.c ¿Í test_suite/main.c ¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ´Ù.) {{{#!vim c #include <hre/hre.h> #define SUCCESS_EXIT_CODE 1 #define FATAL_EXIT_CODE (44 | 0x10000000) /* Á¤±Ô Ç¥Çö½Ä ¶óÀ̺귯¸®ÀÇ phony main ÇÔ¼ö. */ int main (argc, argv) int argc; char *argv[]; { int i; char *re = "[<¤¡,¤¿,><¤§,¤¿,>]"; char *str = "´Ù"; hre_t test; hre_option_t option; HRE_OPTIONS_MODE (&option) = HRE_MODE_ERE; /* »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ Á¤±Ô½ÄÀ» ÄÄÆÄÀÏÇÑ´Ù. */ if (!(test = hre_compile (re, option))) { printf ("Á¤±Ô Ç¥Çö½Ä¿¡ ¿À·ù°¡ Á¸ÀçÇÕ´Ï´Ù.\n"); return (FATAL_EXIT_CODE); } if (HDFA_ERRNO (test)) { fprintf (stderr, "ERROR NUMBER = %d\n", HDFA_ERRNO (test)); hre_free (test); } /* ã±â. ¹Ýȯ°ªÀÌ -1 ÀÌ ¾Æ´Ò °æ¿ì ÆÐÅÏÀ» ãÀº °ÍÀ̸ç, ¹Ýȯ°ªÀº ãÀº ÆÐÅÏÀÇ ³¡À» °¡¸£Å°°í ÀÖ´Ù. */ i = hre_search (test, str); if (i == -1) { printf ("ÆÐÅÏ°ú ¸Â´Â ¹®ÀÚ¿­À» ãÁö ¸øÇÏ¿´½À´Ï´Ù.\n"); return (FATAL_EXIT_CODE); } /* ¸Þ¸ð¸® ¸±¸®Áî */ hre_free (test); printf ("ÀÔ·ÂÇÑ Á¤±Ô Ç¥Çö½Ä : %s\n", re); printf ("ºñ±³ÇÑ ¹®ÀÚ¿­ : %s\n", str); printf ("ãÀº À§Ä¡ : %d\n", i); return (SUCCESS_EXIT_CODE); } }}} === HRE °³¹ßÀÚ ¹®¼­ === (hre¸¦ ´Ù¸¥ °÷¿¡ ÀÀ¿ë ¹× Æ÷ÆÃÀ» ÇÏ½Ç ºÐµéÀº ÀÌ ¹®¼­¸¦ ÂüÁ¶Çϼ¼¿ä.) ==== HRE CVS build ¹æ¹ý ==== CVS ¿¡ Á¸ÀçÇÏ´Â ÃÖ½ÅÀÇ ÆÐÅ°Áö¸¦ ´Ù¿î·Îµå ¹Þ¾Æ ¼³Ä¡ÇÏ´Â ºÎºÐ±îÁö ¼³¸íÀ» ÇÏ¿´´Ù. {{{ $ mkdir temporary $ cd temporary }}} ¿ì¼± ÀÓÀÇÀÇ ºó µð·ºÅ丮¸¦ »ý¼ºÇÑ´Ù. {{{ $ CVSROOT=:ext:username@cvs.kldp.net:/cvsroot/hgre }}} °³¹ßÀÚÀÏ °æ¿ì, À§¿Í °°ÀÌ ¼³Á¤ÇÏ°í, Anonymous ÀÏ °æ¿ì ¾Æ·¡¿Í °°ÀÌ ¼³Á¤ÇÑ´Ù. {{{ $ CVSROOT=:pserver:anonymous@cvs.kldp.net:/cvsroot/hre $ cvq -q login }}} Anonymous ÀÏ °æ¿ì, ·Î±×ÀÎ ÇÒ ¶§ ¾ÏÈ£¸¦ ¹¯´Âµ¥, ±×³É ¿£ÅÍÄ¡¸é µÈ´Ù. ÀÌÈĺÎÅÍ´Â ±×´ë·Î ÀÔ·ÂÇصµ ¹«¹æÇÒ °ÍÀÌ´Ù. {{{ $ cvs -q checkout -P hre $ cd hre $ aclocal $ autoheader $ automake -a }}} À§ÀÇ automake ¸¦ ½ÇÇàÇÏ´Â °úÁ¤¿¡¼­ ¿À·ù°¡ ¹ß»ýÇÒ ¼ö Àִµ¥, ¿À·ù°¡ ¹ß»ýÇÒ °æ¿ì, ´Ù½Ã Çѹø ´õ ½ÇÇàÇØ ÁÖ¸é µÈ´Ù. ¿À·ù°¡ ¹ß»ýÇÏÁö ¾ÊÀ» ¶§ ±îÁö ½ÇÇàÇÑ´Ù. {{{ $ autoconf $ ./configure $ make $ make check }}} ==== HRE ó¸® ÀýÂ÷ ==== hre ¿¡¼­ »ç¿ëÀÚ ÀÔ·ÂÀ» ¹Þ¾Æµé¿© DFA Å×À̺íÀ» ¸¸µå´Â °úÁ¤Àº ´ÙÀ½°ú °°´Ù. * »ç¿ëÀÚ ÀÔ·Â Çؼ® ´Ü°è (parser) ÀÌ ´Ü°è¿¡¼­´Â »ç¿ëÀÚ (Á¤±Ô Ç¥Çö½Ä ¶óÀ̺귯¸®¸¦ ÀÚ½ÅÀÇ app ¿¡ »ç¿ëÇÏ´Â »ç¶÷) °¡ ÀÔ·ÂÇÑ Á¤±Ô Ç¥Çö½ÄÀ» Çؼ®ÇÏ¿©, "'''Ç¥Çö½Ä'''" À» ¸¸µé¾î ³»´Âµ¥, ÀÌ·¯ÇÑ Ç¥Çö½ÄÀº debug_equation () ÇÔ¼ö¸¦ ÅëÇؼ­ Ãâ·ÂÇØ º¼ ¼ö ÀÖ´Ù. * ¸ÖƼ ¹ÙÀÌÆ® ÄÚµå ºÐ¸® ´Ü°è ÀÌ ´Ü°è¿¡¼­´Â ¾Õ¿¡¼­ ¸¸µç "'''Ç¥Çö½Ä'''" À» ¹ÙÅÁÀ¸·Î Àç±Í È£ÃâÀ» Çϸç IDENTIFIER °¡ 1 ¹ÙÀÌÆ® ÀÌ»óÀÎÁö, Áï, ÇÑ±Û ÄÚµå (Á¶ÇÕÇü, (È®Àå) ¿Ï¼ºÇü, À¯´ÏÄÚµå) ÀÎÁö¸¦ È®ÀÎÇÑ ÈÄ, ÀÌ°ÍÀº ¹ÙÀÌÆ® ¼ø¼­´ë·Î "'''Ç¥Çö½Ä'''" À» ¼öÁ¤ÇÏ°Ô µÈ´Ù. Áï ÇѱÛÀÇ DFA »ý¼º¹æ¹ý°ú ¿µ¾îÀÇ DFA »ý¼º¹æ¹ý¿¡´Â ¾à°£ÀÇ Â÷ÀÌ°¡ Á¸ÀçÇÑ´Ù. * »óŵµ (automata) »ý¼º ´Ü°è ¾Õ¿¡¼­ »ý¼ºÇÑ "'''Ç¥Çö½Ä'''"À» ¹ÙÅÁÀ¸·Î "'''»óŵµ'''"¸¦ ¸¸µå´Â ´Ü°è·Î debug_state () ÇÔ¼ö¸¦ ÅëÇؼ­ È®ÀÎÇÒ ¼ö ÀÖ´Ù. * ÇÕº´ (merging) ´Ü°è »óŵµ¿¡ ´ëÇÑ ÇÕº´À» ÇÏ¿©, Å×À̺í Å©±â¸¦ ÃÖ´ëÇÑ ÁÙÀδÙ. * DFA »ý¼º ´Ü°è À§¿¡¼­ »ý¼ºÇÑ "'''»óŵµ'''" ¸¦ ¹ÙÅÁÀ¸·Î hre_t ¿¡ ½ÇÁúÀûÀÎ DFA Å×À̺íÀ» ³Ö´Â´Ù. ==== Debugging ==== ÀÔ·ÂµÈ Á¤±Ô Ç¥Çö½ÄÀº '''b°¡*a''' ÀÌ´Ù. * »ç¿ëÀÚ ÀÔ·Â Çؼ® ´Ü°è (parser) {{{ [aso@debian /My_All/dev/hre] $ gdb hre GNU gdb 6.0 Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu"... (gdb) b hre_apply_multi_form Breakpoint 1 at 0x80498ad: file hre.c, line 616. (gdb) r Starting program: /My_All/dev/hre/hre Breakpoint 1, hre_apply_multi_form (p=0x80cc8d8, last_rhs=5) at hre.c:616 616 if (EQU_VALUE (TREE_EQU_TAB_N (p, last_rhs))) (gdb) p debug_equation (p, p.last_rhs, 0) E5 -> E0 & E4 E0 -> b E4 -> E2 & E3 E2 -> E1 * E1 -> °¡ E3 -> a $1 = void (gdb) }}} * ¸ÖƼ ¹ÙÀÌÆ® ÄÚµå ºÐ¸® ´Ü°è {{{ [aso@debian /My_All/dev/hre] $ gdb hre GNU gdb 6.0 Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu"... (gdb) b hre_form_state Breakpoint 1 at 0x804a0a0: file hre.c, line 807. (gdb) r Starting program: /My_All/dev/hre/hre Breakpoint 1, hre_form_state (p=0x80cc8d8) at hre.c:807 807 TREE_ITEM_BUF (p) = 0; (gdb) p debug_equation (p, p.last_rhs, 0) E5 -> E0 & E4 E0 -> b E4 -> E2 & E3 E2 -> E1 * E1 -> E8 | E9 E8 -> E6 & E7 E6 -> 0xb0 E7 -> 0xa1 E9 -> [zero] E3 -> a $1 = void (gdb) }}} * »óŵµ (automata) »ý¼º ´Ü°è (hre_form_state () ÇÔ¼ö ³¡ºÎºÐ¿¡¼­ È£ÃâµÉ °æ¿ì, Àüü ¸®½ºÆ®¸¦ Ãâ·ÂÇÑ´Ù.) {{{ (gdb) b hre_form_state .... .... (gdb) p debug_state (p, sp) -------+-------+-------+-------+-------+-------+-------+------ Ŭ·¡½º |±æÀÌ |*SList | SMRL |Empty |Shift |Sh.lhs |Sh.rhs -------+-------+-------+-------+-------+-------+-------+------ 3 | 1 | 14 0 | 0000 | 0 | 1 | 0xa1 | 1 2 | 1 | 11 0 | 0000 | 1 | 0 | | 1 | 1 | 4 0 | 0000 | 0 | 2 | a 0xb0 | 2 3 0 | 1 | 5 0 | 0000 | 0 | 1 | b | 1 -------+-------+-------+-------+-------+-------+-------+------ (gdb) }}} == ´Ù¿î·Îµå ¹× CVS == * [http://kldp.net/project/showfiles.php?group_id=497] ¿¡¼­ ´Ù¿î·Îµå °¡´É * [http://kldp.net/scm/?group_id=497] ¿¡¼­ CVS È®ÀÎ °¡´É ==== ¸±¸®Áî Á¤º¸ ==== ==== v0.9.8a ==== * ¼Ö¸®¸®½º¿¡¼­ ¹ß»ýÇÏ´Â ¹ö±× Á¦°Å. ==== v0.9.8 ==== * ERE Áؼö. * ERE Ç¥ÁØ Áؼö Å×½ºÆ® ·ê¼Â * ±âÁ¸ test suite ±³Ã¼. ==== v0.9.7 ==== * $ ¸ÞŸ¹®ÀÚ Ã³¸® Ãß°¡. * . ¸ÞŸ¹®ÀÚ Ã³¸® Ãß°¡. * ^ ¸ÞŸ¹®ÀÚ Ã³¸® Ãß°¡. * ![^ ~ ] ¸ÞŸ¹®ÀÚ Ã³¸® Ãß°¡. * hre_search () ³» ¹ö±× ¼öÁ¤. ==== v0.9.6f ==== * ÇÑ±Û ¹üÀ§ Ç¥Çö½Ä ¼Óµµ °³¼± ([<¤¡-¤¾,¤¿-¤Ó,¤¡-¤¾>] ÀÇ ¿Ï¼ºÇüÀº 1 ÃÊ, À¯´ÏÄÚµå´Â 3~4ÃÊ°¡ ¼ÒÀ¯.) * À¯´ÏÄÚµå ¹× ¿Ï¼ºÇü Å×À̺í Á¤º¸ ¼öÁ¤. ==== v0.9.6e ==== * libhre.a »Ó¸¸ ¾Æ´Ï¶ó, libhre.so ÆÄÀÏ »ý¼º. ==== v0.9.6d ==== * autoconf È­µÈ HRE ¹öÀüÀÌ´Ù. (make install ½Ã /usr/local/include/, /usr/local/lib/ ÇÏÀ§ µð·ºÅ丮¿¡ hre.h ÆÄÀÏ°ú libhre.a ÆÄÀÏÀÌ °¢°¢ º¹»çµÈ´Ù.) ==== v0.9.6a ==== * ÇÑ±Û ¹üÀ§ Ç¥Çö½Ä ¼Óµµ °³¼±. ==== v0.9.6 ==== * ÇÑ±Û ¹üÀ§ Ç¥Çö½Ä¿¡¼­ Áö¿øÇÏÁö ¾Ê´ø À¯´ÏÄÚµå Áö¿ø. (ÀÌÁ¦ Áö¿øÇÏ´Â ¸ðµç Ç¥Çö½Ä¿¡¼­ È®Àå ¿Ï¼ºÇü°ú, À¯´ÏÄڵ带 »ç¿ëÇÒ ¼ö ÀÖÀ½.) ==== v0.9.5a ==== * Cygwin ¿¡¼­ ÀÛ¾÷ÇÏ´Ù »ý±ä CRLF Á¦°Å. (¹ö±× ¸®Æ÷ÆÃÀ» ÇØÁֽŠÀÌÀçÈ«´Ô¿¡°Ô °¨»çµå¸³´Ï´Ù.) ==== v0.9.5 ==== * ¹ö±×°¡ ¾ø´Â ÇÑ ¸¶Áö¸· ¸±¸®Áî°¡ µÉ °ÍÀÔ´Ï´Ù. (Á¦°¡ »ý°¢ÇÑ Á¤±Ô½Ä ¸ð¾çÀº ¸ðµÎ °®Ãß¾îÁ³±â ¶§¹®¿¡ ¸¶Áö¸·À¸·Î »ý°¢ÇÑ °ÍÀÔ´Ï´Ù.) * Å×½ºÆ® ·ê¼ÂÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ´Â ±â¹Ý ¸¶·Ã * ¿¹¿Ü »óȲ¿¡ ´ëÇÑ ¿À·ù º¹±¸ ±â´É Ãß°¡ * Á¤±Ô Ç¥Çö½Ä Á¶ÇÕ¿¡¼­ ¿À·ù ¼öÁ¤ ==== v0.9 ==== * '''ÇÑ±Û Á¤±Ô Ç¥Çö½Ä ([<¤¡,¤¿,¤±>] ÇüÅÂ) Áö¿ø''' (°æÃà) * [ ] ¸ÞŸ¹®ÀÚ Áö¿ø * ( ) ¸ÞŸ¹®ÀÚ Áö¿ø * ¸î¸î ¸Þ¸ð¸® °ü·Ã ¹ö±× Á¦°Å ==== v0.8.1 ==== * À̹Îö´ÔÀÌ ¾Ë·ÁÁֽŠbug ¼öÁ¤ ¹× ´Ù¸¥ ±âŸ ¸Þ¸ð¸® leak Á¦°Å. ==== v0.8 ==== * ÀνÄÇÒ ¼ö ÀÖ´Â token ÀÇ Á¦ÇÑÀÌ ÀÖÀ½. ÀÚ¼¼ÇÑ »çÇ×Àº HRE »ç¿ëÀÚ ¹®¼­ ¸¦ ÂüÁ¶ ¹Ù¶÷. * Á¤±Ô½ÄÀÌ ¿Ï¼ºÇü, Á¶ÇÕÇü, À¯´ÏÄÚµå·Î ÀÌ·ç¾îÁö´õ¶óµµ Á¤È®ÇÑ DFA Å×ÀÌºí »ý¼º. * Á¤Àû ¶óÀ̺귯¸® ±¸¼º. (Á¤±Ô Ç¥Çö½Ä ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÑ sample ÆÄÀÏ Á¸Àç.) == ¶óÀ̼¾½º ¹× °³¹ßÀÚ Á¤º¸ == {{{ Hangeul Regular Expression Copyright (C) 2001 Weongyo Jeong & Hyejin Soang This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Contact : Weongyo Jeong - weongyo@hotmail.com Hyejin Soang - redcloak@empal.com }}} CategoryProject