µ±Ç°Î»ÖãºÊ×Ò³ > µÚÁùÕ Öмä´úÂëÉú³É
µÚÁùÕ Öмä´úÂëÉú³É
ÔÚ±àÒëÆ÷µÄ·ÖÎö-×ÛºÏÄ£ÐÍÖУ¬Ç°¶Ë¶ÔÔ´³ÌÐò½øÐзÖÎö²¢²úÉúÖмä±íʾ£¬ºó¶ËÔÚ´Ë»ù´¡ÉÏÉú³ÉÄ¿±ê´úÂë¡£ÔÚÀíÏëÇé¿öÏ£¬ºÍÔ´ÓïÑÔÏà¹ØµÄϸ½ÚÔÚǰ¶Ë·ÖÎöÖд¦Àí£¬¶ø¹ØÓÚÄ¿±ê»úÆ÷µÄϸ½ÚÔòÔÚºó¶Ë´¦Àí¡£»ùÓÚÒ»¸öÊʵ±¶¨ÒåµÄÖмä±íʾÐÎʽ£¬¿ÉÒÔ°ÑÕë¶ÔÔ´ÓïÑÔiµÄǰ¶ËºÍÕë¶ÔÄ¿±ê»úÆ÷jµÄºó¶Ë×éºÏÆðÀ´£¬¹¹ÔìµÃµ½Ô´ÓïÑÔiÔÚÄ¿±ê»úÆ÷jÉϵÄÒ»¸ö±àÒëÆ÷¡£ÕâÖÖ´´½¨±àÒëÆ÷×éºÏµÄ·½·¨¿ÉÒÔ½ÚÔ¼´óÁ¿µÄ¹¤×÷Á¿£ºÖ»ÒªÐ´³ömÖÖǰ¶ËºÍnÖÖºó¶Ë´¦Àí³ÌÐò£¬¾Í¿ÉÒԵõ½m¡ÁnÖÖ±àÒë³ÌÐò¡£
±¾ÕµÄÄÚÈÝ´¦ÀíÖмä´úÂë±íʾ¡¢¾²Ì¬ÀàÐͼì²éºÍÖмä´úÂëÉú³É¡£Îª¼òµ¥Æð¼û£¬ÎÒÃǼÙÉèÒ»¸ö±àÒë³ÌÐòµÄǰ¶Ë´¦Àí°´ÕÕͼ6.1Ëùʾ·½Ê½½øÐÐ×éÖ¯£¬Ë³ÐòµØ½øÐÐÓï·¨·ÖÎö¡¢¾²Ì¬¼ì²éºÍÖмä´úÂëÉú³É¡£ÓÐʱºòÕ⼸¸ö¹ý³ÌÒ²¿ÉÒÔ×éºÏÆðÀ´£¬ÔÚÓï·¨·ÖÎöÖÐÒ»²¢Íê³É¡£ÎÒÃǽ«Ê¹ÓõڶþÕº͵ÚÎåÕÂÖеÄÓï·¨ÖÆµ¼¶¨ÒåÀ´ÃèÊöÀàÐͼì²éºÍ·Òë¹ý³Ì¡£´ó²¿·ÖµÄ·Òë·½°¸¿ÉÒÔ»ùÓÚµÚÎåÕÂÖиø³öµÄ×Ô¶¥ÏòÏ»ò×Ôµ×ÏòÉϵļ¼ÊõÀ´ÊµÏÖ¡£ËùÓеķ½°¸¶¼¿ÉÒÔͨ¹ýÉú³É²¢±éÀú³éÏóÓï·¨Ê÷À´ÊµÏÖ¡£
Parser Óï·¨·ÖÎöÆ÷ Static Checker ¾²Ì¬¼ì²é³ÌÐò Intermediate code generator Öмä´úÂëÉú³ÉÆ÷ intermediate code Öмä´úÂë code generator ´úÂëÉú³ÉÆ÷ front end ǰ¶Ë back end ºó¶Ë ͼ6.1£ºÒ»¸ö±àÒëÆ÷ǰ¶ËµÄÂß¼½á¹¹
¾²Ì¬¼ì²é°üÀ¨ÀàÐͼì²é£¬±£Ö¤ÔËËã·û±»×÷ÓÃÓÚ¼æÈݵÄÔËËã·ÖÁ¿¡£¾²Ì¬¼ì²é»¹°üÀ¨ÔÚÓï·¨·ÖÎöÖ®ºó½øÐеÄËùÓÐÓï·¨¼ì²é¡£ÀýÈ磬¾²Ì¬¼ì²é±£Ö¤ÁËCÓïÑÔÖеÄÒ»ÌõbreakÖ¸Áî±ØÈ»Î»ÓÚÒ»¸öwhile/for/switchÓï¾äÖ®ÄÚ¡£Èç¹û²»´æÔÚÕâÑùµÄÓï¾ä£¬¾²Ì¬¼ì²é½«±¨¸æÒ»¸ö´íÎó¡£
±¾Õ½éÉܵķ½·¨¿ÉÒÔÓÃÓÚ¶àÖÖÖмä±íʾ£¬°üÀ¨³éÏóÓï·¨Ê÷ºÍÈýµØÖ·´úÂë¡£ÕâÁ½ÖÖÖмä±íʾ·½·¨¶¼ÔÚ±¾ÊéµÄ2.8½ÚÖнéÉܹý¡£ÃûΪ¡°ÈýµØÖ·´úÂ롱µÄÔÒòÊÇÕâЩָÁîµÄÒ»°ãÐÎʽx=y op z¾ßÓÐÈý¸öµØÖ·£ºÁ½¸öÔËËã·ÖÁ¿yºÍz£¬Ò»¸ö½á¹û±äÁ¿x¡£
ÔÚ½«¸ø¶¨Ô´ÓïÑÔµÄÒ»¸ö³ÌÐò·Òë³ÉÌØ¶¨µÄÄ¿±ê»úÆ÷´úÂëµÄ¹ý³ÌÖУ¬Ò»¸ö±àÒëÆ÷¿ÉÄܹ¹Ôì³öһϵÁеÄÖмä±íʾ£¬Èçͼ6.2Ëùʾ¡£¸ß²ãµÄ±íʾ½Ó½üÓÚÔ´ÓïÑÔ£¬¶øµÍ²ãµÄ±íʾ½Ó½üÓÚÄ¿±ê»úÆ÷¡£Óï·¨Ê÷ÊǸ߲ãµÄ±íʾ£¬Ëü¿Ì»ÁËÔ´³ÌÐòµÄ×ÔÈ»µÄ²ã´ÎÐԽṹ£¬²¢ÇÒºÜÊʺϽøÐÐÖîÈ羲̬ÀàÐͼì²éÕâÑùµÄ´¦Àí¡£
Source Program Ô´³ÌÐò High Level Intermediate Representation ¸ß²ãÖмä±íʾÐÎʽ Low Level Intermediate Representation µÍ²ãÖмä±íʾÐÎʽ Target Code Ä¿±ê´úÂë ͼ6.2£º±àÒëÆ÷¿ÉÄÜʹÓÃһϵÁеÄÖмä±íʾ
µÍ²ãµÄ±íʾÐÎʽÊʺϽøÐлúÆ÷Ïà¹ØµÄ´¦ÀíÈÎÎñ£¬±ÈÈç¼Ä´æÆ÷·ÖÅä¡¢Ö¸ÁîÑ¡ÔñµÈ¡£Í¨¹ýÑ¡Ôñ²»Í¬µÄÔËËã·û£¬ÈýµØÖ·´úÂë¼È¿ÉÒÔÊǸ߲ãµÄ±íʾ·½Ê½£¬Ò²¿ÉÒÔÊǵͲãµÄ±íʾ·½Ê½¡£´Ó6.2.3½Ú½«¿ÉÒÔ¿´³ö£¬¶Ô±í´ïʽ¶øÑÔ£¬Óï·¨Ê÷ºÍÈýµØÖ·´úÂëÖ»ÊÇÔÚ±íÃæÉÏÓÐËù²»Í¬¡£¶ÔÓÚÑ»·Óï¾ä£¬Óï·¨Ê÷±íʾÁËÓï¾äµÄ¸÷¸ö×é³É²¿·Ö£¬¶øÈýµØÖ·´úÂë°üº¬Á˱êºÅºÍÌø×ªÖ¸ÁÓÃÀ´±íʾĿ±êÓïÑԵĿØÖÆÁ÷¡£
²»Í¬µÄ±àÒë³ÌÐò¶ÔÖмä±íʾµÄÑ¡ÔñºÍÉè¼Æ¸÷Óв»Í¬¡£Öмä±íʾ¿ÉÒÔÊÇÒ»ÖÖÕæÕýµÄÓïÑÔ£¬Ò²¿ÉÒÔÊDZàÒëÆ÷µÄ¸÷¸ö´¦Àí½×¶Î¹²ÏíµÄ¶à¸öÄÚ²¿Êý¾Ý½á¹¹¡£CÓïÑÔÊÇÒ»ÖÖ³ÌÐòÉè¼ÆÓïÑÔ¡£Ëü¾ßÓкܺõÄÁé»îÐÔºÍͨÓÃÐÔ£¬¿ÉÒԺܷ½±ãµØ°ÑC³ÌÐò±àÒë³É¸ßЧµÄ»úÆ÷´úÂ룬²¢ÇÒÓкܶàCµÄ±àÒëÆ÷¿ÉÓã¬Òò´ËCÓïÑÔÒ²³£³£±»ÓÃ×÷Öмä±íʾ¡£ÔçÆÚµÄC++±àÒëÆ÷µÄǰ¶ËÉú³ÉC´úÂ룬¶ø°ÑC±àÒëÆ÷×÷ΪÆäºó¶Ë¡£
6.1 Óï·¨Ê÷µÄ±äÌå
Óï·¨Ê÷Öи÷¸ö½áµã´ú±íÁËÔ´³ÌÐòµÄ¹¹Ô죻һ¸ö½áµãµÄËùÓÐ×Ó½áµã·´Ó³Á˸ýáµã¶ÔÓ¦¹¹ÔìµÄÓÐÒâÒåµÄ×é³É³É·Ö¡£Îª±í´ïʽ¹¹½¨µÄÎÞ»·ÓÐÏòͼ£¨Directed acyclic graph, ÒÔºó¼ò³ÆDAG£©Ö¸³öÁ˱í´ïʽÖеĹ«¹²×Ó±í´ïʽ£¨¶à´Î³öÏÖµÄ×Ó±í´ïʽ£©¡£ÔÚ±¾½ÚÎÒÃǽ«¿´µ½£¬¿ÉÒÔÓù¹ÔìÓï·¨Ê÷µÄ¼¼ÊõÈ¥¹¹ÔìDAGͼ¡£
6.1.1 ±í´ïʽµÄÓÐÏòÎÞ»·Í¼
ºÍ±í´ïʽµÄÓï·¨Ê÷ÀàËÆ£¬Ò»¸öDAGͼµÄÒ¶×Ó½áµã¶ÔÓ¦ÓÚÔ×ÓÔËËã·ÖÁ¿£¬¶øÄÚ²¿½áµã¶ÔÓ¦ÓÚÔËËã·û¡£ÓëÓï·¨Ê÷²»Í¬µÄÊÇ£¬Èç¹ûDAGͼÖеÄÒ»¸ö½áµãN±íʾһ¸ö¹«¹²×Ó±í´ïʽ£¬ÔòN¿ÉÄÜÓжà¸ö¸¸½áµã¡£ÔÚÓï·¨Ê÷ÖУ¬¹«¹²×Ó±í´ïʽÿ³öÏÖÒ»´Î£¬´ú±í¸Ã¹«¹²×Ó±í´ïʽµÄ×ÓÊ÷¾Í»á±»¸´ÖÆÒ»´Î¡£Òò´Ë£¬DAG²»½ö¸ü¼ò½àµØ±íʾÁ˱í´ïʽ£¬¶øÇÒ¿ÉÒÔΪ×îÖÕÉú³É±í´ïʽµÄ¸ßЧ´úÂëÌá¹©ÖØÒªµÄÐÅÏ¢¡£
Àý×Ó6.1 £ºÍ¼6.3¸ø³öÁËÏÂÃæµÄ±í´ïʽµÄDAGͼ
a+a*(b-c)+(b-c)*d
Ò¶×Ó½áµãaÔÚ±í´ïʽÖгöÏÖÁËÁ½´Î£¬Òò´ËaÓÐÁ½¸ö¸¸½áµã¡£ÖµµÃ×¢ÒâµÄÊÇ£¬½áµã¡°-¡±´ú±í¹«¹²×Ó±í´ïʽb-cµÄÁ½´Î³öÏÖ¡£¸Ã½áµãͬÑùÓÐÁ½¸ö¸¸½áµã£¬±íÃ÷¸Ã×Ó±í´ïʽÔÚ×Ó±í´ïʽa*(b-c)ºÍ(b-c)*dÖÐÁ½´Î±»Ê¹Ó᣾¡¹ÜbºÍcÔÚÕû¸ö±í´ïʽÖгöÏÖÁËÁ½´Î£¬ËüÃǶÔÓ¦µÄ½áµã¶¼Ö»ÓÐÒ»¸ö¸¸½áµã£¬ÒòΪ¶ÔËüÃǵÄʹÓö¼³öÏÖÔÚͬÑùµÄ¹«¹²×Ó±í´ïʽb-cÖС£¡õ
ͼ6.3£º±í´ïʽa+a*(b-c)+(b-c)*dµÄDAGͼ
ͼ6.4£ºÉú³ÉÓï·¨Ê÷»òDAGͼµÄÓï·¨ÖÆµ¼¶¨Òå
ͼ6.4¸ø³öµÄSDD£¨Óï·¨ÖÆµ¼¶¨Ò壩¼È¿ÉÒÔÓÃÀ´¹¹ÔìÓï·¨Ê÷£¬Ò²¿ÉÒÔÓÃÀ´¹¹ÔìDAGͼ¡£ËüÔÚÀý5.11ÖÐÔø±»ÓÃÓÚ¹¹ÔìÓï·¨Ê÷¡£ÔÚÄÇʱ£¬º¯ÊýleadºÍnodeÿ´Î±»µ÷Óö¼»á¹¹Ôì³öÒ»¸öнáµã¡£Òª¹¹ÔìµÃµ½DAGͼ£¬ÕâЩº¯Êý¾ÍÒªÔÚÿ´Î¹¹Ôìнáµã֮ǰÊ×Ïȼì²éÊÇ·ñÒÑ´æÔÚÕâÑùµÄ½áµã¡£Èç¹û´æÔÚÒ»¸öÒѱ»´´½¨µÄ½áµã£¬ËüÃǾͷµ»ØÕâ¸ö½áµã¡£ÀýÈ磬ÔÚ¹¹ÔìÒ»¸öнáµãNode(op,left,right)֮ǰ£¬ÎÒÃÇÊ×Ïȼì²éÊÇ·ñÒÑ´æÔÚÒ»¸ö½áµã£¬¸Ã½áµãµÄ±êºÅΪop£¬ÇÒÆäÁ½¸ö×Ó½áµãΪleftºÍright¡£Èç¹û´æÔÚ£¬Nodeº¯Êý·µ»ØÕâ¸öÒÑ´æÔڵĽáµã£»·ñÔòËü´´½¨Ò»¸öнáµã¡£
Àý×Ó6.2: ͼ6.5¸ø³öÁ˹¹Ôìͼ6.3ÖÐËùʾDAGͼµÄ¸÷¸ö²½Öè¡£ÈçÉÏËùÊö£¬º¯ÊýnodeºÍleaf¾¡¿ÉÄܵطµ»ØÒÑ´æÔڵĽáµã¡£ÎÒÃǼÙÉèentry-aÖ¸Ïò·ûºÅ±íÖÐaµÄλÖã¬ÆäËü±êʶ·ûÒ²ÀàËÆ¡£
ͼ6.5£ºÍ¼6.3ËùʾDAGͼµÄ¹¹Ôì¹ý³Ì¡£ µ±ÔÚµÚ2²½ÉÏÔٴε÷ÓÃLeaf(id,entry-a)ʱ£¬º¯Êý·µ»ØµÄÊÇ֮ǰÒÑÉú³ÉµÄ½áµã£¬Òò´Ëp2=p1¡£ÀàËÆµØ£¬µÚ8²½ºÍµÚ9²½ÉÏ·µ»ØµÄ½áµã·Ö±ðºÍµÚ3²½¼°µÚ4²½Öзµ»ØµÄ½á¹ûÏàͬ£¨¼´p8=p3£¬ p9=p4£©¡£Í¬Ñù£¬µÚ10²½Öзµ»ØµÄ½áµã±ØÈ»ºÍµÚ5²½Öзµ»ØµÄÏàͬ£¬¼´p10=p5¡£¡õ
6.1.2 ¹¹ÔìDAGµÄÖµ±àÂë·½·¨
Óï·¨Ê÷»òDAGͼÖеĽáµãͨ³£±»´æ·ÅÔÚÒ»¸ö¼Ç¼Êý×éÖУ¬Èçͼ6.6Ëùʾ¡£Êý×éµÄÿһÐбíʾһ¸ö¼Ç¼£¬Ò²¾ÍÊÇÒ»¸ö½áµã¡£ÔÚÿ¸ö¼Ç¼ÖУ¬µÚÒ»¸öÓòÊÇÒ»¸öÔËËã·û´úÂ룬ҲÊǸýáµãµÄ±êºÅ¡£ÔÚͼ6.6(b)ÖУ¬¸÷¸öÒ¶×Ó½áµã»¹ÓÐÒ»¸ö¸½¼ÓµÄÓò£¬´æ·ÅÁ˱êʶ·ûµÄ×ÖÃæÖµ£¨ÔÚÕâÀËüÊÇÒ»¸öÖ¸Ïò·ûºÅ±íµÄÖ¸Õë»òÒ»¸ö³£Á¿£©¡£¶øÄÚ²¿½áµãÔòÓÐÁ½¸ö¸½¼ÓµÄÓò£¬·Ö±ðÖ¸Ã÷Æä×óÓÒ×Ó½áµã¡£
ͼ6.6£ºi=i+10µÄDAGͼµÄ½áµãÔÚÊý×éÖеıíʾ
ÔÚÕâ¸öÊý×éÖУ¬ÎÒÃÇÖ»ÐèÒª¸ø³öÒ»¸ö½áµã¶ÔÓ¦µÄ¼Ç¼ÔÚ´ËÊý×éÖеÄÕûÊýÐòºÅ¾Í¿ÉÒÔÒýÓøýáµã¡£ÔÚÀúÊ·ÉÏ£¬Õâ¸öÐòºÅ±»³ÆÎªÏàÓ¦½áµã»ò¸Ã½áµãËù±íʾµÄ±í´ïʽµÄÖµ±àÂë¡£ÀýÈ磬ÔÚͼ6.6ÖУ¬±êºÅΪ¡°+¡±µÄ½áµãµÄÖµ±àÂëΪ3, Æä×óÓÒ×Ó½áµãµÄÖµ±àÂë·Ö±ðΪ1ºÍ2¡£ÔÚʵ¼ùÖУ¬ÎÒÃÇ¿ÉÒÔÓüǼָÕë»ò¶ÔÏóÒýÓÃÀ´´úÌæÕûÊýϱ꣬µ«ÊÇÎÒÃÇÈÔÈ»°ÑÒ»¸ö½áµãµÄÒýÓóÆÎª¸Ã½áµãµÄ¡°Öµ±àÂ롱¡£Èç¹ûʹÓÃÊʵ±µÄÊý¾Ý½á¹¹£¬Öµ±àÂë¿ÉÒÔ°ïÖúÎÒÃǸßЧµØ¹¹Ôì³ö±í´ïʽµÄDAGͼ¡£ÏÂÒ»¸öËã·¨½«¸ø³ö¹¹ÔìµÄ·½·¨¡£
¼Ù¶¨½áµã°´ÕÕÈçͼ6.6ËùʾµÄ·½Ê½´æ·ÅÔÚÒ»¸öÊý×éÖУ¬Ã¿¸ö½áµãͨ¹ýÖµ±àÂëÒýÓá£Áîÿ¸öÄÚ²¿½áµãÓÃÒ»¸öÈýÔª×é±íʾ
Ëã·¨6.3: ¹¹ÔìDAGͼµÄÖµ±àÂë·½·¨¡£ ÊäÈ룺±êºÅop¡¢½áµãlºÍ½áµãr¡£
Êä³ö£ºÊý×éÖоßÓÐÈýÔª×é
·½·¨£ºÔÚÊý×éÖÐËÑË÷±êºÅΪop¡¢×ó×Ó½áµãΪlÇÒÓÒ×Ó½áµãΪrµÄ½áµãM¡£Èç¹û´æÔÚ£¬Ôò·µ»ØM½áµãµÄÊýÖµºÅ¡£Èô²»´æÔÚ£¬ÔòÔÚÊý×éÖÐÌí¼ÓÒ»¸ö½áµãN£¬Æä±êºÅΪop£¬×óÓÒ×Ó½áµã·Ö±ðΪlºÍr£»·µ»ØÐ½¨½áµã¶ÔÓ¦µÄÖµ±àÂë¡£¡õ
ËäÈ»Ëã·¨6.3¿ÉÒÔ²úÉúÎÒÃÇÆÚ´ýµÄÊä³ö½á¹û£¬µ«ÊÇÿ´Î¶¨Î»Ò»¸ö½áµãʱ¶¼ÒªËÑË÷Õû¸öÊý×é¡£Õâ¸ö¿ªÏúÊǺܴóµÄ£¬µ±Êý×éÖдæ·ÅÁËÕû¸ö³ÌÐòµÄËùÓбí´ïʽʱÓÈÆäÈç´Ë¡£¸ü¸ßЧµÄ;¾¶ÊÇʹÓùþÏ£±í£¬½«½áµã·ÅÈëÈô¸É¡°Í°¡±ÖУ¬Ã¿¸öͰͨ³£Ö»°üº¬ÉÙÁ¿½áµã¡£¹þÏ£±íÊÇÄܹ»¸ßЧ֧³Ö´Êµä¹¦ÄܵÄÉÙÊý¼¸¸öÊý¾Ý½á¹¹Ö®Ò»2¡£´ÊµäÊÇÒ»ÖÖ³éÏóµÄÊý¾ÝÀàÐÍ£¬Ëü¿ÉÒÔ²åÈë»òɾ³ýÒ»¸ö¼¯ºÏÖеÄÔªËØ£¬¿ÉÒÔÈ·¶¨Ò»¸ö¸ø¶¨ÔªËص±Ç°ÊÇ·ñÔÚ¼¯ºÏÖС£ÀàËÆÓÚ¹þÏ£±íÕâÑùΪ´ÊµäÉè¼ÆµÄÓÅÐãÊý¾Ý½á¹¹¿ÉÒÔÔÚ³£Êý»ò½Ó½ü³£ÊýµÄʱ¼äÄÚÍê³ÉÉÏÊöµÄ²Ù×÷£¬ËùÐèʱ¼äºÍ¼¯ºÏµÄ´óСÎ޹ء£
Òª¸øDAGͼÖеĽáµã¹¹Ôì¹þÏ£±í£¬Ê×ÏÈÐèÒª½¨Á¢¹þÏ£º¯Êýh¡£Õâ¸öº¯ÊýΪÐÎÈç
Ͱ¿ÉÒÔͨ¹ýÁ´±íÀ´ÊµÏÖ£¬Èçͼ6.7Ëùʾ¡£Ò»¸öÓɹþÏ£ÖµË÷ÒýµÄÊý×é±£´æÍ°µÄÍ·¡£Ã¿¸öÍ·Ö¸ÏòÁбíÖеĵÚÒ»¸öµ¥Ôª¡£ËùÓÐÆä¹þÏ£ÖµÖ¸ÏòÕâ¸öͰµÄ½áµã¶¼´æ·ÅÔÚÕâ¸öͰµÄÁ´±íÖУ¬Á´±íµÄ¸÷¸öµ¥Ôª¼Ç¼ÁËÕâЩ½áµãµÄÖµ±àÂë¡£¾ÍÊÇ˵£¬ÔÚÒÔÊý×éµÄµÚh(op,l,r)¸öÔªËØÎªÍ·µÄÁ´±íÖпÉÒÔÕÒµ½½áµã
2
¼ûAho, A.V., J.E.HopcroftºÍJ.D.Ullman, Data structures and Algorithms, Addison-Wesley³ö°æÉç, 1983¡£ÆäÖÐÓÐÒ»¸ö¹ØÓÚÖ§³Ö´Êµä¹¦ÄܵÄÊý¾Ý½á¹¹µÄÌÖÂÛ¡£
¹²·ÖÏí92ƪÏà¹ØÎĵµ