ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
Flex and Bison HowtoÀ±»ó¹è
1. ¼Ò°³¹®¼ÀÇ ¸¹Àº ºÎºÐÀº Lex, Yacc Howto¿Í Compact Guide to Lex & Yacc¸¦ Âü°íÇϰí ÀÖ½À´Ï´Ù. ¸¸¾à ´ç½ÅÀÌ ¿À·£½Ã°£µ¿¾È À¯´Ð½º ȯ°æ¿¡¼ ÇÁ·Î±×·¡¹ÖÀ» ÇØ¿Ô´Ù¸é LEX¿Í YACC¶ó´Â À̸§ÀÇ ´Ù¼Ò ½Åºñ½º·¯¿î ´À³¦À» ÁÖ´Â ÇÁ·Î±×·¥¿¡ ´ëÇØ¼ µé¾î ºÃÀ» °ÍÀÌ´Ù. Ȥ ´ç½ÅÀÌ GNU/Linux¿¡ ´õ Ä£¼÷ÇÏ´Ù¸é Flex¿Í BisonÀ̶ó´Â ÇÁ·Î±×·¥¿¡ ´ëÇØ¼µµ ¸î¹ø Á¤µµ´Â µé¾î ºÃÀ» °ÍÀÌ´Ù. Flex´Â Vern Paxon¿¡ ÀÇÇØ¼ ¸¸µé¾îÁø lex(12)ÀÇ È®Àå µµ±¸°ÝÀÎ ÇÁ·Î±×·¥À̸ç, BisonÀº YACCÀÇ GNU¹öÁ¯°ÝÀÎ ÇÁ·Î±×·¥ÀÌ´Ù. ¿©±â¿¡¼´Â Lex¿Í yacc(12)ÀÇ È°®¾îÀüÀ̶ó°í ÇÒ¼ö ÀÖ´Â Bison°ú Flex¿¡ ´ëÇØ¼ ´Ù·ê °ÍÀÌ´Ù. ¿øÁ¶°ÝÀÎ Yacc¿Í Lex¿ÍÀÇ Â÷ÀÌÁ¡ÀÌ °ÅÀÇ ¾øÀ¸¹Ç·Î ȣȯ¿¡ ¹®Á¦°¡ »ý±âÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ¾î¶µç GNUȯ°æ¿¡¼ÀÇ °³¹ßÀº GNUÅøÀº Bison°ú flex°¡ Á»´õ ÀÚ¿¬½º·´´Ù. À̵é ÇÁ·Î±×·¥Àº ´ç½ÅÀÌ ¸Å¿ì Áß¿äÇÏ°Ô »ç¿ëÇÏ´Â C ÄÄÆÄÀÏ·¯¿Í °°Àº ÇÁ·Î±×·¥ÀÇ ÀÛ¼º¿¡ Áß¿äÇÏ°Ô »ç¿ëµÇ´Âµ¥, ±× Á߿伺¿¡ ºñÇØ¼ man ÆäÀÌÁö´Â ½â ÈǸ¢ÇÏÁö ¸øÇؼ À̰͸¸ À» °¡Áö°í´Â ÀÌµé µµ±¸¸¦ »ç¿ëÇÒ ¼ö°¡ ¾ø´Ù. ¿©±â¿¡¼´Â ÀÌµé µµ±¸¸¦ ½ÇÁúÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Á»´õ ½Ç¿ëÀû °üÁ¡¿¡¼ ´Ù·ê °ÍÀÌ´Ù. 1.1. ÀÌ ¹®¼¿¡¼ ÇÒ ¼ö ¾ø´Â °Í½ÃÁß¿¡´Â ÀÌ¹Ì ´Ù¾çÇÑ Á¾·ùÀÇ Lex¿Í Yacc¸¦ ÁÖÁ¦·Î Çϰí ÀÖ´Â ÁÁÀº Ã¥µéÀÌ ³ª¿Í ÀÖ´Ù.(¿ö³«¿¡³ª Flex/Bison°ú ºñ½ÁÇϱ⠶§¹®¿¡, Àúµé Ã¥À» °¡Áö°í Flex¿Í BisonÀ» ÇнÀÇϱ⵵ ÇÑ´Ù.) ºñ·Ï ÀÌ ¹®¼°¡ Bison°ú Flex¸¦ ÇнÀÇϴµ¥ ¸¹Àº µµ¿òÀ» ÁÖ±ä ÇϰÚÁö¸¸, À̵é Ã¥º¸´Ù ´õ ³ºÀº Á¤º¸¸¦ Á¦°øÇØÁÖ±ä Èûµé °ÍÀÌ´Ù. À̵é Ã¥Àº ´ëºÎºÐÀÇ °æ¿ì Ã¥ÀÓ°¨À» °¡Áö°í ÀÛ¼ºµÇ¾ú±â ¶§¹®¿¡ ÀÌ ¹®¼¿¡¼ Á¦½ÃÇÏÁö ¸øÇÑ ´Ù¸¥ Áß¿äÇÑ Á¤º¸µéÀ» °¡Áö°í ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ¹®¼´Â Flex¿Í BisonÀ» Á»´õ ½±°Ô Á¢ÇÒ ¼ö ÀÖ±â À§ÇÑ ÀÔ¹®¼ Á¤µµ·Î Ȱ¿ëÀ» ÇØÁÖ±æ ¹Ù¶õ´Ù. ¶ÇÇÑ À̹®¼¸¦ ÀÛ¼ºÇÑ ÀúÀÚ´Â Flex/Bison Àü¹®°¡°¡ ¾Æ´Ï¸ç, °øºÎÇÏ¸é¼ ÀÌ ¹®¼¸¦ ÀÛ¼ºÇß´Ù. ÀÌÁ¡À» ¿°µÎ¿¡ µÎ°í ÀÌ ¹®¼¸¦ Àб⠹ٶõ´Ù. ´ëºÎºÐÀÇ ¿¹Á¦µéÀº µ¹¾Æ°¡´ÂÁö È®ÀÎÇϱâ À§ÇÑ °£´ÜÇÑ ¼öÁØ¿¡¼ ÀÛ¼ºµÉ °ÍÀÌ´Ù. Á»´õ Çö½Ç°¨ ÀÖ´Â ¿¹Á¦¸¦ Ãß°¡ÇÏ±æ ¿øÇÑ ´Ù¸é ¾ðÁ¦µçÁö ÀÌ ¹®¼ÀÇ ¿øº»À» ¼öÁ¤ÇÏ´Â Á¤µµ·Î Âü°¡ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 1.3. Flex¿Í BisonÇÊÀÚ°¡ ÇÑ»ìÀÌ´ø 1975³â°æ ¹«·Æ ÄÄÆÄÀÏ·¯¸¦ ÀÛ¼ºÇÏ´Â °ÍÀº »ç¶÷ÀÇ ¾Ö°£ÀåÀ» ³ìÀÌ´Â Àΰ£ÀÇ Àγ»·ÂÀÌ ¾îµð±îÁöÀΰ¡¸¦ Å×½ºÆ®ÇÏ´Â °íµµÀÇ ÂüÀ»¼º°ú ÁýÁß·ÂÀ» ÇÊ¿ä·Î ÇÏ´Â ÀÛ¾÷À̾ú´Ù. ÀÌ·¯ÇÑ ÀÏ·ÃÀÇ ÀÛ¾÷À» Á»´õ ½±°Ô ÇϱâÀ§Çؼ Johnson°ú Lesk¶õ »ç¶÷µéÀÌ lex¿Í yacc¶ó´Â µµ±¸¸¦ ¸¸µé°Ô µÇ¾ú´Ù. ÀÌ µµ±¸´Â ÄÄÆÄÀÏ·¯ÀÇ ÀÛ¼ºÀ» ¸Å¿ì °£´ÜÇÏ°Ô Ã³¸®ÇÒ ¼ö ÀÖ´Â ÈǸ¢ÇÑ ±â´ÉÀ» °¡Áö°í ÀÖ¾úÀ¸¸ç °è¼Ó ¹ßÀüÀ» ÇØ¼ 1986³â°æ Áö±Ý ¿ì¸®°¡ »ç¿ëÇÏ´Â Çö´ëÀûÀÎ ±â´ÉÀ» °¡Áø lex¿Í yacc°¡ ¹ßÇ¥µÇ°Ô µÇ¾ú´Ù. lex¿Í yacc´Â ¸Å¿ì ÈǸ¢ÇÑ µµ±¸ ¿´±â ¶§¹®¿¡ ¾Æ·¡¿Í °°Àº ´Ù¸¥ ¸¹Àº ¹öÁ¯µéÀÌ ¸¸µé¾îÁö°Ô µÇ¾ú´Ù.
¿©±â¿¡¼´Â lex¿Í yaccÀÇ ¿ø¸®¿¡ ´ëÇØ °£´ÜÇÏ°Ô ¼Ò°³Çϵµ·Ï ÇÒ °ÍÀÌ´Ù. ¿ì¸®ÀÇ ¸ñÀûÀÌ Flex¿Í BisonÀÇ »ç¿ë¹æ¹ýÀ̱ä ÇÏÁö¸¸ ¿ö³«¿¡ lex¿Í yaccÀÇ ¿ª»çÀû Àǹ̰¡ ±íÀº °ü°è·Î lex, yacc¸¦ ±âÁØÀ¸·Î Çß´Ù. ±×·¯³ª µµ±¸ÀÇ À̸§ÀÌ Æ²¸®°í ¸¸µé¾î³»´Â ÆÄÀÏÀÇ À̸§ÀÌ Æ²¸° ¿Ü¿¡´Â µ¿ÀÏÇÔÀ¸·Î ¹®Á¦µÉ°Ç ¾øÀ» °ÍÀÌ´Ù. lex´Â ¾îÈֺм®°ú scanner¸¦ À§ÇÑ CÄڵ带 »ý¼ºÇÑ´Ù. lex´Â ÀÔ·ÂµÈ ¹®ÀÚ¿¡¼ ¸ÅĪµÇ´Â ¹®ÀÚ¿ÀÇ ÆÐÅÏÀ» ÀÌ¿ëÇØ¼ ¹®ÀÚ¿À» ÅäÅ«À¸·Î º¯È¯ÇÑ´Ù. ÅäÅ«Àº ¹®¹ýÀûÀ¸·Î ´õÀÌ»ó ³ª´ ¼ö ¾ø´Â ±âº»ÀûÀÎ ¾ð¾î ¿ä¼Ò¸¦ ¸»ÇÑ´Ù. ´ÙÀ½Àº ÄÄÆÄÀÏÀÌ ÀÌ·ç¾îÁö´Â ÀϹÝÀûÀÎ °úÁ¤ÀÌ´Ù. ÅäÅ«À» ¸¸µé¾î³»´Â °úÁ¤À» ÁÖÀÇ ±í°Ô º¸±â ¹Ù¶õ´Ù. ½Éº¼ Å×À̺íÀ» ÀÌ¿ëÇØ¼ lex´Â ÀԷµǴ ¹®ÀÚ¿ÀÇ Æ¯Â¡À» °¡Á®¿Â´Ù. ½Éº¼ Å×À̺íÀº ¹®ÀÚ¿ÀÌ ¼ýÀÚÀÎÁö ´Ü¾îÀÎÁö¿Í °°Àº ŸÀÔ¿¡ ´ëÇÑ Á¤º¸¿Í ¾î¶² º¯¼ö¸¦ ÅëÇØ ¸Þ¸ð¸®¿¡ Á¢±ÙÇÒ ¼ö ÀÖÀ» °ÍÀÎÁö µîÀ» Á¤ÀÇ ÇÑ´Ù. Yacc´Â ±¸¹®ºÐ¼®°ú ÆÄ¼¸¦ À§ÇÑ CÄڵ带 »ý¼ºÇÑ´Ù. yacc´Â lex·Î ºÎÅÍ ÅäÅ«À» ¹Þ¾ÆµéÀ̰í À̰ÍÀ» ¹®¹ý·ê¿¡ ³Ö°í µ¹·Á¼ ±¸¹®Æ®¸®(syntax tree)¸¦ »ý¼ºÇÑ´Ù. ±¸¹®Æ®¸®´Â ÅäÅ«±¸Á¶Ã¼ÀÇÀÇ °èÃþÀûÀÎ ±¸Á¶¸¦ ¸¸µé°Ô µÈ´Ù. À§ÀÇ ±×¸²À» º¸¸é ¿¬»êÀÚ¿Í °ª¿¡ µû¶ó °èÃþ ±¸Á¶¸¦ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´ÙÀ½ ´Ü°è¿¡¼ Äڵ带 »ý¼º(code generator)ÇÏ°Ô µÈ´Ù. ÄÚµå »ý¼ºÀº ±íÀÌ ¿ì¼±À¸·Î ÀÌ·ç¾îÁö°Ô µÈ´Ù. ¸¸µé¾îÁö´Â ÄÚµå´Â ½Ã½ºÅÛÀÇ ¾î¼Àºí·¯°¡ ÇØ¼®°¡´ÉÇÑ ¾î¼Àºí¸®ÄÚµå ȤÀº ±â°è¾î Äڵ尡 µÈ´Ù. À§ÀÇ ±×¸²Àº lex¿Í yacc¿¡ ÀÇÇØ¼ »ç¿ëµÇ´Â ÆÄÀÏ À̸§ÀÇ ±ÔÄ¢ÀÌ´Ù. ¿¹¸¦ µé¾î BASIC ÄÄÆÄÀÏ·¯¸¦ ¸¸µç´Ù°í °¡Á¤ÇØ º¸ÀÚ. ¸ÕÀú ¿ì¸®´Â ÆÐÅϸÅĪ ±ÔÄ¢À» °¡Áø bas.i¶ó´Â lexÆÄÀÏÀ» ¸¸µé °ÍÀÌ´Ù. ±×¸®°í ¹®¹ý±ÔÄ¢À» À§Çؼ basy.y¶ó´Â yaccÆÄÀÏÀ» ¸¸µé °ÍÀÌ´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î gcc¸¦ ÀÌ¿ëÇØ¼ basc ¶ó´Â ÄÄÆÄÀÏ·¯¸¦ ¸¸µé°Ô µÈ´Ù.
¸¶Áö¸·À¸·Î gcc¿¡ ÀÇÇØ¼ lexer¿Í parserÀÌ ÄÄÆÄÀÏ µÈÈÄ ¸µÅ©µÇ¾î¼ basc½ÇÇàÆÄÀÏÀ» ¸¸µé°Ô µÈ´Ù. ÀÛ¼ºµÈ ÄÄÆÄÀÏ·¯¸¦ ½ÇÇà ½Ã۸é mainÇÔ¼ö¿¡¼ yyparse¸¦ È£ÃâÇϰí yyparse´Â ÀÚµ¿ÀûÀ¸·Î yylex¸¦ È£ÃâÇØ¼ ÅäÅ«À» ¾ò¾î³½´Ù. 2. FlexFlexÀÇ ¿øÁ¶´Â Lex·Î ÈçÈ÷ Lex generate¶ó°í Çϸç 'Lexer'¶ó°í ºÎ¸£±âµµ ÇÑ´Ù. GNU¹öÁ¯Àº ¿©±â¿¡ F(Fast)¸¦ ºÙ¿©¼ ÀÌÀü ¹öÁ¯ÀÇ Lex¿Í ±¸ºÐÇϰí ÀÖ´Ù. ÁÖ·Î ¹®ÀÚ¿À» ¹Þ¾ÆµéÀÌ°í ¹®ÀÚ¿Áß¿¡¼ ¿øÇÏ´Â Çü½ÄÀÇ ¹®ÀÚÀÇ Á¶ÇÕÀÌ ÀÖ´ÂÁö È®ÀÎÇØ¼ ¾î¶² ÇÔ¼ö(ÀÛ¾÷)¸¦ ½ÇÇà½ÃŰ´Â ÀÏÀ» ÇÑ´Ù. ´ÙÀ½Àº °£´ÜÇÑ ¿¹Á¦ÀÌ´Ù.
´ÙÀ½ ¼½¼ÇÀº %%¸¦ ±¸ºÐÀÚ·Î ÇØ¼ ½ÃÀ۵Ǵµ¥, ù¹øÂ°´Â 'stop'À̶ó´Â ¹®ÀÚ¿À» Ű·Î ½ÃÀÛÇϰí ÀÖ´Ù. À̰ÍÀº ¹®ÀÚ¿ÀÇ ÀÔ·ÂÁß¿¡ 'stop'¹®ÀÚ¿À» ´ë¸éÇÒ °æ¿ì µÚ¿¡ ÀÖ´Â printf()¸¦ ½ÇÇàÇ϶ó´Â Àǹ̸¦ °¡Áø´Ù. stop°ú ¸¶Âù°¡Áö·Î 'start'¿¡ ´ëÇØ¼µµ printf()¹®À» ½ÇÇàÇ϶ó°í ¼±¾ðµÇ¾î ÀÖ´Ù. À§ÀÇ ¹®¹ýÀº lex¿¡¼ »ç¿ëµÉ ¼ö ÀÖ´Â ¹®¹ýÀ¸·Î, ÀÌ°É ½ÇÁ¦ »ç¿ëÇϱâ À§Çؼ´Â C°¡ ÀνÄÇÒ ¼ö ÀÖ´Â ¹®¹ýÀ¸·Î º¯°æ½ÃÄÑÁà¾ß ÇÑ´Ù. ÀÌ·¯ÇÑÀÏ ¿ª½Ã lex°¡ ´ã´çÇÑ´Ù. ÀÏÁ¾ÀÇ ¼±Ã³¸®±â ¶ó°í ÇÒ ¼ö ÀÖ´Ù.
2.1. Á¤±ÔÇ¥ÇöÀ» ÀÌ¿ëÇÑ ¸ÅĪÀ̹ø ¿¹Á¦´Â ¾Æ¸¶µµ ¸Å¿ì À¯¿ëÇÏ°Ô ÀÀ¿ëÇÒ ¼ö ÀÖ´Â ¿¹Á¦·Î lex¿¡¼ÀÇ Á¤±ÔÇ¥Çö Áö¿ø¿¡ ´ëÇÑ ¹æ¹ýÀ» ´ã°í ÀÖ´Ù.
À§ÀÇ Á¤±ÔÇ¥Çö¿¡¼ "+"¿Í "*"ÀÇ Â÷À̸¦ ºÐ¸íÈ÷ ÇØµÑÇʿ䰡 ÀÖ´Ù. "+"´Â Çϳª ÀÌ»ó ¹ß°ßµÇ¾î¾ß ÇÏ´Â°É ÀǹÌÇϸç, "*"´Â 0°³ ÀÌ»ó ¹ß°ßµÇ¾î¾ß ÇÔÀ» ÀǹÌÇÑ´Ù. À§ LexÆÄÀÏÀ» example2.l·Î ÀúÀåÇÑ´ÙÀ½ ÄÄÆÄÀÏÇØ¼ ½ÇÇà½ÃÄÑ º¸ÀÚ.
Flex¸¦ Á¦´ë·Î ´Ù·ç±â À§Çؼ´Â Á¤±ÔÇ¥Çö¿¡ ´ëÇÑ ¾î´ÀÁ¤µµÀÇ Áö½ÄÀ» °¡Áö°í ÀÖ¾î¾ßÇÑ´Ù. Á¤±ÔÇ¥ÇöÀ» È¿°úÀûÀ¸·Î ÀÍÈ÷´Â °¡Àå ÁÁÀº ¹æ¹ýÀº Perl ¾ð¾î¸¦ ÀÌ¿ëÇØ¼ Á¤±ÔÇ¥Çö °ü·Ã ÇÁ·Î±×·¥À» ¸¸µé¾î º¸´Â°Ô µÉ°ÍÀÌ´Ù. ¶ÇÇÑ ½ÃÁßÀÇ ¸¹Àº Perl°ü·Ã Ã¥µéÀÌ »ó´çºÎºÐÀ» Á¤±ÔÇ¥Çö¿¡ ÇÒ¾ÖÇϰí ÀÖÀ¸¹Ç·Î À̵é Ã¥À» ±¸ÀÔÇØ¼ ÇнÀÇÏ´Â °Íµµ ÁÁÀº ¹æ¹ýÀÌ µÉ°ÍÀÌ´Ù. 2.1.1. ²À ÇÊ¿äÇÑ Á¤±ÔÇ¥ÇöÁ¤±ÔÇ¥ÇöÀº ¸Å¿ì ±¤¹üÀ§ÇÑ ÁÖÁ¦ÀÓÀ¸·Î ¿©±â¿¡¼´Â ¹Ýµå½Ã ÇÊ¿äÇÑ Á¤±ÔÇ¥Çö ±ÔÄ¢¿¡ ´ëÇØ¼¸¸ °£´ÜÈ÷ Á¤¸®Çϱâ·Î ÇϰڴÙ. Á¤±ÔÇ¥Çö¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â Á¤±ÔÇ¥ÇöÀ» Âü°íÇϱ⠹ٶõ´Ù. 표 1. ÀÚÁÖ »ç¿ëµÇ´Â ÆÐÅϸÅĪ
표 2. ÆÐÅϹÌĪÀÇ »ç¿ë ¿¹
2.2. º¹ÀâÇÑ ¹®ÀåÀÇ ÆÄ½ÌÀ̹ø¿¡´Â ¾Æ·¡¿Í °°Àº Á»´õ º¹ÀâÇÑ ¹®ÀåÀ» ÆÄ½ÌÇØ º¸µµ·Ï ÇϰڴÙ.(bind¸¦ À§ÇÑ ¼³Á¤ÆÄÀÏÀÇ ÀϺκÐÀÌ´Ù)
Flex¹®À» È®½ÇÈ÷ ÀÛ¼ºÇϱâ À§Çؼ À§ÀÇ ºÐ¼®¹®ÀÚ¿¿¡¼ »ç¿ëµÇ°í ÀÖ´Â ÅäÅ«µé¿¡ ´ëÇÑ Ä«Å×°í¸®¸¦ ¸¸µé Çʿ䰡 ÀÖ´Ù.
´ÙÀ½Àº À§ÀÇ Ä«Å×°í¸®¸¦ ¸¸Á·½ÃŰ´Â LexÆÄÀÏÀÌ´Ù. ÆÄÀϸíÀº example3.l·Î ÇÏÀÚ.
2.3. flex¿¡ ¹Ì¸® Á¤ÀÇµÈ º¯¼öµéÁö±Ý±îÁöÀÇ ³»¿ëÀ» º¸¸é ¸î°³ flex¿¡¼ Á¤ÀÇÇØ¼ »ç¿ëÇÏ´Â º¯¼ö¿Í ÇÔ¼öµéÀÌ º¸ÀÏ °ÍÀÌ´Ù. À̰͵éÀ» Ç¥·Î Á¤¸®ÇØ µÎ¾úÀ¸´Ï Âü°íÇϱ⠹ٶõ´Ù. 표 3. flex¿¡¼ ¹Ì¸® Á¤ÀÇµÈ °ªµé
2.4. Áö±Ý±îÁö ´Ù·é ³»¿ëµéÁö±Ý±îÁöÀÇ ³»¿ëµéÀ» ÅëÇÏ¿© Lex´Â ÀÓÀÇÀÇ ÀÔ·ÂÀ» ¹Þ¾Æµé¿©¼ °¢°¢ÀÇ ºÎºÐÀ» Àǹ̸¦ °áÁ¤ÇÒ ¼ö ÀÖÀ½À» ¾Ë¾Ò´Ù. ÀÌ·¯ÇÑ °ÍÀ» 'Tokenizing'¶ó°í ÇÑ´Ù. 3. BisonBisonÀÇ ¿øÁ¶°ÝÀÎ YACC¿¡ ´ëÇØ¼ ¸ÕÀú ¾Ë¾Æº¸±â·Î ÇÏÀÚ. YACC´Â Yet Another Compiler CompilerÀÇ ¾àÀÚ·Î ÄÄÆÄÀÏ·¯¸¦ »ý¼ºÀ» À§ÇÑ ÇÁ·Î±×·¥ ÀÌ´Ù. compiler-generator ȤÀº compiler-compilerÀ̶ó°í ºÎ¸£±âµµ ÇÑ´Ù. yacc´Â lex¿¡ ÀÇÇØ¼ ¾ò¾îÁø tokenµéÀÇ °ü°è¸¦ ±¸¼ºÇÏ´Â "±¸¹®ºÐ¼®±â"¸¦ »ý¼ºÇÏ´Â ÅøÀÌ´Ù. yacc°¡ ³»ºÎÀûÀ¸·Î tokenÀ» ¾ò±â À§Çؼ lex¸¦ »ç¿ëÇϴµ¥, lex¿Í yacc, flex¿Í bisonÀ» ÇÑ ¹À½À¸·Î ÇØ¼ ´Ù·ç´Â ÀÌÀ¯°¡ µÈ´Ù. lex¸¦ È£ÃâÇϱ⠶§¹®¿¡ lexÀÇ »óÀ§¿¡ À§Ä¡ÇÏ°Ô µÈ´Ù. BisonÀº ÀÌ·¯ÇÑ ÀÏÀ» ÇÏ´Â YACCÀÇ GNU¹öÁ¯À̸ç, ÇÏ´ÂÀÏ ¿É¼Çµî¿¡ ÀÖ¾î¼ °ÅÀÇ µ¿ÀÏÇÏ´Ù. Bison(yacc)´Â BNF (Backus Naur Form)À» ÀÌ¿ëÇØ¼ ÇÊ¿äÇÑ ÀÏÀ» ¼öÇàÇÑ´Ù. ÀÌ ±â¼úÀº John Backus ¿Í Peter Naur¿¡ ÀÇÇØ¼ ¸¸µé¾î Á³À¸¸ç ALGOL60 ¾ð¾î¸¦ Á¦ÀÛÇϴµ¥ »ç¿ëµÇ¾ú´Ù. BNF ¹®¹ýÀº ÀÚÀ¯·Î¿î ¹®¸Æ(context-free) ¾ð¾î¸¦ Ç¥ÇöÇϴµ¥ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. Çö´ëÀÇ ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â BNF¸¦ ÀÌ¿ëÇØ¼ ¹®¸ÆÀ» Ç¥ÇöÇϰí ÀÖ´Ù. 3.1. °£´ÜÇÑ ¿Âµµ Á¶Àý±âBisonÀÇ ¿ëµµ¸¦ È®ÀÎÇϱâ À§Çؼ °£´ÜÇÑ ¿Âµµ Á¶Àý±â¸¦ À§ÇÑ ¾ð¾î¸¦ ¸¸µå´Â °úÁ¤À» ¿¹·Î µé¾î º¸°Ú´Ù. ¿Âµµ Á¶Àý±â¸¦ ¸¸µé±â À§Çؼ´Â ´ÙÀ½°ú °°ÀÌ 3°³ÀÇ ¼¼¼ÇÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù.
À§ÀÇ ÅäÅ«À» ºÐ¸®Çϱâ À§Çؼ ´ÙÀ½°ú °°Àº lex ÆÄÀÏÀ» ÀÛ¼ºÇϰí example4.l·Î ÀúÀåÇϵµ·Ï ÇÑ´Ù.
bison ÄÚµå´Â Å©°Ô 3°¡Áö ºÎºÐÀ¸·Î ÀÌ·ç¾îÁø´Ù.
example4.tab.h¿¡ ´ëÇØ¼ ¿ì¸®°¡ ½Å°æ¾µ ÇÊ¿ä´Â ¾ø´Ù. bison¹®¹ýÆÄÀÏÀ» ±ÔÄ¢´ë·Î ÀÛ¼ºÇØÁÖ°í³ª¼ bison¸¦ µ¹¸®¸é example4.tab.h´Â ÀÚµ¿ÀûÀ¸·Î »ý¼ºµÇ±â ¶§¹®ÀÌ´Ù. ´ÙÀ½Àº À§ÀÇ ÅäÅ«ÀÇ Á¤º¸¸¦ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÀÛ¼ºµÈ bison ¹®¹ý ÆÄÀÏÀÌ´Ù.
µÎ¹øÂ° ·ê¿¡¼´Â command¿¡ ´ëÇØ¼ Á¤ÀÇÇϰí ÀÖ´Ù. ¿©±â¿¡¼´Â heat_switch¿Í target_setµÎ°³ÀÇ ¸í·É¸¸À» Á¤ÀÇÇÑ´Ù. ÀÌµé ¸í·ÉÀ» ¼±¾ðÇϴµ¥ '|'ÀÌ »ç¿ëµÇ°í Àִµ¥, ÀÌ´Â command°¡ heat_switch ¶Ç´Â target_set¸¦ ±¸¼º¿ä¼Ò·Î °¡Áö°í ÀÖÀ½À» ÀǹÌÇÑ´Ù. heat_switch´Â HEAT token¿¡ ´ëÇÑ Ã³¸®¸¦ ´ã´çÇÏ´Â ±¸¼º¿ä¼Ò·Î 'heat'¿Í state ÅäÅ«ÀÌ ¿Ã °æ¿ì À̸¦ ½ÇÇàÇϵµ·Ï Çß´Ù. ÀÌ´Â È÷Å͸¦ ۰í ÄÓ¶§ 2°³ÀÇ ÅäÅ«À¸·Î ÀÌ·ç¾îÁö±â ¶§¹®ÀÌ´Ù. ¿Âµµ¸¦ ¼³Á¤ÇÏ´Â ¸í·ÉÀº 'target'°ú targetÀ¸·Î ÁöÁ¤ÇÒ '°´Ã¼', ±×¸®°í '°ª'ÀÇ 3°³ÀÇ °´Ã¼·Î ÀÌ·ç¾îÁø´Ù. À̸¦ À§Çؼ 3°³ÀÇ ÅäÅ«ÀÌ ¸¸Á·ÇÒ ¶§ target_setÀÌ ½ÇÇàµÇµµ·Ï ·êÀ» ¸¸µé¾ú´Ù. 3.1.1. ¿ÏÀüÇÑ Bison ÆÄÀÏ´ÙÀ½Àº ÀÌ»óÀÇ ¸ðµç ³»¿ëÀ» Á¾ÇÕÇÑ Bison ÆÄÀÏÀÌ´Ù.
yywrap()´Â ´Ù¸¥ ÆÄÀÏ·Î ºÎÅÍ °è¼ÓÀûÀ¸·Î Àб⸦ ¼öÇàÇϰíÀÚ ÇÒ¶§ »ç¿ëÇÑ´Ù. mainÇÔ¼ö°¡ È£ÃâµÇ¾ú´Ù. mainÇÔ¼ö´Â ´ÜÁö yyparse¸¸À» È£ÃâÇÏÁö¸¸ ¿ì¸®°¡ Áö±Ý±îÁö ¸¸µé¾ú´ø ·êÀ» ÀÌ¿ëÇØ¼ ÀԷµǴ ¹®ÀÚ¿À» ÀÌ¿ëÇØ¼ ÀÛ¾÷À» ¼öÇàÇÑ´Ù. ¸¶Áö¸·À¸·Î ¿ì¸®°¡ »ç¿ëÇÏ°ÔµÉ ÅäÅ«À» ¼±¾ðÇÏ¿´´Ù. Áö±Ý±îÁöÀÇ ¸ðµç³»¿ëÀº yacc ¸¦ -d ¿É¼ÇÀ» ÁÖ°í ½ÇÇàÇÔÀ¸·Î½á, y.tab.h¿¡ ¾²¿©Áö°Ô µÈ´Ù. ÄÄÆÄÀÏÀº ¾Æ·¡¿Í °°ÀÌ ÀÌ·ç¾îÁø´Ù.
3.2. ¿ÂµµÁ¶Àý ÇÁ·Î±×·¥ÀÇ ¾÷±×·¹À̵å¾î¶µç ¿ì¸®´Â ¹®ÀåÀ» ÆÄ½ÌÇØ¼ ¿øÇÏ´Â ·çƾÀ» ½ÇÇà°¡´ÉÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾î ³Â´Ù. ±×·¯³ª Á»´õ ¿Ïº®ÇÏ°Ô ÀÛµ¿Çϱâ À§Çؼ´Â ´ÜÁö "¹«¾ùÀ» ÆÄ½Ì Çß´Ù"°¡ ¾Æ´Ñ "ÆÄ½ÌÇÑ Á¤º¸°¡ ¹«¾ù"ÀÌ´Ù¶ó´Â °ªÀ» ¾ò¾î ¿Ã ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¿¹¸¦ µéÀÚ¸é 'heat'´Â ¿ÂµµÁ¶Àý±â¸¦ ÄѰųª ²ô´Âµ¥, À̸¦ À§Çؼ´Â heat ÅäÅ« ´ÙÀ½ÀÇ 'on', 'off' ÅäÅ«À» °¡Á®¿Ã ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¶ÇÇÑ ¿Âµµ ¼³Á¤À» À§ÇÑ target temperatureÀÇ °æ¿ì ¿Âµµ °ªÀ» Àоî¿Ã ¼ö ÀÖ¾î¾ß ÇÑ´Ù. Flex´Â ¸ÅĪµÈ ´Ü¾îÀÇ ¹®ÀÚ¿À» 'yytex'¶ó´Â º¯¼ö¿¡ ÀúÀåÇÑ´Ù. ¶ÇÇÑ 'yylval'¿¡ ¸®ÅϰªÀ» µÇµ¹·ÁÁÙ ¼öµµ ÀÖ´Ù. À̸¦ ÀÌ¿ëÇÏ¸é ÆÐÅϸÅĪÀÇ °á°ú¸¦ ³Ñ±æ ¼ö°¡ ÀÖ´Ù. ¾Æ·¡¿Í °°ÀÌ ÀÛ¼ºÇϰí example5.l ·Î ÀúÀåÇÏÀÚ.
ÀÌÁ¦ Bison Äڵ忡¼ yylvalÀ» ÅëÇØ¼ ³Ñ¾î¿Â °ªÀ» ÀÌ¿ëÇØ¼ ¾î¶² ÀÛ¾÷À» °¡´ÉÇϵµ·Ï ÄÚµùÇØ Áֱ⸸ ÇÏ¸é µÈ´Ù. ´Ù¸¥ ºÎºÐÀº ¸ðµÎ µ¿ÀÏÇÏ´Ï ¾Æ·¡ÀÇ ºÎºÐ¸¸ ¼öÁ¤ÇÏ¸é µÈ´Ù.
tatget_set ¿ª½Ã µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î ¼öÁ¤Çß´Ù. ¿Âµµ °ªÀº NUMBER ÅäÅ«°ªÀ¸·Î ³Ñ¾î¿ÈÀ¸·Î $3¸¦ ÀÌ¿ëÇØ¼ ¹Þ¾Æ¼ À̸¦ Ãâ·ÂÇß´Ù. ÄÄÆÄÀÏ Å×½ºÆ®¸¦ ÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
3.3. °è»ê±â¸¦ ¸¸µé¾î º¸ÀÚÀ̹ø¿¡´Â °è»ê±â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ. ¾Õ¼ÀÇ ¿¹Á¦Ã³·³ flex¿Í bisonÀÇ ÀÛµ¿¹æ½Äµµ ÇÔ²² ¼³¸íÇϵµ·Ï ÇϰڴÙ. °è»ê±â ÇÁ·Î±×·¥Àº »çÄ¢¿¬»êÀ» Çϴµ¥, "()"µµ 󸮸¦ ÇÒ °ÍÀÌ´Ù. ¶ÇÇÑ °ªÀ» º¯¼ö¿¡ ÀúÀåÇÏ´Â ±â´É±îÁö¸¦ Ãß°¡ÇÒ °ÍÀÌ´Ù. ¾Æ½Ã°ÚÁö¸¸ °è»ê±â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÔ¿¡ ÀÖ¾î¼ ()󸮸¦ ÇÑ´Ù´Â°Ô ±×¸® °£´ÜÇÑ°Ô ¾Æ´Ï¶ó´Â°É ÀÌÇØ ÇÒ°ÍÀÌ´Ù. ±×·¯³ª ÀÌ ¿¹Á¦¸¦ ÅëÇØ¼ flex¿Í bisonÀ» ¾´´Ù¸é ±×¸® ¾î·ÆÁö ¾Ê°Ô ÀÛ¼º °¡´ÉÇÏ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÕÀ» °ÍÀÌ´Ù. °è»ê±â ÇÁ·Î±×·¥¿¡¼´Â ÅäÅ«À¸·Î INTEGER¿Í VARIABLE¸¦ ¼±¾ðÇÑ´Ù. INTEGERÀº ÇÇ¿¬»êÀÚ¿¡ ´ëÇÑ ÅäÅ«À» ¸¸³µÀ» ¶§ »ç¿ëÇÏ´Â ÅäÅ«°ªÀ̸ç, VARIABLE´Â º¯¼ö¸¦ ¸¸³µÀ» ¶§ »ç¿ëÇÒ ÅäÅ« °ªÀÌ´Ù. ¿©·¯ºÐÀÌ bison¸¦ ½ÇÇà ½ÃŲ´Ù¸é cal.tab.h ÆÄÀÏÀ» º¼ ¼ö ÀÖÀ» °Çµ¥, ´ÙÀ½°ú °°Àº Äڵ带 Æ÷ÇÔÇϰí ÀÖÀ» °ÍÀÌ´Ù.
ÀÌÁ¦ ¿¬»êÀÚµé°ú ()¿¡ ´ëÇÑ ÅäÅ«À» ¾ò¾î¿Í¾ß ÇÑ´Ù.
bison ¹®¹ý¿¡¼ÀÇ ÇÙ½ÉÀº °¢ ¿¬»êÀÚ¿¡ ¸Âµµ·Ï ¿¬»êÀ» ½ÇÇàÇϰí, °ýÈ£¸¦ ¸¸³µÀ» °æ¿ì ¿ì¼± ¿¬»êÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù.
()¸¦ ¸¸³µÀ» °æ¿ì ÀÌ ¿¬»êÀº ¿ì¼±ÀûÀ¸·Î ÀÌ·ç¾î Á®¾ß ÇÑ´Ù. ±×·¯¹Ç·Î ()¾È¿¡ ÀÖ´Â ¿¬»êµé ÀÚü¸¦ ½ºÅÃÀÇ °¡Àå ¾Æ·¡·Î ¹Ð¾î ³Ö¾î¾ß ÇÒ °ÍÀÌ´Ù. À̸¦ À§Çؼ '(' expr ')' {$$ = $2;}°¡ »ç¿ëÇϰí ÀÖ´Ù. ´ÙÀ½Àº flex¿Í bisonÀÇ ¿ÏÀüÇÑ ÄÚµå·Î ÆÄÀÏÀ̸§Àº cal.l, cal.y·Î Çϸç, À§¿¡¼ ºüÁø ¸î°¡Áö ³»¿ëµéÀº ÁÖ¼®À» ÅëÇØ¼ ¼³¸íÇϵµ·Ï ÇϰڴÙ. ¿¹Á¦ : cal.l
Cache Error |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|