锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美成人一区二区在线,免费观看日韩av,欧美一级大片在线观看http://www.shnenglu.com/vczh/category/6885.html銆怮Q錛?43056143銆戙怑mail錛歷czh@163.com銆戙愭柊嫻井鍗氾細http://weibo.com/vczh銆?/description>zh-cnThu, 21 Mar 2013 05:22:56 GMTThu, 21 Mar 2013 05:22:56 GMT60C++瀹炵敤鎶宸т箣閰嶇疆Visual C++鐨勮皟璇曞櫒鏄劇ず鏁版嵁緇撴瀯鐨勬牸寮忥紙闄刅czh Library++閰嶇疆鏂囦歡錛?/title><link>http://www.shnenglu.com/vczh/archive/2013/03/21/198665.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Thu, 21 Mar 2013 03:55:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2013/03/21/198665.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/198665.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2013/03/21/198665.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/198665.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/198665.html</trackback:ping><description><![CDATA[<p>浠婂ぉ鎴戝啓浜嗕竴涓粰Visual C++鐢ㄧ殑閰嶇疆錛岀敤鏉ヨVC++鍦ㄦ樉紺鴻嚜宸卞啓鐨勫瓧絎︿覆鍜屽鍣ㄧ瓑璁炬柦鍙樺緱璺熸樉紺篠TL涓鏍鋒紓浜俈C++鐨勫彲閰嶇疆鍨嬭繕鏄緢楂樼殑錛屾垜浠彧瑕佸啓涓涓獂ml錛屽氨鍙互鏀瑰彉璋冭瘯鍣ㄥ鑷繁鐨勬暟鎹粨鏋勭殑鏄劇ず浜?</p> <p>鍦ㄨ繖閲屾垜綆鍗曞湴浠嬬粛涓涓嬬敤娉曘傚亣璁懼ぇ瀹惰寰梫lpp錛圴czh Library++錛屼篃灝辨槸GacUI鐢ㄧ殑閭d釜搴擄級鐨刉String鍟奓ist榪欎簺涓滆タ鍦ㄨ皟璇曞櫒閲岄潰鏄劇ず鍑烘潵鐨勪笢瑗垮お涓戯紝灝卞彲浠ョ敤浠ヤ笅涓夋鏉ヤ慨鏀瑰畠銆?/p> <p>1錛氬幓<a title="http://gac.codeplex.com/SourceControl/changeset/view/99419#2395529" >http://gac.codeplex.com/SourceControl/changeset/view/99419#2395529</a>涓嬭澆鎴戝啓鐨勯偅涓猲atvis鏂囦歡銆傝繖涓枃浠跺湪鏁翠釜zip鍖呴噷闈㈢殑浣嶇疆鏄疌ommon\vlpp.natvis<br />2錛氭妸榪欎釜鏂囦歡澶嶅埗鍒癈:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Packages\Debugger\Visualizers錛堝鏋滀嬌鐢ㄩ粯璁ゅ畨瑁呰礬寰勭殑璇濓級<br />3錛氶噸鍚綘鏈鍠滅埍鐨刅isual Studio 2012錛屽氨鍙互鐪嬪埌涓嬮潰鐨勪笢瑗夸簡錛?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_thumb.png" width="275" height="95" /></a><br />絀虹殑鏅鴻兘鎸囬拡</p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_4.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_thumb_1.png" width="433" height="115" /></a><br />鏈変笢瑗跨殑鏅鴻兘鎸囬拡</p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_6.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_thumb_2.png" width="224" height="64" /></a><br />鏈夊唴瀹圭殑“鎯版ц綆?#8221;綾?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_8.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_thumb_3.png" width="344" height="88" /></a><br />鏈夊唴瀹逛絾鏄繕娌¤綆楃殑“鎯版ц綆?#8221;綾?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_10.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_thumb_4.png" width="353" height="83" /></a><br />娌″唴瀹圭殑“鎯版ц綆?#8221;綾?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_12.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_thumb_5.png" width="445" height="259" /></a><br />鏂伴矞鐑荊鐨勫鍣?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_14.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_thumb_6.png" width="667" height="226" /></a><br />鏂伴矞鐑荊鐨勬槧灝?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_16.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_thumb_7.png" width="596" height="295" /></a><br />灝辮繛涓瀵瑰鐨勬槧灝勪篃鏄姝ょ殑鏂伴矞鐑荊</p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_18.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/51783bf28f3a_A413/image_thumb_8.png" width="318" height="161" /></a><br />List<Nullable<vint>>鐨勪簰鐩稿祵濂椾篃鏄姝ょ殑瀹岀編</p> <p>濡傛灉澶у鎯沖啓鑷繁鐨凜ustomized Visualizer鐨勮瘽錛屽彲浠ュ幓鍙傝冨井杞壇蹇冩彁渚涚殑鏂囨。<a title="http://msdn.microsoft.com/en-us/library/vstudio/jj620914.aspx" >http://msdn.microsoft.com/en-us/library/vstudio/jj620914.aspx</a>錛岀劧鍚庢寜鐓т笂闈㈢殑姝ラ鍐欒嚜宸辯殑natvis鏂囦歡銆傚湪榪欓噷鎴戞妸鎴戠殑natvis璐翠笂鏉ワ紝浠ヤ緵鍙傝冿細</p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 5px; background-color: #f5f5f5; padding-left: 5px; padding-right: 5px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 5px" class="cnblogs_code"><pre><span style="color: #0000ff"><?</span><span style="color: #ff00ff">xml version="1.0" encoding="utf-8"</span><span style="color: #0000ff">?></span> <span style="color: #0000ff"><</span><span style="color: #800000">AutoVisualizer </span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Type </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::ObjectString&lt;wchar_t&gt;"</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span>{{ size={length}, buffer={buffer+start,su} }}<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">StringView</span><span style="color: #0000ff">></span>buffer+start,su<span style="color: #0000ff"></</span><span style="color: #800000">StringView</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Item </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="[size]"</span><span style="color: #0000ff">></span>length<span style="color: #0000ff"></</span><span style="color: #800000">Item</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">ArrayItems</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Size</span><span style="color: #0000ff">></span>length<span style="color: #0000ff"></</span><span style="color: #800000">Size</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">ValuePointer</span><span style="color: #0000ff">></span>buffer+start<span style="color: #0000ff"></</span><span style="color: #800000">ValuePointer</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">ArrayItems</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Type</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Type </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::ObjectString&lt;char&gt;"</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span>{{ size={length}, buffer={buffer+start,s} }}<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">StringView</span><span style="color: #0000ff">></span>buffer+start,s<span style="color: #0000ff"></</span><span style="color: #800000">StringView</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Item </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="[size]"</span><span style="color: #0000ff">></span>length<span style="color: #0000ff"></</span><span style="color: #800000">Item</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">ArrayItems</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Size</span><span style="color: #0000ff">></span>length<span style="color: #0000ff"></</span><span style="color: #800000">Size</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">ValuePointer</span><span style="color: #0000ff">></span>buffer+start<span style="color: #0000ff"></</span><span style="color: #800000">ValuePointer</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">ArrayItems</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Type</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Type </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::collections::List&lt;*,*&gt;"</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">AlternativeType </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::collections::SortedList&lt;*,*&gt;"</span><span style="color: #0000ff">/></span> <span style="color: #0000ff"><</span><span style="color: #800000">AlternativeType </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::collections::Array&lt;*,*&gt;"</span><span style="color: #0000ff">/></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span>{{ size={count} }}<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Item </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="[size]"</span><span style="color: #0000ff">></span>count<span style="color: #0000ff"></</span><span style="color: #800000">Item</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">ArrayItems</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Size</span><span style="color: #0000ff">></span>count<span style="color: #0000ff"></</span><span style="color: #800000">Size</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">ValuePointer</span><span style="color: #0000ff">></span>buffer<span style="color: #0000ff"></</span><span style="color: #800000">ValuePointer</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">ArrayItems</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Type</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Type </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::collections::Dictionary&lt;*,*,*,*&gt;"</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">AlternativeType </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::collections::Group&lt;*,*,*,*&gt;"</span><span style="color: #0000ff">/></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span>{{ size={keys.count} }}<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Item </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="[size]"</span><span style="color: #0000ff">></span>keys.count<span style="color: #0000ff"></</span><span style="color: #800000">Item</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Item </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="Keys"</span><span style="color: #0000ff">></span>keys<span style="color: #0000ff"></</span><span style="color: #800000">Item</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Item </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="Values"</span><span style="color: #0000ff">></span>values<span style="color: #0000ff"></</span><span style="color: #800000">Item</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Type</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Type </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::Ptr&lt;*&gt;"</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">AlternativeType </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::ComPtr&lt;*&gt;"</span><span style="color: #0000ff">/></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString </span><span style="color: #ff0000">Condition</span><span style="color: #0000ff">="reference == 0"</span><span style="color: #0000ff">></span>[empty]<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString </span><span style="color: #ff0000">Condition</span><span style="color: #0000ff">="reference != 0"</span><span style="color: #0000ff">></span>{*reference}<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Item </span><span style="color: #ff0000">Condition</span><span style="color: #0000ff">="reference != 0"</span><span style="color: #ff0000"> Name</span><span style="color: #0000ff">="[ptr]"</span><span style="color: #0000ff">></span>reference<span style="color: #0000ff"></</span><span style="color: #800000">Item</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Type</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Type </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::Lazy&lt;*&gt;"</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString </span><span style="color: #ff0000">Condition</span><span style="color: #0000ff">="internalValue.reference == 0"</span><span style="color: #0000ff">></span>[empty]<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString </span><span style="color: #ff0000">Condition</span><span style="color: #0000ff">="internalValue.reference != 0 &amp;&amp; internalValue.reference->evaluated == false"</span><span style="color: #0000ff">></span>[not evaluated]<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString </span><span style="color: #ff0000">Condition</span><span style="color: #0000ff">="internalValue.reference != 0 &amp;&amp; internalValue.reference->evaluated == true"</span><span style="color: #0000ff">></span>{internalValue.reference->value}<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Item </span><span style="color: #ff0000">Condition</span><span style="color: #0000ff">="internalValue.reference != 0 &amp;&amp; internalValue.reference->evaluated == true"</span><span style="color: #ff0000"> Name</span><span style="color: #0000ff">="[value]"</span><span style="color: #0000ff">></span>internalValue.reference->value<span style="color: #0000ff"></</span><span style="color: #800000">Item</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Type</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Type </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::ObjectBox&lt;*&gt;"</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span>{object}<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">ExpandedItem</span><span style="color: #0000ff">></span>object<span style="color: #0000ff"></</span><span style="color: #800000">ExpandedItem</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Type</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Type </span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="vl::Nullable&lt;*&gt;"</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString </span><span style="color: #ff0000">Condition</span><span style="color: #0000ff">="object == 0"</span><span style="color: #0000ff">></span>[empty]<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">DisplayString </span><span style="color: #ff0000">Condition</span><span style="color: #0000ff">="object != 0"</span><span style="color: #0000ff">></span>{*object}<span style="color: #0000ff"></</span><span style="color: #800000">DisplayString</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">ExpandedItem </span><span style="color: #ff0000">Condition</span><span style="color: #0000ff">="object != 0"</span><span style="color: #0000ff">></span>*object<span style="color: #0000ff"></</span><span style="color: #800000">ExpandedItem</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Expand</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">Type</span><span style="color: #0000ff">></span> <span style="color: #0000ff"></</span><span style="color: #800000">AutoVisualizer</span><span style="color: #0000ff">></span></pre></div><img src ="http://www.shnenglu.com/vczh/aggbug/198665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2013-03-21 11:55 <a href="http://www.shnenglu.com/vczh/archive/2013/03/21/198665.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍙厤緗娉曞垎鏋愬櫒寮鍙戠邯浜嬶紙浜旓級&mdash;&mdash;鏋勯犱竴涓湡姝h兘鐢ㄧ殑鐘舵佹満錛堜腑錛?/title><link>http://www.shnenglu.com/vczh/archive/2013/01/01/196893.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Tue, 01 Jan 2013 07:52:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2013/01/01/196893.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/196893.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2013/01/01/196893.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/196893.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/196893.html</trackback:ping><description><![CDATA[<p><a href="http://www.shnenglu.com/vczh/archive/2012/12/23/196524.html" target="_blank">涓婁竴綃囧崥瀹?/a>鍐欏埌浜嗗浣曠粰涓涓潪緇堢粨絎︾殑鏂囨硶瑙勫垯鏋勯犲嚭涓涓帇緙╄繃鐨勪笅鎺ㄧ姸鎬佹満錛岄偅涔堜粖澶╄鐨勫氨鏄浣曟妸鎵鏈夌殑鏂囨硶閮借繛鎺ヨ搗鏉ャ傚叾瀹炰富瑕佺殑idea鍦?a href="http://www.shnenglu.com/vczh/archive/2012/12/07/196079.html" target="_blank">錛堜笁錛?/a>鍜屼粬鐨勫嫎璇?a href="http://www.shnenglu.com/vczh/archive/2012/12/07/196085.html" target="_blank">錛堜笁鐐逛簲錛?/a>閲岄潰宸茬粡璇村緱宸笉澶氫簡銆備絾鏄粖澶╂垜浠澶勭悊鐨勬槸甯︿俊鎭殑transition錛屾墍浠ヨ繕鏈変竴浜涘湴鏂硅娉ㄦ剰涓涓嬨?/p> <p>鎵浠ュ湪榪欓噷鎴戜滑鍏堟妸鍑犳潯鏂囨硶鐨勬渶鍚庣殑鐘舵佹満閮藉垪鍑烘潵錛堝ぇ鍥撅級錛?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_thumb.png" width="893" height="1438" /></a></p> <p>鎺ヤ笅鏉ョ殑榪欎竴姝ワ紝灝辨槸瑕佸鎵鏈夐潬闈炵粓緇撶錛圗xp鍟奣erm榪欎簺錛夎繘琛岃煩杞殑transition閮芥墽琛屼笂涓綃囨枃绔犳墍璇寸殑浼犺涓殑浜ゅ弶閾炬帴銆傚湪浜х敓閾炬帴鐨勬椂鍊欙紝鎴戜滑緇檚hift鍜宺educe鐨勮竟鍒嗗埆鍔犱笂shift鍜宺educe銆傝宻hift鍜宺educe鏄湁鍙傛暟鐨?#8212;—灝辨槸琚玸hift璧扮殑鐘舵佺殑id銆傝繖鏍峰彲浠ュ湪parse鐨勬椂鍊欏尮閰嶅拰澶勭悊鐘舵佸爢鏍堛傚湪榪欓噷鎴戦棬瀵筫3->e1榪欎竴姝ュ仛涓涓嬫搷浣滃仛涓轟緥瀛愩傜孩鑹茬殑杈規槸琚垹鎺夌殑錛岃岀矖澹殑緇胯壊杈規槸琚柊鍔犺繘鍘葷殑錛?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_12.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_thumb_5.png" width="885" height="597" /></a></p> <p>綰㈣壊鐨勮竟鍙樻垚浜嗕袱鏉$豢鑹茬殑杈癸紝綰㈣壊鐨勮竟闄勫甫鐨勪俊鎭垯琚鍒跺埌浜嗙豢鑹茬殑reduce杈逛笂銆傚綋鎴戜滑浣跨敤榪欎釜鐘舵佹満鐨勬椂鍊欙紝shift(s3)灝辮〃紺哄線鍫嗘爤閲岄潰鍘嬪叆s3錛宺educe(s3)灝辮〃紺轟粠鍫嗘爤閲岄潰寮瑰嚭(s3)銆傚綋鐒跺脊鍑轟笉涓瀹氫細鎴愬姛錛屾墍浠ュ鏋滀笉鎴愬姛鐨勮瘽錛岃繖鏉¤竟灝變笉鑳藉湪褰撴椂浣跨敤銆傚洜姝よ繖涔熷氨鏄負浠涔堝湪e3璺寵漿鍒皌0涔嬪悗錛宼1鐭ラ亾寰鍥炶煩鐨勬槸e1鑰屼笉鏄埆鐨勪粈涔堝湴鏂?#8212;—灝卞鍚屼負浠涔圕++鐨勫嚱鏁版墽琛屽畬涔嬪悗鎬繪槸鐭ラ亾濡備綍璺寵漿鍥炶皟鐢ㄥ畠鐨勫湴鏂逛竴鏍?#8212;—鍥犱負鎶婁俊鎭帹鍏ヤ簡鍫嗘爤銆?/p> <p>閭g幇鍦ㄦ垜浠氨鏉ョ湅涓涓嬶紝褰撴墍鏈夌殑闈炵粓緇撶璺寵漿閮藉鐞嗘帀涔嬪悗錛屼細鍙樻垚浠涔堟牱瀛愬惂錛堣繖涓浘鐪熸槸澶嶆潅鍜屼貢鍒版垜涓嶆兂鐢誨晩錛夛紝涓轟簡璁╁浘鍙樺緱涓嶉偅涔堢碂緋曪紝鎴戞妸shift閮藉彉鎴愮傳鑹詫紝reduce閮藉彉鎴愮豢鑹詫細</p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_6.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_thumb_1.png" width="1191" height="1528" /></a></p> <p>鍦ㄦ坊鍔爏hift鍜宺educe杈逛箣鍓嶏紝姣忎竴鏉¤竟閮芥槸鏈夎緭鍏oken鐨勩備絾鏄垜浠垰鍒氭坊鍔犱笂鍘葷殑shift鍜宺educe杈瑰嵈鏄笉杈撳叆token鐨勶紝鎵浠ヤ粬浠槸epsilon杈癸紝涓嬩竴姝ュ氨鏄娑堥櫎浠栦滑銆備笂闈㈣繖涓浘娑堥櫎浜唀psilon杈逛箣鍚庯紝浼氬彉鎴愪竴涓姸鎬佸緢灝戯紝浣嗘槸姣忎竴鏉¤竟闄勫甫鐨勪俊鎭兘浼氶潪甯稿錛岃屼笖鍍弉1榪欑緇忓父鍒拌揪鐨勭姸鎬侊紙鍥犱負鍥涘垯榪愮畻閲岄潰鏈夊緢澶氭暟瀛楋級灝嗘仮澶嶅皠鍑烘棤鏁版潯杈廣傚埌浜嗚繖閲岃繖涓姸鎬佹満宸茬粡鍐嶄篃鐢諱笉鍑烘潵浜嗐傛墍浠ユ垜涓嬮潰灝卞彧鎷夸袱涓緥瀛愭潵鐢匯備笅闈㈣灞曠ず鐨勬槸鐢‥xp鏉arse鍗曠嫭鐨勪竴涓暟瀛椾細璧扮殑杈癸紝褰撶劧灝辨槸Exp –> Term –> Factor –> Number浜嗭細</p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_8.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_thumb_2.png" width="557" height="504" /></a></p> <p>灝變細琚鐞嗘垚錛?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_14.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_thumb_3.png" width="676" height="457" /></a></p> <p>娉ㄦ剰杈逛笂闈㈢殑淇℃伅鏄鎸夐『搴忛噸鏂板彔鍔犲湪涓璧風殑銆傚綋鎵鏈夌殑epsilon杈歸兘鍘繪帀浜嗕箣鍚庯紝鎴戜滑灝卞緱鍒頒簡鏈緇堢殑涓涓姸鎬佹満銆傛渶閲嶈鐨勪竴浠朵簨鎯呭嚭鐜頒簡銆傛垜浠煡閬擄紝鍙戞槑LR鍜孡ALR榪欑涓滆タ灝卞熀鏈笂鏄負浜嗗鐞嗗乏閫掑綊鐨勶紝鎵浠ヨ繖縐嶅浘灝卞彲浠ュ湪鍘婚櫎epsilon杈圭殑榪囩▼涓嚜鍔ㄥ彂鐜板乏閫掑綊銆傝繖鏄庝箞鍋氬埌鐨勫憿錛熷彧瑕佸湪鍘婚櫎epsilon杈圭殑鏃跺欙紝鍙戠幇浜嗕竴鏉″畬鍏ㄧ敱shift榪欑epsilon杈圭粍鎴愮殑鐜紝閭d箞宸﹂掑綊灝卞彂鐜頒簡銆備負浜嗘柟渚匡紝鎴戜滑鍙互鍙鐞嗙洿鎺ュ乏閫掑綊——灝辨槸榪欑鐜殑闀垮害鏄?鐨勩備笉鍖呭惈闂存帴宸﹂掑綊鐨勯棶娉曟槸寰堝鏄撳啓鍑烘潵鐨勩傚綋鐒惰繖縐嶇幆騫朵笉涓瀹氭槸棣栧熬鐩告帴鐨勶紝璀璇存垜浠湪澶勭悊e0鐨勬椂鍊欏氨浼氬彂鐜癳0->t0->t0榪欑鐜紙褰撶劧涓ユ牸鏉ヨ鐜彧鏈夋渶鍚庝竴鎴殑榪欎釜閮ㄥ垎錛夈傛垜浠殑紼嬪簭瑕佸緢濂藉湴搴斿榪欑鎯呭喌銆傚洜涓烘垜浠彧鎺ュ彈鐩存帴宸﹂掑綊錛屾墍浠ョ被浼艱繖縐嶇粨鏋勭殑epsilon璺緞鍙互鐩存帴鐨勬姏寮冧粬錛屽洜涓簍0->t0浼氳t0鐘舵佸崟鐙鐞嗘帀銆傚洜姝よ繖鏍峰仛騫朵笉浼氭紡鎺変粈涔堛?/p> <p>緇嗗績鐨勬湅鍙嬪彲鑳戒細鍙戠幇錛岃繖涓粨鏋勭殑鍥炬槸涓嶈兘鐩存帴澶勭悊鍙抽掑綊鐨勶紙鎬諱箣宸﹂掑綊鍜屽彸閫掑綊鎬昏鏈変竴涓細璁╀綘鐨勭姸鎬佹満鍌婚煎氨鏄簡錛侊級銆傚叧浜庡浣曞鐞嗘湁閫掑綊錛堝叾瀹炲唴瀹逛篃涓嶅鏉傦級鍦版柟娉曚細鍦?#8220;涓嬬瘒”鎻忚堪鍑烘潵銆傞偅澶勭悊宸﹂掑綊鏈変粈涔堢敤鍛紵涓句釜渚嬪瓙錛屾垜浠殑e0->e2灝辨槸涓涓乏閫掑綊錛岃屼粬浼氬湪涔嬪墠鐨勬楠よ澶勭悊鎴恠hift(e0->e0)鍜宺educe(e1->e2)銆傛垜浠璁頒笅shift鍜宺educe鐨勫搴斿叧緋伙紝閭d箞褰撴垜浠壘鍒頒竴涓乏閫掑綊鐨剆hift涔嬪悗錛屾垜浠氨鍙互鎶婂搴旂殑reduce緇欐爣璁版垚“left-recursive-reduce”銆傝繖鏄竴涓湪鏋勯犺娉曟爲鐨勬椂鍊欙紝闈炲父鍏抽敭鐨勪竴縐嶆瀯閫犳寚浠ゃ?/p> <p>澶勭悊瀹岃繖浜涗箣鍚庯紝鎴戜滑鍙互鎶婂乏閫掑綊鐨剆hift杈瑰叏閮ㄥ垹鎺夛紝鏈鍚庢妸token鍜宻tate閮界粺緇熷鐞嗘垚榪炵畫鐨勬暟瀛楋紝鍋氭垚涓寮燵state, token] –> [transitions]鐨勪簩緇磋〃錛屾瘡涓涓〃鐨勫厓绱犳槸transition鐨勫垪琛ㄣ備負浠涔堟槸榪欐牱鍛紵鍥犱負鎴戜滑瀵逛竴涓猻tate杈撳叆涓涓猼oken涔嬪悗錛岀敱浜庝繚瀛樼潃state鐨勫爢鏍堬紙浣犺繕璁板緱鍚楋紵shift==push錛宺educe==pop錛夌殑鏍堥《鑻ュ共涓厓绱犵殑涓嶅悓錛屽彲鑳戒細璧頒笉閫氱殑璺嚎銆備簬鏄渶鍚庢垜浠氨寰楀埌浜嗚繖涔堜竴寮犲浘銆?/p> <p>涓嬮潰榪欏紶鍥懼彲浠ラ氳繃榪愯gac.codeplex.com涓婇潰鐨凜ommon\UnitTest\UnitTest.sln錛圴S2012闄愬畾錛変箣鍚庯紝鍦–ommon\UnitTest\TestFiles\Parsing.Calculator.Table.txt閲岄潰鎵懼埌銆傝繖涓緇勬枃浠墮兘鏄垜鍦ㄦ祴璇曠姸鎬佹満鐨勬椂鍊檒og涓嬫潵鐨勩?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_16.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/5a2a95565d03_AB00/image_thumb_6.png" width="1934" height="1812" /></a></p> <p>濡傛灉澶у鏈塚S2012鐨勮瘽錛岄氳繃榪愯鎴戝噯澶囩殑鍑犱釜杈撳叆錛岃濡傝“1*2+3*4”錛屽氨鍙互鍦≒arsing.Calculator.[2].txt閲岄潰鎵懼埌鎵鏈夌姸鎬佽煩杞殑杞ㄨ抗銆傚洜涓烘垜浠繪槸闇瑕乸arse涓涓狤xp錛屾墍浠ユ垜浠粠22: Exp.RootStart寮濮嬨傛垜浠亣璁総oken stream鐨勭涓涓拰鏈鍚庝竴涓垎鍒槸$TokenBegin鍜?TokenFinish銆備笂鍥劇殑$TryReduce鏄負浜嗗簲瀵瑰彸閫掑綊鑰岃璁″嚭鏉ョ殑涓縐嶇壒孌婅緭鍏ャ傜敱浜庡洓鍒欒繍綆楅噷闈㈠茍娌℃湁鍙抽掑綊錛屾墍浠ヨ繖涓鍒楀氨鏄┖鐨勶細</p> <p>StartState: 22[Exp.RootStart]<br />$TokenBegin => 23[Exp.Start]<br />    State Stack: <br />NUMBER[1] => 2[Number.1]<br />    State Stack: 23[Exp.Start], 21[Term.Start], 19[Factor.Start]<br />    Shift 23[Exp]<br />    Shift 21[Term]<br />    Shift 19[Factor]<br />    Assign value<br />    Create NumberExpression<br />MUL[*] => 5[Term.3]<br />    State Stack: 23[Exp.Start]<br />    Reduce 19[Factor]<br />    Using<br />    Reduce 21[Term]<br />    Using<br />    LR-Reduce 21[Term]<br />    Assign firstOperand<br />    Setter binaryOperator = Mul<br />    Create BinaryExpression<br />NUMBER[2] => 2[Number.1]<br />    State Stack: 23[Exp.Start], 5[Term.3], 19[Factor.Start]<br />    Shift 5[Term]<br />    Shift 19[Factor]<br />    Assign value<br />    Create NumberExpression<br />ADD[+] => 10[Exp.3]<br />    State Stack: <br />    Reduce 19[Factor]<br />    Using<br />    Reduce 5[Term]<br />    Assign secondOperand<br />    Reduce 23[Exp]<br />    Using<br />    LR-Reduce 23[Exp]<br />    Assign firstOperand<br />    Setter binaryOperator = Add<br />    Create BinaryExpression<br />NUMBER[3] => 2[Number.1]<br />    State Stack: 10[Exp.3], 21[Term.Start], 19[Factor.Start]<br />    Shift 10[Exp]<br />    Shift 21[Term]<br />    Shift 19[Factor]<br />    Assign value<br />    Create NumberExpression<br />MUL[*] => 5[Term.3]<br />    State Stack: 10[Exp.3]<br />    Reduce 19[Factor]<br />    Using<br />    Reduce 21[Term]<br />    Using<br />    LR-Reduce 21[Term]<br />    Assign firstOperand<br />    Setter binaryOperator = Mul<br />    Create BinaryExpression<br />NUMBER[4] => 2[Number.1]<br />    State Stack: 10[Exp.3], 5[Term.3], 19[Factor.Start]<br />    Shift 5[Term]<br />    Shift 19[Factor]<br />    Assign value<br />    Create NumberExpression<br />$TokenFinish => 11[Exp.RootEnd]<br />    State Stack: <br />    Reduce 19[Factor]<br />    Using<br />    Reduce 5[Term]<br />    Assign secondOperand<br />    Reduce 10[Exp]<br />    Assign secondOperand</p> <p>鎴戜滑鎶婃墍鏈夎煩杞繃鐨則ransition鐨勪俊鎭兘璁板綍涓嬫潵錛屽氨鍙互鏋勯犺娉曡嫃浜嗐傛垜浠兂璞′竴涓嬶紝鍦ㄦ墽琛岃繖浜涙寚浠ょ殑鏃跺欙紝閬囧埌NUMBER[4]灝辯瓑浜庤幏寰椾簡涓涓唴瀹逛負4鐨則oken錛宻hift鐨勮瘽灝辨槸寰鍫嗘爤閲岄潰push榪涗竴涓姸鎬佺殑鍚嶅瓧錛岃宺educe鍒欐槸寮瑰嚭銆?/p> <p>鐩稿搴旂殑錛屽洜涓烘瘡涓涓枃娉曢兘浼氬垱寤轟竴涓璞★紝鎵浠ユ垜浠湪鍒濆鍖栫殑鏃跺欙紝瑕佸厛鏀句竴涓┖瀵硅薄鍦ㄥ爢鏍堜笂銆俿hift涓嬈″氨鍐嶅垱寤轟竴涓┖鐨勫璞ush榪涘幓錛宺educe鐨勬椂鍊欏氨鎶婃爤欏剁殑瀵硅薄寮瑰嚭鏉ヤ綔涓?#8220;寰呭鐞嗗璞?#8221;錛寀sing浜嗗氨鎶婂緟澶勭悊瀵硅薄鍜屾爤欏跺璞″悎騫訛紝left-reduce灝辨槸鎶婃爤欏跺璞″脊鍑烘潵浣滀負寰呭鐞嗗璞$殑鍚屾椂錛宲ush涓涓┖瀵硅薄榪涘幓銆俛ssign fieldName灝辨槸鎶?#8220;寰呭鐞嗗璞?#8221;淇濆瓨鍒版爤欏跺璞$殑鍙仛fieldName鐨勬垚鍛樺彉閲忛噷闈㈠幓銆傚鏋滄爤欏跺璞′負絀猴紝閭d箞琚繚瀛樼殑瀵硅薄灝辨槸鍒氬垰杈撳叆鐨勯偅涓猼oken浜嗐傚洜姝ゆ垜浠粠澶村埌灝炬墽琛屼竴閬嶄箣鍚庯紝灝卞彲浠ュ緱鍒頒笅闈㈢殑涓棰楄娉曟爲錛?/p> <p>BinaryExpression {<br />    binaryOperator = [Add]<br />    firstOperand = BinaryExpression {<br />        binaryOperator = [Mul]<br />        firstOperand = NumberExpression {<br />            value = [1]<br />        }<br />        secondOperand = NumberExpression {<br />            value = [2]<br />        }<br />    }<br />    secondOperand = BinaryExpression {<br />        binaryOperator = [Mul]<br />        firstOperand = NumberExpression {<br />            value = [3]<br />        }<br />        secondOperand = NumberExpression {<br />            value = [4]<br />        }<br />    }<br />}</p> <p>鍩烘湰涓妏arsing鐨勮繃紼嬪氨緇撴潫浜嗐傚湪“涓嬬瘒”——涔熷氨鏄紙鍏級——閲岄潰錛屾垜浼氳榪板浣曞鐞嗗彸閫掑綊錛岀劧鍚庤繖涓郴鍒楀熀鏈笂灝辮瀹岀粨浜嗐?/p> <img src ="http://www.shnenglu.com/vczh/aggbug/196893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2013-01-01 15:52 <a href="http://www.shnenglu.com/vczh/archive/2013/01/01/196893.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍙厤緗娉曞垎鏋愬櫒寮鍙戠邯浜嬶紙鍥涳級&mdash;&mdash;鏋勯犱竴涓湡姝h兘鐢ㄧ殑鐘舵佹満錛堜笂錛?/title><link>http://www.shnenglu.com/vczh/archive/2012/12/23/196524.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Sat, 22 Dec 2012 16:28:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2012/12/23/196524.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/196524.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2012/12/23/196524.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/196524.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/196524.html</trackback:ping><description><![CDATA[<p>鏈潵璇磋繖涓綃囨枃绔犺鎶婃瀯閫犵‘瀹氭х姸鎬佹満鍜宭ook ahead璁插畬鐨勶紝褰撴垜鐪熸瑕佸啓鐨勬椂鍊欏彂鐜頒笢瑗垮お澶氾紝鍙ソ鍒嗘垚涓ょ瘒浜嗐?a href="http://www.shnenglu.com/vczh/archive/2012/12/07/196085.html" target="_blank">涓婁竴綃囨枃绔?/a>璇撮亾涓涓熀鏈殑鐘舵佹満鏄浣曟瀯閫犲嚭鏉ョ殑錛屼絾鏄牴鎹?a href="http://www.shnenglu.com/vczh/archive/2012/11/21/195503.html" target="_blank">絎竴綃囨枃绔?/a>鐨勮娉曪紝榪欎竴嬈¤璁$殑鏂囨硶鏄負浜嗙洿鎺ユ瀯閫犲嚭璇硶鏍戞湇鍔$殑錛屾墍浠ュ繀鐒跺湪鎵ц鐘舵佹満鐨勬椂鍊欏氨瑕佽幏寰楁瀯閫犺娉曟爲鐨勪竴鍒囦俊鎭傚鏋滆嚜宸卞紑鍙戣繃綾諱技鐨勪笢瑗垮氨浼氱煡閬擄紝綾諱技LALR榪欑涓滆タ錛屼綘鍙互寰堝鏄撶殑鎶婃暣涓瓧絎︿覆鍒嗘瀽瀹屽垽鏂粬鏄笉鏄睘浜庤繖涓狶ALR鐘舵佹満鎻忚堪鐨勮繖涓泦鍚堬紝浣嗘槸浣犲嵈涓嶈兘鎷垮埌璇硶鍒嗘瀽鎵璧扮殑璺緞錛屼篃灝辨槸璇翠綘寰堥毦鐩存帴鎷垮埌閭i鍒嗘瀽鏍戙傛病鏈夊垎鏋愭爲鑲畾鏄仛涓嶅嚭璇硶鏍戠殑銆傚洜姝ゆ垜浠緱鎶婁竴浜涗俊鎭彃鍏ュ埌鐘舵佹満閲岄潰錛屾墠鑳芥渶緇堟妸鍒嗘瀽鏍戯紙騫朵笉涓瀹氱湡鐨勮琛ㄨ揪鎴愭爲錛屽儚涓婁竴綃囨枃绔犵殑“鍒嗘瀽璺緞”錛堝叾瀹炲氨鏄垎鏋愭爲鐨勪竴縐嶅彲鑳界殑琛ㄨ揪褰㈠紡錛夋墍紜畾鐨勮娉曟爲鏋勯犲嚭鏉ャ?/p> <p>灝卞儚銆?a href="http://www.shnenglu.com/vczh/archive/2008/05/22/50763.html" target="_blank">鏋勯犳鍒欒〃杈懼紡寮曟搸</a>銆嬩竴鑸粰鐘舵佹満娣誨姞淇℃伅鐨勬柟娉曪紝灝辨槸鎶婁竴浜涢檮鍔犵殑鏁版嵁鍔犲埌鐘舵佷笌鐘舵佷箣闂寸殑璺寵漿綆ご閲岄潰鍘匯備負浜嗗艦璞$殑琛ㄨ揪榪欎釜浜嬫儏錛屾垜灝辨嬁絎竴綃囨枃绔犵殑鍥涘垯榪愮畻寮忓瓙鏉ヤ婦渚嬨傚湪榪欓噷鎴戜負浜嗗ぇ瀹舵柟渚匡紝閲嶅涓涓嬭繖涓枃娉曠殑鍐呭錛堥櫎鍘諱簡璇爲涔﹀0鏄庯級錛?/p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 5px; background-color: #f5f5f5; padding-left: 5px; padding-right: 5px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 5px" class="cnblogs_code"><pre>token NAME = <span style="color: #800000">"</span><span style="color: #800000">[a-zA-Z_]/w*</span><span style="color: #800000">"</span><span style="color: #000000">; token NUMBER </span>= <span style="color: #800000">"</span><span style="color: #800000">/d+(./d+)</span><span style="color: #800000">"</span><span style="color: #000000">; token ADD </span>= <span style="color: #800000">"</span><span style="color: #800000">/+</span><span style="color: #800000">"</span><span style="color: #000000">; token SUB </span>= <span style="color: #800000">"</span><span style="color: #800000">-</span><span style="color: #800000">"</span><span style="color: #000000">; token MUL </span>= <span style="color: #800000">"</span><span style="color: #800000">/*</span><span style="color: #800000">"</span><span style="color: #000000">; token DIV </span>= <span style="color: #800000">"</span><span style="color: #800000">//</span><span style="color: #800000">"</span><span style="color: #000000">; token LEFT </span>= <span style="color: #800000">"</span><span style="color: #800000">/(</span><span style="color: #800000">"</span><span style="color: #000000">; token RIGHT </span>= <span style="color: #800000">"</span><span style="color: #800000">/)</span><span style="color: #800000">"</span><span style="color: #000000">; token COMMA </span>= <span style="color: #800000">"</span><span style="color: #800000">,</span><span style="color: #800000">"</span><span style="color: #000000">; rule NumberExpression Number </span>=<span style="color: #000000"> NUMBER : value; rule FunctionExpression Call </span>= NAME : functionName <span style="color: #800000">"</span><span style="color: #800000">(</span><span style="color: #800000">"</span> [ Exp : arguments { <span style="color: #800000">"</span><span style="color: #800000">,</span><span style="color: #800000">"</span> Exp : arguments } ] <span style="color: #800000">"</span><span style="color: #800000">)</span><span style="color: #800000">"</span><span style="color: #000000">; rule Expression Factor </span>= !Number | !<span style="color: #000000">Call; rule Expression Term </span>= !<span style="color: #000000">Factor; </span>= Term : firstOperand <span style="color: #800000">"</span><span style="color: #800000">*</span><span style="color: #800000">"</span> Factor : secondOperand <span style="color: #0000ff">as</span> BinaryExpression with { binaryOperator = <span style="color: #800000">"</span><span style="color: #800000">Mul</span><span style="color: #800000">"</span><span style="color: #000000"> }; </span>= Term : firstOperand <span style="color: #800000">"</span><span style="color: #800000">/</span><span style="color: #800000">"</span> Factor : secondOperand <span style="color: #0000ff">as</span> BinaryExpression with { binaryOperator = <span style="color: #800000">"</span><span style="color: #800000">Div</span><span style="color: #800000">"</span><span style="color: #000000"> }; rule Expression Exp </span>= !<span style="color: #000000">Term; </span>= Exp : firstOperand <span style="color: #800000">"</span><span style="color: #800000">+</span><span style="color: #800000">"</span> Term : secondOperand <span style="color: #0000ff">as</span> BinaryExpression with { binaryOperator = <span style="color: #800000">"</span><span style="color: #800000">Add</span><span style="color: #800000">"</span><span style="color: #000000"> }; </span>= Exp : firstOperand <span style="color: #800000">"</span><span style="color: #800000">-</span><span style="color: #800000">"</span> Term : secondOperand <span style="color: #0000ff">as</span> BinaryExpression with { binaryOperator = <span style="color: #800000">"</span><span style="color: #800000">Sub</span><span style="color: #800000">"</span> };</pre></div> <p>閭d箞鎴戜滑鎶婅繖涓枃鍙戣漿鎴愮姸鎬佹満涔嬪悗錛岃緇欒煩杞姞涓婁粈涔堝憿錛熶粠鐩磋涓婃潵璇達紝璺寵漿鐨勬椂鍊欐垜浠細鏈夊叚縐嶈騫茬殑浜嬫儏錛?br />1銆丆reate錛氳繖涓枃娉曞垱寤虹殑璇硶鏍戣妭鐐規槸鏌愪釜綾誨瀷鐨勶紙鍖哄埆浜庡湪榪欎竴鍒葷粰榪欎釜闂硶鍒涘緩涓涓繑鍥炰粈涔堢被鍨嬬殑璇硶鏍戣妭鐐癸級<br />2銆丼et錛氱粰鍒涘緩鐨勮娉曟爲鑺傜偣鐨勬煇涓垚鍛樺彉閲忚緗竴涓寚瀹氱殑鍊?br />3銆丄ssign錛氱粰鍒涘緩鐨勮娉曟爲鑺傜偣鐨勬煇涓垚鍛樺彉閲忚緗繖涓嬈¤煩杞殑絎﹀彿浜х敓鐨勮娉曟爲鑺傜偣錛堣濡傝Exp = Exp: firstOperand “+” Term: secondOperand錛岃蛋Term鐨勬椂鍊欙紝涓涓娉曟爲鑺傜偣灝變細琚玜ssign緇欓偅涓彨鍋歴econdOperand鐨勬垚鍛樺彉閲忥級<br />4銆乁sing錛氫嬌鐢ㄨ繖涓嬈¤煩杞殑絎﹀彿浜х敓鐨勮娉曟爲鑺傜偣鏉ュ仛榪欐鏂囨硶鐨勮繑鍥炲鹼紙璀璇碏actor = !Number | !Caller榪欎竴鏉★級<br />5銆丼hift錛氱暐<br />6銆丷educe錛氱暐</p> <p>鍦ㄨ繖閲屾垜浠茍娌℃湁鏍囪鏁翠釜鏂囨硶浠庡摢涓涓潪緇堢粨絎﹀紑濮嬶紝鍥犱負鍦ㄥ疄闄呰繃紼嬩腑錛屽叾瀹炲垎鏋愬笀鍙互浠庝換浣曚竴涓枃娉曞紑濮嬬殑銆傝濡傝鍐橧DE鐨勬椂鍊欙紝鎴戜滑鍙兘鍦ㄦ煇浜涙儏鍐典笅浠呬粎鍙渶瑕佸垎鏋愪竴涓〃杈懼紡銆傛墍浠ヨ冭檻鍒版瘡涓涓潪緇堢粨絎﹂兘鏈夊彲鑳借鐢ㄥ埌錛屽洜姝ゆ垜浠殑“Token嫻佸紑濮?#8221;鍜?#8220;Token嫻佺粨鏉?#8221;灝變細鍦ㄦ瘡涓涓潪緇堢粨絎︾殑鐘舵佹満涓兘鍑虹幇銆傚洜姝ゅ湪絎竴姝ュ垱寤篍psilon PDA錛堜笅鎺ㄨ嚜鍔ㄦ満錛夌殑鏃跺欙紝灝卞彲浠ュ厛鐩存帴鐢熸垚銆傚湪榪欓噷鎴戜滑鎷縀xp鍋氫緥瀛愶細</p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/e061a408f76c_139DA/image_18.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/e061a408f76c_139DA/image_thumb_8.png" width="644" height="265" /></a></p> <p>鍙岃櫄綰夸唬琛ㄧ殑鏄疶oken嫻佸拰Token嫻佺粨鏉燂紝榪欏茍涓嶆槸鎴戜滑鐜板湪鍏沖績鐨勪簨鎯呫傚湪鍓╀笅鐨勮漿鎹腑錛屽疄鐜版槸鍏鋒湁杈撳叆鐨勮漿鎹紝鑰岃櫄綰垮垯鏄病鏈夎緭鍏ョ殑杞崲錛堜竴鑸О涓篹psilon杈癸級銆?/p> <p>鍦ㄨ繖閲屾垜浠鏄庣‘涓涓蹇?#8212;—鍒嗘瀽璺緞銆傚垎鏋愯礬寰勪唬琛ㄧ殑鏄痶oken鍦?#8220;嫻?#8221;榪囩姸鎬佹満鐨勬椂鍊欙紝鐘舵佹槸濡備綍璺寵漿鐨勩傚洜姝ゅ浜庡疄闄呯殑鍒嗘瀽榪囩▼錛屽垎鏋愯礬寰勫叾瀹炲氨鏄垎鏋愭爲鐨勪竴縐嶈〃杈懼艦寮忋傝屽湪鐘舵佹満閲岄潰錛屽垎鏋愯礬寰勫垯浠h〃涓鏉′粠寮濮嬪埌緇撳熬鐨勫彲鑳界殑璺緞銆傝濡傝鍦ㄨ繖閲岋紝鍒嗘瀽璺緞鍙互鏈変笁鏉★細<br />$e –> e1 –> e2 –> e$<br />$e –> e3 –> e8 –> e7 –> e6 –> e5 –> e4 –> e$<br />$e –> e9 –> e14 –> e13 –> e12 –> e11 –> e10 –> e$</p> <p>鍥犳鎴戜滑鍙互娓呮錛屼竴鏉¤礬寰勪笂鏄笉鑳藉嚭鐜板涓猚reate鐨勶紝鍚﹀垯浣犲氨涓嶇煡閬撳簲璇ュ垱寤虹殑鏄粈涔堜簡銆傚綋鐒禼reate鍜寀sing閮戒笉鑳藉悓鏃跺嚭鐜幫紝using涔熶笉鑳芥湁澶氫釜銆傝屼笖鐢變簬create鍜宻et閮芥槸鍦ㄦ弿榪拌繖涓潪緇堢粨絎︼紙鍦ㄨ繖閲屾槸Exp錛夋墍鍒涘緩鐨勮娉曟爲鑺傜偣鐨勭被鍨嬪拰灞炴э紝璺熸墽琛屼粬浠殑鏃舵満鏃犲叧錛屾墍浠ュ叾瀹炲湪鍚屼竴鏉″垎鏋愯礬寰勯噷闈紝create鍜宻et鏀懼湪鍝噷閮芥病鍏崇郴銆傚氨璀璇村湪涓婇潰鐨勭浜屾潯鍒嗘瀽璺緞閲岄潰錛宑reate鏄湪e6->e5閲岄潰鏍囪鍑烘潵鐨勩傚氨綆椾粬縐誨姩鍒頒簡e3->e8錛屽仛鐨勪簨鎯呬篃涓鏍楓傚弽姝e彧瑕佷竴鏉¤礬寰勪笂鏍囪浜哻reate錛岄偅涔堜粬鍦ㄨ繖鏉¤礬寰勮紜畾涔嬪悗錛屽氨涓瀹氫細create鎵鎸囧畾鐨勫叿浣撶被鍨嬬殑璇硶鏍戣妭鐐廣傝繖鏄浉褰撻噸瑕佺殑錛屽洜涓哄湪鍚庨潰鐨勫垎鏋愪腑錛屾垜浠緢鍙兘闇瑕佺Щ鍔╟reate鍜宻et鐨勫叿浣撲綅緗?/p> <p>璺熶笂涓綃囨枃绔犺鐨勪竴鏍鳳紝鎺ヤ笅鏉ョ殑涓姝ュ氨鏄幓闄psilon杈逛簡銆傜粨鏋滃涓嬶細</p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/e061a408f76c_139DA/image_20.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/e061a408f76c_139DA/image_thumb_9.png" width="644" height="332" /></a></p> <p>闈㈠榪欑鐘舵佹満錛屽幓闄psilon杈瑰氨涓嶈兘璺熷鐞嗘鍒欒〃杈懼紡涓鏍風畝鍗曠殑鍘婚櫎浜嗐傞鍏堬紝鎵鏈夌殑緇堢粨鐘舵?#8212;—涔熷氨鏄墍鏈夌粡榪囨垨鑰呬笉緇忚繃epsilon杈逛箣鍚庯紝閫氳繃“Token嫻佺粨鏉?#8221;絎﹀彿榪炴帴鍒版渶鍚庝竴涓姸鎬佺殑鐘舵侊紝鍦ㄨ繖閲屽垎鍒槸e2銆乪6鍜宔12——閮芥槸涓嶈兘鍒犳帀鐨勩傝屼笖鎵鏈夌殑“Token嫻佸紑濮?#8221;鍜?#8220;Token嫻佺粨鏉?#8221;——涔熷氨鏄浘閲岄潰鐨?杞崲——鏄笉鑳藉甫鏈変俊鎭殑銆傛墍浠ユ垜浠氨浼氱湅鍒癳6鍚庨潰鐨勪俊鎭叏閮ㄨ縐誨姩鍒頒簡e7->e6榪欐潯杈逛笂闈€傜敱浜巆reate鍜宻et鐨勬祦鍔ㄦэ紝鎴戜滑榪欎箞鍋氬浜庣姸鎬佹満鐨勫畾涔夊畬鍏ㄦ病鏈夊獎鍝嶃?/p> <p>鍒頒簡榪欓噷榪樻病瀹岋紝鍥犱負榪欎釜鐘舵佹満榪樻槸鏈夊緢澶氬啑浣欑殑鐘舵佺殑銆傝濡傝e8鍜宔14銆乪7鍜宔13銆乪2鍜宔6鍜宔12瀹為檯涓婃槸鍙互鍚堝茍鐨勩傚悎騫剁殑絳栫暐鍏跺疄鍗佸垎綆鍗曪細</p> <p>1銆佸鏋滄垜浠湁璺寵漿e0->e1鍜宔0->e2錛屽茍涓斾袱涓煩杞墍鎼哄甫鐨則oken杈撳叆鍜屼俊鎭畬鍏ㄤ竴鑷寸殑璇濓紝閭d箞e1鍜宔2灝卞彲浠ュ悎騫躲?br />2銆佸鏋滄垜浠湁璺寵漿e1->e0鍜宔2->e0錛屽茍涓斾袱涓煩杞墍鎼哄甫鐨則oken杈撳叆鍜屼俊鎭畬鍏ㄤ竴鑷寸殑璇濓紝閭d箞e1鍜宔2灝卞彲浠ュ悎騫躲?/p> <p>鎵浠ュ浜巈8鍜宔14鎴戜滑鏄畬鍏ㄥ彲浠ュ悎騫剁殑銆傞偅涔坋7鍜宔13鎬庝箞鍔炲憿錛熸牴鎹甤reate鍜宻et鐨勬祦鍔ㄦэ紝鎴戜滑鍙鎶婅繖涓や釜涓滆タ鎸埌浠栫殑鍓嶉潰涓涓垨鑰呰嫢騫蹭釜璺寵漿鍘伙紝閭h繖涓や釜鐘舵佸氨鍙互鍚堝茍浜嗐備負浜嗚綆楁硶鏇村姞鐨勭畝鍗曪紝鎴戜滑閬囧埌涓や釜璺寵漿綾諱技鐨勬椂鍊欙紝鎬繪槸鍏堟尓鍔╟reate鍜宻et錛岀劧鍚庡啀鐪嬬湅鏄笉鏄湡鐨勫彲浠ュ悎騫躲傛墍浠ヨ繖涓姝ュ鐞嗗畬涔嬪悗灝變細鍙樻垚涓嬮潰榪欎釜鏍峰瓙錛?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/e061a408f76c_139DA/image_22.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/e061a408f76c_139DA/image_thumb_10.png" width="644" height="372" /></a></p> <p>鎴戜滑鍦ㄤ笉鏀瑰彉鐘舵佹満璇箟鐨勬儏鍐典笅錛屾妸Exp鐨勪笁涓姸鎬佹満鏈緇堝帇緙╂垚浜嗚繖涓牱瀛愩傜湅榪囦笂涓綃囨枃绔犵殑鍚屽浠兘鐭ラ亾錛屼笅涓姝ュ氨鏄鎶婃墍鏈夌殑鐘舵佹満緇熺粺閮借繛鎺ヨ搗鏉ヤ簡銆傚叧浜庡湪榪炴帴鐨勬椂鍊欏浣曞叿浣撴搷浣滆漿鎹㈤檮甯︾殑淇℃伅銆佷互鍙婂仛鍑轟竴涓‘瀹氭х殑涓嬫帹鐘舵佹満鐨勬墍鏈変簨鎯呭皢鍦ㄤ笅涓綃囨枃绔犺緇嗚В閲娿傚ぇ瀹舵暚璇鋒湡寰呫?/p><img src ="http://www.shnenglu.com/vczh/aggbug/196524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2012-12-23 00:28 <a href="http://www.shnenglu.com/vczh/archive/2012/12/23/196524.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍙厤緗娉曞垎鏋愬櫒寮鍙戠邯浜嬶紙涓夌偣浜旓級&mdash;&mdash;鐢熸垚涓嬫帹鑷姩鏈虹殑鍏蜂綋姝ラhttp://www.shnenglu.com/vczh/archive/2012/12/07/196085.html闄堟鐎?vczh)闄堟鐎?vczh)Fri, 07 Dec 2012 10:49:00 GMThttp://www.shnenglu.com/vczh/archive/2012/12/07/196085.htmlhttp://www.shnenglu.com/vczh/comments/196085.htmlhttp://www.shnenglu.com/vczh/archive/2012/12/07/196085.html#Feedback2http://www.shnenglu.com/vczh/comments/commentRss/196085.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/196085.html鍒氬垰鍙戜簡涓婁竴綃囨枃绔?/a>涔嬪悗灝卞彂鐜扮姸鎬佹満鐢婚敊浜嗐傝櫧鐒禠iveWriter鏈夋墦寮鍗氬騫朵慨鏀規枃绔犵殑鍔熻兘錛屼笉榪囦負浜嗚鎴戠暀涓嬩竴涓暀璁紝鎴戣繕鏄喅瀹氬彂涓綃囧嫎璇傝繖涓暀璁氨鏄紝浣滃垎鏋愮殑鏃跺欎笉瑕侀殢渚?#8220;璺蟲”錛岃涓姝ヤ竴姝ユ潵灝變竴姝ヤ竴姝ユ潵銆傚叾瀹炰漢鍛紝灝辨槸寰堝鏄撳繕鎺変互鍓嶇殑鏁欒鐨勪簡銆傜涓涓憡璇夋垜涓嶈兘榪欎箞騫茬殑浜哄叾瀹炴槸灝忓涓夊勾綰х殑鏁板鑰佸笀銆傚綋鏃舵垜鍥犱負鎳掑緱鍐欏瓧錛屾墍浠ヨ綆楀簲鐢ㄩ鐨勬椂鍊欑渷浜嗗嚑姝ワ紝琚壒璇勪簡銆?/p>

鏁呬簨灝變粠鐘舵佹満寮濮嬨傛枃娉曟垜灝變笉閲嶅浜嗭紝瑙佷笂涓綃囨枃绔犮傜幇鍦ㄦ垜浠粠鐘舵佹満寮濮嬨傜涓涓姸鎬佹満鏄洿鎺ヤ粠鏂囨硶鍙樿繃鏉ョ殑錛?/p>

image

鐒跺悗鎴戜滑鎶婃墍鏈夌殑闈炵粓緇撶璺寵漿閮介氳繃Shift鍜孯educe榪炴帴鍒拌闈炵粓緇撶鎵浠h〃鐨勭姸鎬佹満鐨勭姸鎬佷笂闈紝灝變細鍙樻垚涓嬮潰鐨勫浘銆傚叿浣撶殑鍋氭硶鏄紝瀵逛簬姣忎竴鏉¢潪緇堢粨絎︾殑璺寵漿錛岃濡傝S0 –> Symbol –> S1銆傞鍏堟姽鎺夎繖鏉¤煩杞傜劧鍚庡鍔犱袱鏉¤竟錛屽垎鍒槸S0鍒癝ymbol鐨勮搗濮嬭妭鐐癸紝鎿嶄綔鏄疭hift<S0>銆傝繕鏈変粠Symbol鐨勭粓緇撹妭鐐瑰埌S0錛屾搷浣滄槸Pop<S0> Reduce銆係hift<S>絳変簬鎶婄姸鎬丼緇檖ush鍒板爢鏍堥噷錛岀劧鍚嶱op<S>絳変簬鍦ㄧ姸鎬侀噷闈㈠脊鍑哄唴瀹規槸S鐨勬爤欏跺厓绱犮傚鏋滃け璐ヤ簡鎬庝箞鍔炲憿錛熼偅灝變笉鑳界敤榪欐潯璺寵漿銆傝窡涓婂浘涓鏍鳳紝鎵鏈夎緭鍏?璺寵漿鍒癋inish鐨勮竟錛屾搷浣滈兘鏄Pop<Null>鐨勩傚湪鍒氬紑濮嬪垎鏋愮殑鏃跺欙紝鍫嗘爤鏈変竴涓狽ull鍊鹼紝鐢ㄦ潵浠h〃“璇硶鍒嗘瀽浠庤繖閲屽紑濮?#8221;銆?/p>

image

榪欎釜鍥劇殑綺楄櫄杈逛唬琛ㄦ墍鏈夎窡宸﹂掑綊鏈夊叧鐨勮煩杞傝繖浜涜竟鏄垚瀵圭殑錛屽垎鍒槸宸﹂掑綊璺寵漿鐨凷hift鍜孯educe銆傚鏋滀笉鏄負浜嗗疄鐜伴珮鎬ц兘鐨勮娉曞垎鏋愮殑璇濓紝鍏跺疄榪欎釜鐘舵佹満宸茬粡瓚沖浜嗐傝繖涓浘璺熻娉曞垎鏋愮殑“鐘舵佽煩杞建榪?#8221;鏈夊緢澶х殑鍏崇郴銆傝櫧鐒禝DList0浣犱笉鐭ラ亾絎竴姝ヨ璺寵漿鍒癐DList0榪樻槸ID0錛屼笉榪囨病鍏崇郴錛岀幇鍦ㄦ垜浠厛鍋囪鎴戜滑鍙互閫氳繃鏌愮紲炵鐨勬柟娉曟潵棰勬祴鍒般傞偅涔堬紝褰撹緭鍏ユ槸A,B,C$鐨勬椂鍊欙紝鐘舵佽煩杞建榪瑰氨浼氭槸濡備笅鐨勬牱瀛愶細

image

涓轟粈涔堣榪欎箞鍋氬憿錛熸垜浠妸榪欏箙鍥炬兂璞℃垚涓?br>1錛氭兂鍋氱殑綆ご琛ㄧずpush涓涓姸鎬?br>2錛氬悜涓嬬殑綆ご琛ㄧず淇敼褰撳墠鐘舵?br>3錛氬悜鍙崇殑鐘舵佽〃紺簆op涓涓姸鎬佸茍淇敼褰撳墠鐘舵?/p>

鍥犳褰撹緭鍏ュ埌B鐨勬椂鍊欙紝鍒拌揪ID1錛屽茍璺寵漿鍒癐DList1銆傝繖涓椂鍊橧DList1銆愬乏杈廣戠殑鎵鏈夈愯繕鐣欏湪鍫嗘爤閲屻戠殑鐘舵佹椂Null鍜孖DList0錛屽綋鍓嶇姸鎬両DList1錛岃緭鍏ュ墿涓?C$銆傝繖涓浘鐗瑰埆鐨勬湁鐢ㄣ傚綋鎴戜滑鍒嗘瀽瀹屽茍涓旀妸鏋勯犺娉曟爲鐨勬寚浠ら檮鐫鍦ㄨ繖浜涚澶翠笂闈箣鍚庯紝鎸夐『搴忔墽琛岃繖浜涙寚浠ゅ氨鍙互鏋勯犲嚭涓棰楀畬鏁寸殑璇硶鏍戜簡銆?/p>

浣嗘槸鍦ㄥ疄闄呮搷浣滈噷闈紝鎴戜滑騫舵病鏈夊姙娉曢嫻?#8220;榪欓噷瑕佸乏閫掑綊涓ゆ”錛屼篃娌″姙娉曞湪澶氭reduce鐨勬椂鍊欓夋嫨絀剁珶瑕佷粠鍝噷璺沖埌鍝噷銆傛墍浠ュ疄闄呬笂鎴戜滑瑕佸涔犱粠EpsilonNFA鍒癉FA鐨勯偅涓綆楄繃紼嬶紝鎶奡hift鍜孯educe褰撴垚Epsilon錛屾妸鍚冩帀涓涓猼oken褰撴垚闈濫psilon杈癸紝鐒跺悗鎵ц鎴戜箣鍓嶅啓鐨勩?a href="http://www.shnenglu.com/vczh/archive/2008/05/22/50763.html" target="_blank">鏋勯犲彲閰嶇疆璇嶆硶鍒嗘瀽鍣?/a>銆嬩竴鏂囦腑鐨勯偅涓幓Epsilon杈圭畻娉曪紙濡備綍浠嶯ondeterministic鍒癉eterministic錛屼互鍙婄浉鍏崇殑Look Ahead錛屾槸涓嬩竴綃囨枃绔犵殑鍐呭錛夛紝鐒跺悗灝卞彲浠ユ妸鐘舵佹満鍙樻垚榪欐牱錛?/p>

image

涓婇潰綺椾綋鐨凱op<IDList0>琛ㄧず錛岃繖涓涓狿op鏄搴斾簬閭d釜宸﹂掑綊Shifting鎿嶄綔鐨勩傚疄闄呬笂榪欐槸鍋氫簡涓涓庢牱鐨勫彉鍖栧憿錛熶粠“鐗╃悊瑙i噴”涓婃潵璁詫紝鍏跺疄鏄妸“鐘舵佽煩杞建榪?#8221;閲岄潰閭d簺闄や簡宸﹂掑綊shifting涔嬪鐨勬墍鏈変笉鍚冩帀token鐨勮竟閮藉幓鎺変簡錛?/p>

image

鍦ㄨ繖閲屾垜浠彲浠ョ湅鍒幫紝涓轟粈涔堝綋鍫嗘爤鏄疘DList0, IDList0鍜孖DList0, IDList3鐨勬椂鍊欙紝浠嶪D0閮藉彲浠ラ氳繃鍚冩帀涓涓?#8221;,”浠庤岃煩杞埌IDList3銆傚湪涓婇潰榪欏紶“鐘舵佽煩杞建榪?#8221;閲岄潰錛岃繖涓や釜浜嬫儏閮藉彂鐢熶簡錛屽垎鍒槸絎竴鏉″悜宸︾殑綆ご鍜岀浜屾潯鍚戝乏鐨勬柟鍚戙傝屼笖榪欎袱鏉¤竟鍒氬ソ瀵瑰簲浜庝笂鍥懼甫鏈夎摑鑹茬矖浣撴枃瀛楃殑璺寵漿錛屽睘浜庡乏閫掑綊Reducing鎿嶄綔銆?/p>

鎵浠ワ紝鍏跺疄鍦ㄨ繖涓椂鍊欙紝鎴戜滑鍚屾椂瑙e喅浜?#8220;搴旇鍦ㄤ粈涔堟椂鍊欒繘琛屽乏閫掑綊Shifting”鐨勯棶棰樸傚彧瑕佸綋宸﹂掑綊Reducing宸插彂鐢燂紝鎴戜滑绔嬪埢鍦ㄨ建榪逛笂闈㈣ˉ涓婁竴鏉″乏閫掑綊Shifting灝卞ソ浜嗐傚洜姝わ紝鎴戜滑鍦ㄤ竴寮濮嬪仛parsing鐨勬椂鍊欙紝鏍規湰涓嶉渶瑕侀鍏堝仛宸﹂掑綊Shifting銆傛墍浠ュ綋鍒氬垰杈撳叆A鐨勬椂鍊欙紝“鐘舵佽煩杞建榪?#8221;鏄繖鏍峰瓙鐨勶細

image

鐒跺悗閬囧埌涓涓?#8221;,”錛屽彂鐜頒箣鍓?#8220;鍋氭紡”浜嗕竴涓乏閫掑綊Shifting錛屽洜姝ゅ氨鍙樻垚涓嬮潰榪欎釜鏍峰瓙錛?/p>

image

榪欎篃灝辨槸涓婁竴綃囨枃绔犻偅涓狥ake-Shift鎵鍋氱殑浜嬫儏浜嗐?/p>

]]>
鍙厤緗娉曞垎鏋愬櫒寮鍙戠邯浜嬶紙涓夛級&mdash;&mdash;鐢熸垚涓嬫帹鑷姩鏈?/title><link>http://www.shnenglu.com/vczh/archive/2012/12/07/196079.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Fri, 07 Dec 2012 08:43:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2012/12/07/196079.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/196079.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2012/12/07/196079.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/196079.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/196079.html</trackback:ping><description><![CDATA[<p>涓婁竴綃囧崥瀹㈣鍒頒簡鏋勯犵鍙瘋〃鐨勪簨鎯呫傛瀯閫犲畬絎﹀彿琛ㄤ箣鍚庯紝灝辮榪涘叆璇箟鍒嗘瀽鐨勫悗涓涓樁孌典簡錛氭瀯閫犵姸鎬佹満銆傝窡鎴戜互鍓嶅啓<a href="http://www.shnenglu.com/vczh/archive/2008/05/22/50763.html" target="_blank">鐨勫浣曞疄鐜版鍒欒〃杈懼紡寮曟搸鐨勪袱綃囨枃绔?/a>璁茬殑涓鏍鳳紝鑷姩鏈哄厛浠嶦psilon Nondeterministic Automaton寮濮嬶紝鐒跺悗涓姝ヤ竴姝ユ瀯閫犳垚Deterministic Automaton銆備絾鏄娉曞垎鏋愬拰姝e垯琛ㄨ揪寮忔湁寰堝ぇ涓嶅悓錛岄偅涔堣繖涓嚜鍔ㄦ満鏄粈涔堟牱瀛愮殑鍛紵</p> <p>錛堝瀛︽湳鎰熷叴瓚g殑浜哄彲浠ュ幓wiki涓涓?#8220;涓嬫帹鑷姩鏈?#8221;錛?/p> <p>涓嬫帹鑷姩鏈哄拰鏈夐檺鑷姩鏈虹殑鍖哄埆鏄紝涓嬫帹鑷姩鏈烘墿灞曟垚鏅氱殑鑷姩鏈虹殑鏃跺欙紝浠栫殑鐘舵佺殑鏁扮洰鏄棤闄愮殑錛堝簾璇濓級銆備絾鏄棤闄愮殑涓滆タ鏄病鍔炴硶鐢ㄧ紪紼嬫潵琛ㄨ揪鐨勶紝閭f庝箞鍔炲憿錛熼偅灝卞姞鍏ヤ竴涓笉瀹氶暱搴︾殑“鐘舵佹弿榪?#8221;銆備笅闈㈡垜涓句竴涓畝鍗曠殑鏂囨硶錛?/p> <p>ID = NAME<br>IDList = ID | IDList “,” ID </p> <p>榪欐牱灝辨瀯鎴愪簡涓涓畝鍗曠殑鏂囨硶錛岀敤鏉ュ垎鏋愬甫閫楀彿鍒嗗壊鐨勫悕瀛楀垪琛ㄧ殑銆傞偅涔堝啓鎴愮姸鎬佹満灝辨槸濡備笅鐨勫艦寮忥細</p> <p>ID0 = 鈼?NAME<br>ID1 = NAME 鈼?br>IDList0 = 鈼?(ID | IDList “," ID)<br>IDList1 = (ID | IDList “,” ID) 鈼?br>IDList2 = (ID | IDList 鈼?“,” ID)<br>IDList3 = (ID | IDList “,” 鈼?ID)</p> <p>ID0 –> NAME –> ID1<br>IDList0 –> ID –> IDList1<br>IDList0 –> IDList –> IDList2<br>IDList2 –> “,” –> IDList3<br>IDList3 –> ID –> IDList1</p> <p>鍙互寰堝鏄撶殑鐪嬪嚭錛孖D0鍜孖DList0鏄枃娉曠殑璧峰鐘舵侊紝鑰孖D1鍜孖DList1鏄枃娉曠殑緇堢粨鐘舵侊紝鐢繪垚鍥懼涓嬶細</p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_4.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_thumb_1.png" width="467" height="372"></a></p> <p>錛圥owerPoint鐢誨浘澶嶅埗鍒癓iveWriter閲岄潰鏄竴騫呭浘闈㈢畝鐩村お鏂逛究浜嗭級</p> <p>浣嗘槸榪欐牱榪樻病瀹屻侷DList0璺沖埌IDList2鐨勬椂鍊欑殑杈撳叆“IDList”鍏跺疄榪樹笉澶燂紝鍥犱負鐢ㄤ綔杈撳叆鐨則oken鍏跺疄鍙湁NAME鍜?,"涓ょ銆備笅涓姝ュ嵆灝嗘紨紺哄浣曚粠榪欎釜鐘舵佹満緙栫▼鍚嶅壇鍏跺疄鐨勪笅鎺ㄧ姸鎬佹満銆?/p> <p>鍦ㄨ繖閲屾垜鍏堜粙緇嶅嚑涓蹇點傜涓涓槸縐昏繘錛岀浜屼釜鏄綰︺備負浠涔堣鐢ㄨ繖涓や釜鍚嶅瓧鍛紵鍥犱負澶ч儴鍒嗕漢鐪嬬殑鍌婚兼竻鍗庡ぇ瀛﹀嚭鐗堢ぞ鐨勪綆鑳界紪璇戝師鐞嗚鏈兘鏄繖涔堣鐨勶紝榛戝寲鍒嗗埆鍙玈hift鍜孯educe銆傚ソ浜嗭紝浠涔堟槸Shift鍛紵IDList0璺沖埌IDList2鐨勬椂鍊欙紝瑕佺Щ榪汭DList銆侷DList3璺沖埌IDList1錛岃縐昏繘鍒癐D銆侷DList0璺沖埌IDList1涔熻縐昏繘鍒癐D銆傝繖涔熷氨鏄錛?strong>鐘舵佽漿縐葷粡榪囦竴鏉¢潪緇堢粨絎︾殑杈圭殑鏃跺欎細縐昏繘鍒板彟涓鏉℃枃娉曠殑鐘舵佹満閲?/strong>銆侷D1鍜孖DList1浣滀負ID鍜孖DList鐨勭粓緇撹妭鐐癸紝瑕佹牴鎹?#8220;浠庨偅閲岀Щ榪涙潵鐨?#8221;鍒嗗埆瑙勭害鐒跺悗璺寵漿鍒?#8220;IDList2鎴栬匢DList1”銆傝繖涔熷氨鏄錛?strong>涓鏃︿綘鍒拌揪浜嗕竴鏉¢椈娉曠殑鐘舵佹満鐨勭粓緇撶姸鎬侊紝灝辮寮濮嬭綰︾劧鍚庤煩杞埌涓婁竴綰х殑鐘舵佷簡</strong>銆?/p> <p>鏈変漢瑕侀棶錛岄偅鎴戞庝箞鐭ラ亾瑙勭害緇撴潫鐨勬椂鍊欒璺寵漿鍘誨摢閲屽憿錛熻繖涓棶棰橀棶寰楅潪甯稿ソ銆傝鎴戜滑鍥炴兂涓涓嬫垜浠ュ墠鍐欑殑<a href="http://www.shnenglu.com/vczh/archive/2008/06/15/53373.html" target="_blank">濡備綍鎵嬪啓璇硶鍒嗘瀽鍣?/a>榪欎竴綃囨枃绔犮傞噷闈㈡庝箞璇寸殑錛熷綋浣犳墜鍐欓掑綊涓嬮檷鐨勮娉曞垎鏋愬櫒鐨勬椂鍊欙紝姣忎竴鏉℃枃娉曞叾瀹為兘鏄竴涓嚱鏁般傞偅璋冪敤鍑芥暟鐨勬椂鍊欑▼搴忔庝箞灝辯煡閬撳嚱鏁扮粨鏉熺殑鏃跺欎笅涓鏉℃寚浠ゆ槸浠涔堝憿錛熼偅褰撶劧鏄洜涓虹紪璇戝櫒甯垜浠妸“璋冪敤鍑芥暟鐨勬椂鍊欑殑涓嬩竴鏉℃寚浠ょ殑鍦板潃”緇檖ush榪涗簡璋冪敤鍫嗘爤銆備絾鏄垜浠幇鍦ㄤ笉鎵嬪啓璇硶鍒嗘瀽鍣ㄤ簡錛岃岀敤涓嬫帹鐘舵佹満鏉ュ仛錛岄亾鐞嗕篃鏄竴鏍風殑銆傚湪“縐昏繘”鐨勬椂鍊欙紝鍏堟妸褰撳墠鐨勭姸鎬乸ush榪涘爢鏍堬紝瑙勭害鐨勬椂鍊欙紝灝卞彲浠ョ湅涓涓?#8220;鏍堥《閭e嚑涓姸鎬侀兘鏄粈涔?#8221;錛岄厤鍚堜竴嬈″悜鍓嶆煡鐪嬶紙榪欏氨鏄疞ook Ahead銆侺ALR鐨勯偅涓狶A錛孡ALR(1)灝辨槸鍦↙A鐨勬椂鍊欏伔鐪嬩竴涓猼oken錛夛紝鏉ュ喅瀹氳綰﹀埌鍝噷鍘匯傝嚦浜嶭A鍦ㄨ繖閲岀殑娣卞埢鍐呮兜鎴戝皢涓嬩竴綃囨枃绔犲啀璇淬傚洜涓虹幇鍦ㄦ垜榪樻病鏈夊仛鍒癗ondeterministic鍒癉eterministic鐨勪竴姝ワ紝閲岄潰鏈夊緢澶氶粦縐戞妧錛屾垜鎯抽泦涓璁恒?/p> <p>閭g幇鍦ㄨ鎴戜滑鎶婁笂闈㈤偅騫呭浘鐨勪袱涓姸鎬佹満榪炶搗鏉ワ紝浜х敓涓涓笅鎺ㄨ嚜鍔ㄦ満銆備絾鏄湪榪欓噷鎴戝厛鍋氱涓姝ャ傚洜涓篒DList0鍒癐DList1鐨勮煩杞槸涓涓乏閫掑綊鐨勮繃紼嬶紝鍏堟殏鏃朵笉綆°?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_8.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_thumb_3.png" width="671" height="372"></a></p> <p>姍欒壊鐨勮竟閮芥槸涓涓緭鍏ラ潪緇堢粨絎︾殑璺寵漿錛屾墍浠ュ疄闄呬笂鍦ㄤ笅鎺ㄧ姸鎬佹満閲岄潰鏄笉瀛樺湪鐨勩傚湪榪欏紶鍥鵑噷闈㈡垜浠鐞嗕簡涓ゆ潯ID鐨勮竟銆侷DList0浼歴hift錛堝氨鏄湪鍫嗘爤閲岄潰push錛夎嚜宸辯劧鍚庤煩杞埌ID0錛屽洜姝D1鍦ㄦ煡鐪嬪埌鏍堥《鏄疘DList0鐨勬椂鍊欙紝浠栧氨鐭ラ亾璧扮殑鏄疘DList0 –> ID –> IDList1榪欐潯璺紝鍥犳灝眗educe騫惰煩杞埌浜咺DList1銆侷DList3鍚岀悊銆?/p> <p>浣嗘槸Shift鐨勬椂鍊欏茍娌℃湁浜х敓杈撳叆錛屾墍浠ュ疄闄呬笂搴旇鏀規垚涓嬮潰榪欎釜鏍峰瓙銆?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_10.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_thumb_4.png" width="618" height="372"></a></p> <p>榪欐牱Shift杈逛篃灝辨湁杈撳叆浜嗐傝屼笖ID0鍒癐D1涔熷簾鎺変簡銆傚疄闄呬笂ID0鑷繁涔熷簲璇ュ簾鎺夈傜幇鍦ㄨ繕鏈変竴涓棶棰樻病瑙e喅錛屽氨鏄乏閫掑綊鍜孯educe涓嶄駭鐢熻緭鍏ョ殑闂銆傝繖涓や釜闂瀹為檯涓婃槸涓璧風殑銆傛垜浠厛鏉ヨ冭檻涓涓嬩負浠涔堣繖閲屾病鍔炴硶鐢ㄧ浉鍚岀殑鍔炴硶鏉ユ妸Reduce澶勭悊鎴愪駭鐢熻緭鍏ョ殑銆傚疄闄呬笂鏄洜涓猴紝浣犲湪榪欎竴涓樁孌佃繕涓嶇煡閬撶┒绔烺educe瑕佽緭鍏ヤ粈涔堟墠鑳借煩杞紝鐗瑰埆鏄痶oken宸茬粡緇撴潫騫朵笖parse鍑轟簡涓涓畬鏁寸殑IDList鐨勬椂鍊欍備互鍓嶄綘浠槸涓嶆槸鍦ㄧ湅銆奝arsing Techniques銆嬪拰銆婇緳涔︺嬮兘瀵逛負浠涔堜竴涓瓧絎︿覆緇撳熬瑕佷駭鐢熶竴涓?瀛楃鎰熷埌寰堝洶鎯戝憿錛熷疄闄呬笂浠栨槸鐗瑰埆鏈夌敤鐨勩傜幇鍦ㄦ垜浠潵緇欎粬鍔犱笂澶у灝辨槑鐧戒簡銆傚湪榪欓噷錛岃繖涓枃娉曠殑鐩爣鏄駭鐢熶竴涓狪DList緇撴瀯錛屾墍浠?褰撶劧涔熻鍔犲湪IDList鐨勭粓緇撶姸鎬佲斺擨DList1涓婏細</p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_12.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_thumb_5.png" width="674" height="372"></a></p> <p>鐒跺悗灝辮疆鍒癛educe銆侷D1搴旇鏄疪educe鍒板摢閲屼簡錛熺涓姝ヨ嚜鐒舵槸Reduce鍒癐DList1銆傞偅涔圛DList1鍙堣Reduce鍒板摢閲屽憿錛熸垜浠彲浠ョ湅鍒幫紝鍦↖DList緇撴潫鐨勬椂鍊欙紝瑕佷箞灝辨槸璺沖埌IDList2錛岃涔堝氨鏄煩鍒癋INISH銆備絾鏄疘DList2鏄氳繃宸﹂掑綊浜х敓鐨勶紝鎴戜滑鍏堜笉綆′粬銆傝煩鍒癋INISH闇瑕佷粈涔堟潯浠跺憿錛熺涓涓槸杈撳叆$錛岀浜屼釜鏄疨op瀹岀姸鎬佷箣鍚庡爢鏍堜細涓虹┖銆傛墍浠ヨ繖涓椂鍊欐垜浠彲浠ュ厛淇敼涓涓婭D1鍒癐DList1鐨凴educe杈癸細</p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_14.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_thumb_6.png" width="674" height="372"></a></p> <p>鏈鍚庡氨鏄乏閫掑綊浜嗐傚乏閫掑綊鐨勫鐞嗘湁鐐瑰儚hack錛屽洜涓哄疄闄呬笂浣犱笉鑳介鍏堝垽鏂綘瑕佷笉瑕佸乏閫掑綊錛堜篃灝辨槸鐪嬩竴涓媡oken stream鏈夊灝戜釜閫楀彿錛夛紝鐒跺悗鍏坰hift鍑犱釜IDList0榪涘幓錛屽啀鎱㈡參鏉ャ傛墍浠ユ垜浠彧鏈夊湪婊¤凍璺寵漿鍏崇郴鐨勬椂鍊欎復鏃舵彃鍏ヤ竴浜汭DList0銆傞偅涔堣繖涓叧緋繪槸浠涔堝憿錛熷乏閫掑綊鐨処DList緇撴潫鈥斺斾篃灝辨槸浠嶪DList0璺沖埌IDList2鈥斺斾箣鍚庡彧鏈変竴縐嶅彲鑳斤紝灝辨槸杈撳叆","銆傝屼笖鎵鏈夋寚鍚慖DList1鐨勮竟閮芥槸杈撳叆ID錛屾墍浠ヨ繖鏉″乏閫掑綊鐨勭嚎搴旇浠嶪D1錛圛D鐨勭粓緇撶姸鎬侊級榪炲埌IDList2錛屽茍涓斿湪閾炬帴鐨勬椂鍊欒ˉ鍏?#8220;鍋噑hift IDList0”錛?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_31.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_thumb_14.png" width="674" height="424"></a></p> <p>姍欒壊鐨勪袱涓姸鎬佸垎鍒槸鏁翠釜parsing榪囩▼鐨勮搗濮嬬姸鎬佸拰緇堢粨鐘舵併傝繖涓椂鍊欐垜浠妸鎵鏈夋病鐢ㄧ殑杈瑰拰鐘舵侀兘騫叉帀錛屽氨鍙樻垚浜嗭細</p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_33.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_thumb_15.png" width="674" height="362"></a></p> <p>鏄笉鏄寰楃壒鍒翰鍒囧憿錛岃繖涓嶅氨鏄鍒欒〃杈懼紡NAME ( “,” NAME)*鐨勭姸鎬佹満鍚楋紵榪欎篃鏄洜涓鴻繖涓枃娉曞垰濂藉彲浠ヨ〃杈句負涓涓鍒欐枃娉曟墠鏈夎繖鏍風殑緇撴灉錛屽鏋滄垜浠粰浠栧姞鐐瑰効鎷彿鏀瑰彉鐐逛紭鍏堢駭浠涔堢殑錛岄偅灝變細鍙樻垚涓涓鏉傚緱澶氱殑鐘舵佹満浜嗐傚ソ浜嗐傜幇鍦ㄦ垜浠潵妯℃嫙涓涓嬩笅鎺ㄧ姸鎬佹満鐨勭姸鎬佽漿鎹㈠拰鍫嗘爤鎿嶄綔榪囩▼錛屾潵鍒嗘瀽涓涓婣,B,C$榪欎釜杈撳叆鍚с?/p> <p>鍦ㄤ笅闈㈢殑鏍囩ず鍥鵑噷闈紝鎴戜滑鐢╯|abc|def鏉ュ垎鍒〃杈懼綋鍓嶇姸鎬乻銆佸綋鍓嶅爢鏍堥噷鐨勭姸鎬乤bc錛堟爤欏跺湪鍙寵竟錛夊拰姝e湪絳夊緟鐨勮緭鍏ef銆傞偅涔堝垵濮嬬姸鎬佽偗瀹氬氨鏄?br>IDList0 | null | A,B,C$</p> <p>鐒跺悗灝卞紑濮嬩簡錛侊紙鐢ㄦ枃瀛楄〃杈懼疄鍦ㄦ槸澶毦鐪嬩簡錛屾墍浠ヨ創鎴愬浘錛?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_35.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/vczh/Windows-Live-Writer/c1f82c9f0c3b_C745/image_thumb_16.png" width="675" height="500"></a></p> <p>濡傛灉鎴愬姛鍒拌揪FINISH騫朵笖鍫嗘爤鍜岃緭鍏ラ兘鍏ㄩ儴娌℃湁浜嗙殑璇濓紝閭e氨璇佹槑錛宲arsing榪囩▼瀹岀編緇撴潫錛屾病鏈変換浣曢敊璇彂鐢熴?/p> <p>濡備綍浠庢枃娉曠敓鎴愪笅鎺ㄨ嚜鍔ㄦ満騫跺畬鎴恜arsing宸ヤ綔鐨勫ぇ姒傝繃紼嬪氨鍐欏埌榪欓噷浜嗐傜洰鍓嶅紑鍙戣繘搴︽槸鍒?#8220;鐢熸垚闈炵‘瀹氭т笅鎺ㄨ嚜鍔ㄦ満”榪欓噷銆傚綋鎴戝畬鎴愪簡鐢熸垚“紜畾鎬т笅鎺ㄨ嚜鍔ㄦ満”鈥斺斾篃灝辨槸涓婇潰鐨勬渶鍚庝竴涓姸鎬佹満鍥劇殑鏃跺欌斺斿氨浼氬紑濮嬪啓涓嬩竴綃囨枃绔狅紝璁查潰瀵瑰鏉傜殑鏂囨硶鐨勬椂鍊欙紝涓嬫帹鑷姩鏈哄皢瑕佸浣曡皟鏁淬傚悓鏃跺皢閲嶇偣鎻忚堪Look Ahead閮ㄥ垎錛屼互鍙婁負浠涔圠ALR(1)瑕佽璁℃垚閭d釜鏍峰瓙銆?/p> <img src ="http://www.shnenglu.com/vczh/aggbug/196079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2012-12-07 16:43 <a href="http://www.shnenglu.com/vczh/archive/2012/12/07/196079.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍙厤緗娉曞垎鏋愬櫒寮鍙戠邯浜嬶紙浜岋級&mdash;&mdash;鏋勯犵鍙瘋〃http://www.shnenglu.com/vczh/archive/2012/11/29/195779.html闄堟鐎?vczh)闄堟鐎?vczh)Wed, 28 Nov 2012 16:50:00 GMThttp://www.shnenglu.com/vczh/archive/2012/11/29/195779.htmlhttp://www.shnenglu.com/vczh/comments/195779.htmlhttp://www.shnenglu.com/vczh/archive/2012/11/29/195779.html#Feedback6http://www.shnenglu.com/vczh/comments/commentRss/195779.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/195779.html涓婁竴綃囧崥瀹㈣鍒頒簡鏋勯犺娉曟爲鐨勯棶棰樸傛湁鏈嬪弸鍦ㄧ暀璦闂垜錛屼負浠涔堜竴瀹氳璁╄娉曞垎鏋愬櫒浜х敓璇硶鏍戯紝鑰屼笉鏄鐢ㄦ埛鑷繁鍐沖畾瑕佹庝箞鍔炲憿錛熷湪榪欓噷鎴戝厛瑙g瓟榪欎釜闂銆?/p>

1銆佸ぇ閮ㄥ垎鎯呭喌涓嬮兘鏄湡鐨勯渶瑕佹湁璇硶鏍?br>2銆佸鏋滆鐩存帴榪斿洖璁$畻緇撴灉涔嬬被鐨勪簨鎯呯殑璇濓紝鍙渶瑕佸啓涓涓獀isitor榪愯涓涓嬭娉曟爲灝卞ソ浜嗭紝闄ゅ幓鑷姩鐢熸垚鐨勪唬鐮佷互澶栵紙鍙嶆榪欎笉鐢ㄤ漢鍐欙紝涓嶈鍏ヤ唬浠鳳級錛屼唬鐮侀噺鍩烘湰涓婃病浠涔堝尯鍒?br>3銆佸姞鍏ヨ娉曟爲鍙互璁╂枃娉曟湰韜弿榪拌搗鏉ユ洿綆鍗曪紝濡傛灉瑕佽紼嬪簭鍛樻妸鏂囨硶鍗曠嫭鏀懼湪涓杈癸紝鐒跺悗鑷繁鍐欏畬鏁寸殑璇箟鍑芥暟鏉ヨ浠栫敓鎴愯娉曟爲鐨勮瘽錛屼細璁╁ぇ閮ㄥ垎鎯呭喌錛堥渶瑕佽娉曟爲錛夊彉寰楃壒鍒鏉傦紝鑰屽皯鏁版儏鍐碉紙涓嶉渶瑕佽娉曟爲錛夊張娌℃湁鑾峰緱浠涔堝ソ澶勩?/p>

灝界綾諱技yacc榪欐牱鐨勪笢瑗跨殑紜槸涓嶅寘鍚娉曟爲鐨勫唴瀹硅岃浣犺嚜宸卞啓鐨勶紝浣嗘槸鐢ㄨ搗鏉ラ毦閬撲笉鏄緢闅懼彈鍚楋紵

鐜板湪杞叆姝i銆傝繖涓綃囨枃绔犺鐨勪富瑕佹槸鏋勯犵鍙瘋〃鐨勯棶棰樸傛兂瑕佹妸絎﹀彿琛ㄦ瀯閫犵殑濂芥槸涓浠跺緢楹葷儲鐨勯棶棰樸傛垜鏇劇粡灝濊瘯榪囧緢澶氱鏂規硶錛屽寘鎷己綾誨瀷鐨勭鍙瘋〃錛屽急綾誨瀷鐨勭鍙瘋〃錛屽熀浜巑ap鐨勭鍙瘋〃絳夌瓑錛屾渶鍚庤繕鏄寫閫変簡璺烿isual Studio鑷甫鐨勭敤鏉ヨpdb鏂囦歡鐨凞IA綾誨叾涓殑IDIASymbol錛?a title="http://msdn.microsoft.com/en-us/library/w0edf0x4.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/w0edf0x4.aspx錛夊熀鏈笂涓鏍風殑緇撴瀯錛氭墍鏈夌殑絎﹀彿閮藉彧鏈夎繖涔堜竴涓猻ymbol綾伙紝鐒跺悗鍖呯綏涓囪薄錛屼粈涔堥兘鏈夈備負浠涔堟渶鍚庨夋嫨榪欎箞鍋氬憿錛熷洜涓哄湪鍋氳涔夊垎鏋愮殑鏃跺欙紝鍏跺疄鍋氱殑鏈澶氱殑浜嬫儏涓嶆槸鏋勯犵鍙瘋〃錛岃屾槸鏌ヨ絎﹀彿琛ㄣ傚鏋滅鍙瘋〃鏄己綾誨瀷鐨勭敾錛岃濡傝綾誨瀷瑕佷竴涓被錛屽彉閲忚涓涓被錛屽嚱鏁拌涓涓被涔嬬被鐨勶紝鎬繪槸闇瑕佸埌澶刢ast鏉ast鍘伙紝涔熸壘涓嶅埌浠涔堝ソ鏂規硶鏉ュ湪瀹屾垚鐩稿悓浜嬫儏鐨勬儏鍐典笅錛屼繚鐣欏己綾誨瀷鑰屼笉鍦ㄤ唬鐮侀噷闈㈠嚭鐜癱ast銆備負浠涔堣娉曟爲灝辮鐢╲isitor鏉ヨВ鍐寵繖涓棶棰橈紝鑰岀鍙瘋〃灝變笉琛屽憿錛熷洜涓洪氬父鎴戜滑鍦ㄥ鐞嗚娉曟爲鐨勬椂鍊欓兘鏄掑綊鐨勫艦寮忥紝鑰岀鍙瘋〃騫朵笉鏄傚湪涓涓笂涓嬫枃閲岄潰錛屽疄闄呬笂鎴戜滑鏄煡閬撻偅涓猻ymbol瀵硅薄絀剁珶鏄粈涔堜笢瑗跨殑錛堣濡傝鎴戜滑鏌ヨ浜嗕竴涓彉閲忕殑type錛岄偅榪欒繑鍥炲艱偗瀹氬彧鑳芥槸type浜嗭級銆傝繖涓椂鍊欐垜浠cast鎵嶈兘鐢紝鏈韓涔熷彧鏄氮璐硅〃鎯呰屽凡銆傝繖涓椂鍊欙紝visitor妯″紡灝變笉鏄拰闈㈠榪欑鎯呭喌浜嗐傚鏋滅‖瑕佺敤visitor妯″紡鏉ュ啓錛屼細瀵艱嚧璇箟鍒嗘瀽鐨勪唬鐮佸垎鏁e緱榪囦簬紱昏氨瀵艱嚧鍙鎬у嚑涔庡氨涓уけ浜嗐傝繖鏄竴涓京璇佺殑闂錛屽ぇ瀹跺彲浠ュソ濂戒綋浼氫綋浼氥?/p>

璇翠簡榪欎箞涓澶ф錛屽疄闄呬笂灝辨槸鎬庝箞鏍峰憿錛熻鎴戜滑鏉ョ湅“鏂囨硶瑙勫垯”鏈韓鐨勭鍙瘋〃鍚с傛棦鐒惰繖涓柊鐨勫彲閰嶇疆璇硶鍒嗘瀽鍣ㄤ篃鏄氳繃parse涓涓枃鏈艦寮忕殑鏂囨硶瑙勫垯鏉ョ敓鎴恜arser錛岄偅瀹為檯涓婂氨璺熺紪璇戝櫒涓鏍瘋緇忓巻閭d箞澶氶樁孌碉紝鍏朵腑鑲畾鏈夌鍙瘋〃錛?/p>

class ParsingSymbol : public Object
{
public:
    enum SymbolType
    {
        Global,
        EnumType,
        ClassType,        // descriptor == base type
        ArrayType,        // descriptor == element type
        TokenType,
        EnumItem,        // descriptor == parent
        ClassField,        // descriptor == field type
        TokenDef,        // descriptor == token type
        RuleDef,        // descriptor == rule type
    };
public:
    ~ParsingSymbol();

    ParsingSymbolManager*            GetManager();
    SymbolType                        GetType();
    const WString&                    GetName();
    vint                            GetSubSymbolCount();
    ParsingSymbol*                    GetSubSymbol(vint index);
    ParsingSymbol*                    GetSubSymbolByName(const WString& name);
    ParsingSymbol*                    GetDescriptorSymbol();
    ParsingSymbol*                    GetParentSymbol();
    bool                            IsType();
    ParsingSymbol*                    SearchClassSubSymbol(const WString& name);
    ParsingSymbol*                    SearchCommonBaseClass(ParsingSymbol* classType);
};

鍥犱負鏂囨硶瑙勫垯鏈韓鐨勪笢瑗夸篃涓嶅錛屾墍浠ヨ繖閲岀殑symbol鍙兘鏄笂闈㈣杞界殑9縐嶅璞°傝繖浜涘璞″叾瀹炵壒鍒殑鐩鎬技錛屾墍浠ユ垜浠彲浠ョ湅鍑哄敮涓鐨勫尯鍒氨鏄綋GetType榪斿洖鍊間笉涓鏍風殑鏃跺欙紝GetDescriptorSymbol榪斿洖鐨勫璞$殑鎰忔濅篃涓嶄竴鏍楓傝岃繖涓尯鍒杞藉湪浜唀num SymbolType鐨勬敞閲婇噷闈€傚疄闄呬笂榪欑鍋氭硶鍦ㄩ潰瀵硅秴綰у鏉傜殑絎﹀彿琛紙鑰冭檻涓涓婥++緙栬瘧鍣級鐨勬椂鍊欏茍涓嶅お濂姐傞偅濂界殑鍋氭硶絀剁珶鏄粈涔堝憿錛熺湅涓婇潰IDIASymbol鐨勯摼鎺ワ紝閭e氨鏄瓟妗堛?/p>

涓嶅彲鍚﹁錛屽井杞璁″嚭鏉ョ殑API澶ч儴鍒嗚繕鏄緢鏈夐亾鐞嗙殑錛岄櫎浜哤in32鐨勫師鐢烥UI閮ㄥ垎銆?/p>

鎴戜滑榪樺彲浠ョ湅鍒幫紝榪欎釜ParsingSymbol綾葷殑鍑犱箮鎵鏈夋垚鍛樺嚱鏁伴兘鏄敤鏉ユ煡璇㈣繖涓猄ymbol鐨勫唴瀹圭殑銆傝繖閲岃繕鏈変袱涓壒孌婄殑鍑芥暟錛屽氨鏄疭earchClassSubSymbol鍜孲earchCommonBaseClass鈥斺斿綋涓斾粎褰搒ymbol鏄疌lassType鐨勬椂鍊欐墠璧蜂綔鐢ㄣ備負浠涔堟湁浜咷etSubSymbolByName錛岃繕瑕佽繖涓や釜api鍛紵鍥犱負鎴戜滑鍦ㄦ悳绱竴涓被鐨勬垚鍛樼殑鏃跺欙紝鏄鎼滅儲浠栫殑鐖剁被鐨勩傝屼竴涓被鐨勭埗綾葷殑sub symbol騫朵笉鏄被鑷繁鐨剆ub symbol錛屾墍浠ュ氨鏈変簡榪欎袱涓猘pi銆傛墍璋撶殑sub symbol鐨勬剰鎬濈幇鍦ㄤ篃寰堟槑浜嗕簡銆俥num綾誨瀷閲岄潰鐨勫煎氨鏄痚num鐨剆ub symbol錛屾垚鍛樺彉閲忔槸綾葷殑sub symbol錛屾諱箣鍙鏄0鏄庡湪涓涓鍙峰唴閮ㄧ殑絎﹀彿閮芥槸榪欎釜絎﹀彿鐨剆ub symbol銆傝繖灝辨槸鎵鏈夌鍙烽兘鏈夌殑鍏辨с?/p>

褰撶劧錛屾湁浜哖arsingSymbol錛岃繕瑕佹湁浠栫殑manager鎵嶅彲浠ュ畬鎴愭暣涓鍙瘋〃鐨勬搷浣滐細

class ParsingSymbolManager : public Object
{
public:
    ParsingSymbolManager();
    ~ParsingSymbolManager();

    ParsingSymbol*                    GetGlobal();
    ParsingSymbol*                    GetTokenType();
    ParsingSymbol*                    GetArrayType(ParsingSymbol* elementType);

    ParsingSymbol*                    AddClass(const WString& name, ParsingSymbol* baseType, ParsingSymbol* parentType=0);
    ParsingSymbol*                    AddField(const WString& name, ParsingSymbol* classType, ParsingSymbol* fieldType);
    ParsingSymbol*                    AddEnum(const WString& name, ParsingSymbol* parentType=0);
    ParsingSymbol*                    AddEnumItem(const WString& name, ParsingSymbol* enumType);
    ParsingSymbol*                    AddTokenDefinition(const WString& name);
    ParsingSymbol*                    AddRuleDefinition(const WString& name, ParsingSymbol* ruleType);

    ParsingSymbol*                    CacheGetType(definitions::ParsingDefinitionType* type, ParsingSymbol* scope);
    bool                            CacheSetType(definitions::ParsingDefinitionType* type, ParsingSymbol* scope, ParsingSymbol* symbol);
    ParsingSymbol*                    CacheGetSymbol(definitions::ParsingDefinitionGrammar* grammar);
    bool                            CacheSetSymbol(definitions::ParsingDefinitionGrammar* grammar, ParsingSymbol* symbol);
    ParsingSymbol*                    CacheGetType(definitions::ParsingDefinitionGrammar* grammar);
    bool                            CacheSetType(definitions::ParsingDefinitionGrammar* grammar, ParsingSymbol* type);
};

榪欎釜ParsingSymbolManager鏈夌潃絎﹀彿琛ㄧ鐞嗗櫒鐨勪互涓嬩袱涓吀鍨嬩綔鐢?/p>

1銆佸垱寤虹鍙楓?br>2銆佽絎﹀彿涓庤娉曟爲鐨勫璞$粦瀹氳搗鏉ャ傝濡傝鎴戜滑鍦ㄤ竴涓猚ontext涓嬮潰鎺ㄥ浜嗕竴涓猠xpression鐨勭被鍨嬶紝閭d笅嬈″浜庡悓鏍風殑context鍚屾牱鐨別xpression灝變笉闇瑕佸啀鎺ㄥ涓嬈′簡錛堣涔夊垎鏋愭湁寰堝涓猵ass錛屽鍚屼竴涓猠xpression姹傜被鍨嬬殑鎿嶄綔緇忓父浼氶噸澶嶅緢澶氭錛夛紝鎶婂畠cache涓嬫潵灝卞彲浠ヤ簡銆?br>3銆佹悳绱㈢鍙楓傚叿浣撳埌榪欎釜絎﹀彿琛紝榪欎釜鍔熻兘琚仛榪涗簡ParsingSymbol閲岄潰銆?br>4銆佷繚瀛樻牴鑺傜偣銆侴etGlobal鍑芥暟灝辨槸騫茶繖涓綔鐢ㄧ殑銆傛墍鏈夌殑鏍圭鍙烽兘灞炰簬global絎﹀彿鐨剆ub symbol銆?/p>

鍥犳鎴戜滑鍙互鎬庝箞浣跨敤浠栧憿錛熼鍏堢湅涓婇潰鐨凙dd鍑芥暟銆傝繖浜涘嚱鏁頒笉浠呬細甯綘鍦ㄤ竴涓鍙瘋〃閲岄潰娣誨姞涓涓猻ub symbol錛岃繕浼氭浛浣犲仛涓浜涙鏌ワ紝璀璇撮樆姝綘娣誨姞鐩稿悓鍚嶅瓧鐨剆ub symbol涔嬬被鐨勩傝娉曟爲寰堝鏉傜殑鏃跺欙紝寰堝鏃跺欐垜浠湁寰堝涓嶅悓鐨勬柟娉曟潵緇欎竴涓鍙鋒坊鍔犲瓙絎﹀彿錛岃濡傝C#鐨勬垚鍛樺彉閲忓拰鎴愬憳鍑芥暟銆傛垚鍛樺彉閲忎笉鑳藉悓鍚嶏紝鎴愬憳鍑芥暟鍙互錛屼絾鏄垚鍛樺嚱鏁板拰鎴愬憳鍙橀噺鍗翠笉鑳藉悓鍚嶃傝繖涓椂鍊欐垜浠氨闇瑕佹妸榪欎簺娣誨姞鎿嶄綔灝佽璧鋒潵錛岃繖鏍鋒墠鍙互鍦ㄥ鐞嗚娉曟爲錛堝0鏄庝竴涓嚱鏁扮殑鏂規硶鍙互鏈夊緢澶氾紝鎵浠ユ坊鍔犲嚱鏁扮鍙風殑鍦版柟涔熷彲浠ユ湁寰堝錛夌殑鏃跺欎笉闇瑕侀噸澶嶅啓楠岃瘉閫昏緫銆?/p>

鍏舵灝辨槸Cache鍑芥暟銆傚叾瀹濩ache鍑芥暟榪欎箞鍐欙紝涓嶆槸鐢ㄦ潵鐩存帴璋冪敤鐨勩備婦涓緥瀛愶紝鍦ㄥ垎鏋愪竴涓枃娉曠殑鏃跺欙紝鎴戜滑闇瑕佹妸涓涓?#8220;綾誨瀷”璇硶鏍戣漿鎴愪竴涓?#8220;綾誨瀷”絎﹀彿錛堣濡傝瑕佸喅瀹氫竴涓枃娉曡create浠涔堢被鍨嬬殑璇硶鏍戣妭鐐圭殑鏃跺欙級銆傚洜姝ゅ氨鏈変簡涓嬮潰鐨勫嚱鏁幫細

ParsingSymbol* FindType(Ptr<definitions::ParsingDefinitionType> type, ParsingSymbolManager* manager, ParsingSymbol* scope, collections::List<Ptr<ParsingError>>& errors)
{
    ParsingSymbol* result=manager->CacheGetType(type.Obj(), scope);
    if(!result)
    {
        FindTypeVisitor visitor(manager, (scope?scope:manager->GetGlobal()), errors);
        type->Accept(&visitor);
        result=visitor.result;
        manager->CacheSetType(type.Obj(), scope, result);
    }
    return result;
}

寰堟槑鏄撅紝榪欎釜鍑芥暟鍋氱殑浜嬫儏灝辨槸錛屾煡璇竴涓狿arsingDefinitionType鑺傜偣鏈夋病鏈夎鏌ヨ榪囷紝濡傛灉鏈夌洿鎺ョ敤cache錛屾病鏈夌殑璇濆啀浠庡ご璁$畻浠栫劧鍚巆ache璧鋒潵銆傚洜姝よ繖浜汣ache鍑芥暟灝辨槸緇欑被浼糉indType鐨勫嚱鏁扮敤鐨勶紝鑰岃涔夊垎鏋愮殑浠g爜鍒欑洿鎺ヤ嬌鐢‵indType錛岃屼笉鏄疌ache鍑芥暟錛屾潵鑾峰彇涓涓被鍨嬬殑絎﹀彿銆傝仾鏄庣殑鏈嬪弸浠彲浠ョ湅鍑烘潵錛岃繖縐嶅啓娉曡暣鍚潃涓涓潯浠訛紝灝辨槸璇硶鏍戝垱寤哄畬灝變笉浼氭敼浜嗭紙搴熻瘽錛屽綋鐒朵笉浼氭敼錛侊級銆?/p>

榪欎竴綃囩殑鍐呭灝辮鍒拌繖閲屼簡銆傜幇鍦ㄧ殑榪涘害鏄鍦ㄥ啓鏂囨硶鐢熸垚鐘舵佹満鐨勭畻娉曘備笅涓綃囨枃绔犲簲璇ヨ鐨勫氨鏄姸鎬佹満絀剁珶鏄庝箞榪愪綔鐨勪簡銆傛枃娉曟墍闇瑕佺殑鐘舵佹満鍙仛涓嬫帹鐘舵佹満錛坧ush down automaton錛夛紝璺焤egex鐢ㄧ殑NFA鍜孌FA涓嶅お涓鏍鳳紝鐞嗚В璧鋒潵鐣ユ湁闅懼害銆傛墍浠ユ垜鎯抽渶瑕佺敤鍗曠嫭鐨勪竴綃囨枃绔犳潵閫氫織鐨勮涓璁層?/p>

]]>
鍙厤緗娉曞垎鏋愬櫒寮鍙戠邯浜嬶紙涓錛?amp;mdash;&mdash;鏋勯犺娉曟爲http://www.shnenglu.com/vczh/archive/2012/11/21/195503.html闄堟鐎?vczh)闄堟鐎?vczh)Wed, 21 Nov 2012 14:42:00 GMThttp://www.shnenglu.com/vczh/archive/2012/11/21/195503.htmlhttp://www.shnenglu.com/vczh/comments/195503.htmlhttp://www.shnenglu.com/vczh/archive/2012/11/21/195503.html#Feedback5http://www.shnenglu.com/vczh/comments/commentRss/195503.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/195503.html灝卞儚涔嬪墠鐨勫崥瀹㈡枃绔?/a>鎵璇寸殑錛岋紙涓昏榪樻槸錛夊洜涓?a target="_blank">GacUI鐨勫師鍥狅紝鎴戝喅瀹氬紑鍙戜竴涓洿濂界殑鍙厤緗交閲忕駭璇硶鍒嗘瀽鍣ㄦ潵浠f浛涔嬪墠鐨勮惤鍚庣殑鐗堟湰銆傚湪璇磋繖涓枃绔犱箣鍓嶏紝鎴戣繕鏄兂鍦ㄦ鍚戝ぇ瀹舵帹鑽愪竴鏈婄紪紼嬭璦瀹炵幇妯″紡銆嬶紝榪欑殑紜槸涓鏈ソ涔︼紝璁╂垜鐩歌鎭ㄦ櫄銆?/p>

鍏跺疄璇村埌寮鍙戣娉曞垎鏋愬櫒錛屾垜浠?007騫村氨宸茬粡寮濮嬪湪鎬濊冪被浼肩殑闂浜嗐傚綋鏃禖++榪樺浜庣敤鐨勪笉澶啛緇冪殑鏃跺欙紝闅懼厤浼氬仛鍑轟竴浜涘偦閫肩殑浜嬫儏錛屼笉榪囨葷殑鏉ヨ褰撳勾鐨刬dea榪樻槸鑳界敤鐨勩備粠閭f椂鍊欏紑濮嬶紝鎴戜負浜嗛敾鐐艱嚜宸憋紝涓鐩村湪瀹炵幇鍚勭涓嶅悓鐨勮璦銆傛墍浠ョ粰鑷繁寮鍙戜竴涓彲閰嶇疆璇硶鍒嗘瀽鍣ㄤ篃鏄湪鎵闅懼厤鐨勪簨鎯呬簡銆備簬鏄氨鏈夛細
絎竴鐗堬細http://hi.baidu.com/geniusvczh/archive/tag/syngram%E6%97%A5%E5%BF%97
絎簩鐗堬細http://www.shnenglu.com/vczh/archive/2009/04/06/79122.html
絎笁鐗堬細http://www.shnenglu.com/vczh/archive/2009/12/13/103101.html
榪樻湁絎笁鐗堢殑鏁欑▼錛?a title="http://www.shnenglu.com/vczh/archive/2010/04/28/113836.html" href="http://www.shnenglu.com/vczh/archive/2010/04/28/113836.html">http://www.shnenglu.com/vczh/archive/2010/04/28/113836.html

涓婇潰鐨勬墍鏈夊垎鏋愬櫒閮借嚧鍔涗簬鍦–++閲岄潰鍙互閫氳繃鐩存帴鎻忚堪鏂囨硶鍜屼竴浜涜涔夎涓烘潵璁╃郴緇熷彲浠ヨ繀閫熸瀯閫犲嚭涓涓拡瀵圭壒瀹氱洰鐨勭殑鐢ㄨ搗鏉ユ柟渚跨殑璇硶鍒嗘瀽鍣紝鑰屸滅涓夌増鈥濆氨鏄埌鐩墠涓烘榪樺湪鐢ㄧ殑涓涓増鏈傝嚦浜庝負浠涔堟垜瑕佸仛涓涓柊鐨勨斺斾篃灝辨槸絎洓鐗堚斺?a href="http://www.shnenglu.com/vczh/archive/2012/10/30/194052.html" target="_blank">涔嬪墠鐨勬枃绔?/a>宸茬粡璇翠簡銆?/p>

鑰屼粖澶╋紝絎洓鐗堢殑寮鍙戝凡緇忓紑濮嬩簡鏈夊ソ鍑犲ぉ銆傚鏋滃ぇ瀹跺叧蹇冭繘搴︾殑璇濓紝鍙互鍘?a target="_blank">GacUI鐨凜odeplex欏甸潰涓嬭澆浠g爜錛岀劧鍚庨槄璇籆ommon\Source\Parsing涓嬮潰鐨勬簮鏂囦歡銆傚搴旂殑鍗曞厓嫻嬭瘯鍙互鍦–ommon\UnitTest\UnitTest\TestParsing.cpp閲屾壘鍒般?/p>

浜庢槸浠婂ぉ灝辮璇村叧浜庢瀯閫犺娉曟爲鐨勪簨鎯呫?/p>

鐢–++鍐欒繃parser鐨勪漢閮界煡閬擄紝鏋勯犺娉曟爲浠ュ強璇箟鍒嗘瀽鐢ㄧ殑絎﹀彿琛ㄦ槸涓浠舵瀬鍏剁箒鐞愶紝鑰屼笖涓涓嶅皬蹇冨氨瀹規槗鍐欏嚭緲旂殑浜嬫儏銆備絾鏄牴鎹垜鍐欒繃鏃犵┓澶氭5璇硶鏍戜互鍙婃瀯閫犺繃鏃犵┓澶氫釜絎﹀彿琛ㄤ互鍙婇檮甯︾殑鍓綔鐢紝緲旓紝鍟婁笉錛岀粡楠岋紝鍋氳繖涓簨鎯呰繕鏄湁涓浜涙柟娉曠殑銆?/p>

鍦ㄤ粙緇嶈繖涓柟娉曚箣鍓嶏紝棣栧厛瑕佽涓鍙ワ紝浜鴻倝鍋氬畬涓嬮潰鐨勬墍鏈変簨鎯呮槸鑲畾瑕佺柉鎺夌殑錛屾墍浠ヨ繖涓嬈$殑鍙厤緗娉曞垎鏋愬櫒鎴戝凡緇忓喅瀹氫簡涓瀹氳TMD鍐欏嚭涓涓敓鎴愯娉曟爲鐨凜++浠g爜鐨勫伐鍏楓?/p>

涓棰楄娉曟爲錛屽叾瀹炲氨鏄竴澶у爢浜掔浉緇ф壙鐨勭被銆備竴鍒囨垚鐔熺殑璇硶鏍戠粨鏋勬墍鍏鋒湁鐨勫叡鍚岀壒寰侊紝涓嶆槸浠栫殑鎴愬憳鎬庝箞瀹夋帓錛岃屾槸浠栦竴瀹氫細闄勫甫涓涓?a target="_blank">visitor妯″紡鐨勬満鍒躲傝嚦浜庝粈涔堟槸visitor妯″紡錛屽ぇ瀹惰鑷鍙傝冭璁℃ā寮忥紝鎴戝氨涓嶅璇村簾璇濅簡銆傝繖涓嬈$殑鍙厤緗娉曞垎鏋愬櫒鏄甫鏈変竴涓弿榪版ц娉曠殑銆備篃灝辨槸璇達紝璺烝ntlr鎴栬匶acc涓鏍鳳紝棣栧厛鍦ㄤ竴涓枃鏈枃浠墮噷闈㈠噯澶囧ソ璇硶鏍戠粨鏋勫拰鏂囨硶瑙勫垯錛岀劧鍚庢垜鐨勫伐鍏蜂細甯綘鐢熸垚涓涓唴瀛樹腑鐨勮娉曞垎鏋愬櫒錛屼互鍙婄敤C++鎻忚堪鐨勮娉曟爲鐨勫0鏄庡拰瀹炵幇鏂囦歡銆傝繖涓弿榪版ц娉曞氨綾諱技涓嬮潰鐨勮繖涓ぇ瀹剁啛鎮夊埌涓嶈兘鍐嶇啛鎮夌殑甯﹀嚱鏁扮殑鍥涘垯榪愮畻琛ㄨ揪寮忕粨鏋勶細

class Expression
{
}

class NumberExpression : Expression
{
    token value;
}

class BinaryExpression : Expression
{
    enum BinaryOperator
    {
        Add,
        Sub,
        Mul,
        Div,
    }

    Expression firstOperand;
    Expression secondOperand;
    BinaryOperator binaryOperator;
}

class FunctionExpression : Expression
{
    token functionName;
    Expression[] arguments;
}

token NAME = "[a-zA-Z_]/w*";
token NUMBER = "/d+(./d+)";
token ADD = "/+";
token SUB = "-";
token MUL = "/*";
token DIV = "http://";
token LEFT = "/(";
token RIGHT = "/)";
token COMMA = ",";

rule NumberExpression Number
        = NUMBER : value;

rule FunctionExpression Call
        = NAME : functionName "(" [ Exp : arguments { "," Exp : arguments } ] ")";

rule Expression Factor
        = !Number | !Call;

rule Expression Term
        = !Factor;
        = Term : firstOperand "*" Factory : secondOperand as BinaryExpression with { binaryOperator = "Mul" };
        = Term : firstOperand "/" Factory : secondOperand as BinaryExpression with { binaryOperator = "Div" };

rule Expression Exp
        = !Term;
        = Exp : firstOperand "+" Term : secondOperand as BinaryExpression with { binaryOperator = "Add" };
        = Exp : firstOperand "-" Term : secondOperand as BinaryExpression with { binaryOperator = "Sub" };

涓婇潰鐨勮娉曟爲澹版槑鍊熺敤鐨凜#璇硶錛屾弿榪拌搗鏉ョ壒鍒畝鍗曘備絾鏄鍦–++閲岄潰杈懼埌鍙互浣跨敤鐨勭▼搴︼紝鑲畾瑕佹湁涓涓嚜甯︾殑visitor妯″紡銆傛墍浠ュ嚭鏉ヤ箣鍚庣殑浠g爜澶ф灝辯被浼間簬涓嬮潰榪欎釜鏍峰瓙錛?/p>

class Expression;
class NumberExpression;
class BinaryExpression;
class FunctionExpression;

class Expression : public ParsingTreeCustomBase
{
public:
    class IVisitor : public Interface
    {
    public:
        virtual void Visit(NumberExpression* node)=0;
        virtual void Visit(BinaryExpression* node)=0;
        virtual void Visit(FunctionExpression* node)=0;
    };

    virtual void Accept(IVisitor* visitor)=0;
};

class NumberExpression : public Expression
{
public:
    TokenValue value;

    void Accept(IVisitor* visitor){visitor->Visit(this);}
};

class BinaryExpression : public Expression
{
public:
    enum BinaryOperator
    {
        Add, Sub, Mul, Div,
    };
    Ptr<Expression> firstOperator;
    Ptr<Expression> secondOperator;
    BinaryOperator binaryOperator;

    void Accept(IVisitor* visitor){visitor->Visit(this);}
};

class FunctionExpression : public Expression
{
public:
    TokenValue functionName;
    List<Ptr<Expression>> arguments;

    void Accept(IVisitor* visitor){visitor->Visit(this);}
};

涓轟粈涔堣榪欐牱鍋氬憿錛熷涔犺繃闈㈠悜瀵硅薄寮鍙戞柟娉曠殑閮界煡閬擄紝鎶婁竴涓槑鏄炬槸緇ф壙緇撴瀯鐨勪笢瑗垮啓鎴愪竴鍫唘nion/struct鍜屼竴涓猠num鏉ュ垽鏂粬浠紝鏄笉瀵圭殑銆傜涓涓笉濂界殑鍦版柟灝辨槸錛屽鏋滃叾涓殑鎴愬憳闇瑕佹瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟錛岄偅union灝辯敤涓嶄簡浜嗭紝struct灝變竴瀹氫細閫犳垚澶ч噺鐨勫唴瀛樻氮璐廣傚洜涓轟竴棰楄娉曟爲鏄彲浠ュ緢澶х殑銆傚叾嬈★紝褰撹娉曟爲鐨勭粨鏋勶紙涓昏鏄坊鍔犲垹闄や簡鏂扮殑璇硶鏍戠被鍨嬶級涔嬪悗錛屾垜浠牴鏈笉鍙兘淇濊瘉鎴戜滑鎵鏈夌殑swtich(node->enumType)璇彞閮芥帴鍙楀埌浜嗘紜殑鏇存柊銆?/p>

閭h濡備綍瑙e喅榪欎袱涓棶棰樺憿錛熺瓟妗堜箣涓灝辨槸浣跨敤visitor妯″紡銆傚敖綆″垰寮濮嬪啓璧鋒潵鐨勬椂鍊欏彲鑳戒細鏈夌偣鍒壄錛屼絾鏄垜浠彧瑕佹妸鍘熸湰鏄痵wtich緇撴瀯鐨勪唬鐮佸仛涓涓?a target="_blank">Continuation Passing Style鍙樻崲錛屽氨鍙互鍐欏嚭浣跨敤visitor鐨勭増鏈簡銆傚湪榪欓噷鎴戝仛涓涓皬灝忕殑婕旂ず錛屽浣曟妸涓涓滄妸涓婇潰鐨勮娉曟爲榪樺師鎴愬洓鍒欒繍綆楀紡瀛愮殑鍑芥暟鈥濈粰鐢‥xpression::IVisitor鐨勬鏋朵笅瀹炵幇鍑烘潵錛?/p>

class FunctionExpression : public Expression
{
public:
    TokenValue functionName;
    List<Ptr<Expression>> arguments;

    void Accept(IVisitor* visitor){visitor->Visit(this);}
};

class ExpressionPrinter : public Expression::IVisitor
{
public:
    WString result;

    void Visit(NumberExpression* node)
    {
        result+=node->value.stringValue;
    }

    void Visit(BinaryExpression* node)
    {
        result+=L"(";
        node->firstOperand->Accept(this);
        switch(binaryOperator)
        {
        case Add: result+=L" + "; break;
        case Sub: result+=L" - "; break;
        case Mul: result+=L" * "; break;
        case Div: result+=L" / "; break;
        }
        node->secondOperand->Accept(this);
        result+=L")";
    }

    void Visit(FunctionExpression* node)
    {
        result+=node->functionName.stringValue+L"(";
        for(int i=0;i<arguments.Count();i++)
        {
            if(i>0) result+=L", ";
            arguments[i]->Accept(this);
        }
        result+=L")";
    }
};

WString PrintExpression(Ptr<Expression> expression)
{
    ExpressionPrinter printer;
    expression->Accept(&printer);
    return printer.result;
}

鍏跺疄澶у鍙互鐪嬪埌錛屼嬌鐢ㄤ簡visitor妯″紡錛屼唬鐮侀噺鍏跺疄涔熸病鏈夊澶у彉鍖栵紝鏈潵鏄掑綊鐨勫湴鏂硅繕鏄掑綊錛屾湰鏉ヨ璁$畻浠涔堣繕璁$畻浠涔堬紝鍞竴涓嶅悓鐨勫氨鏄師鏈繖涓滃嚱鏁扳濈殑鍙傛暟鍜岃繑鍥炲奸兘璺戝埌浜嗕竴涓獀isitor綾葷殑鎴愬憳鍙橀噺閲岄潰鍘諱簡銆傚綋鐒訛紝涓轟簡渚夸簬浣跨敤錛屼竴鑸潵璇存垜浠細鎶婂師鏈殑鍑芥暟鐨勫師鍨嬪啓鍑烘潵錛屽茍涓斿湪閲岄潰璋冪敤visitor妯″紡錛屽氨鍍忎笂闈㈢殑PrintExpression鍑芥暟涓鏍楓傚鏋滄垜浠珮鍏寸殑璇濓紝瀹屽叏鍙互鍦‥xpressionPrinter榪欎釜visitor綾婚噷闈嬌鐢≒rintExpression錛屾棤闈炲氨鏄湪閲岄潰鏋勯犳柊鐨凟xpressionPrinter鐒跺悗鑾峰彇緇撴瀯緗簡銆備竴鑸潵璇達紝visitor綾婚兘鏄潪甯哥殑杞婚噺綰х殑錛屽湪鐜頒粖鐨凜PU鎬ц兘涓嬮潰錛屾瀯閫犲鍑犱釜瀹屽叏涓嶄細甯︽潵澶氬ぇ褰卞搷銆?/p>

鍙厤緗娉曞垎鏋愬櫒鏃㈢劧鎷ユ湁涓涓弿榪版ц娉曪紝閭d箞鎴戣偗瀹氫篃閽堝榪欎釜鎻忚堪鎬ц娉曞啓浜嗕竴棰楄娉曟爲鐨勩傝繖棰楄娉曟爲鐨勪唬鐮佸湪Common\Source\Parsing\ParsingDefinition.h閲岄潰錛岃孭arsingLogging.cpp鍒欐槸璺熶笂闈㈣鐨勪竴鏍鳳紝鐢╲isitor鐨勬柟娉曞啓浜嗕竴涓簽澶х殑鎶婅娉曟爲杞洖鎻忚堪鎬ц娉曠殑鍑芥暟銆傝繖涓嚱鏁伴潪甯告湁鐢紝涓嶄粎鍙互鐢ㄦ潵鎵搇og錛岃繕鍙互鐢ㄦ潵淇濆瓨紼嬪簭鐢熸垚鐨勪竴涓娉曡鍒欙紙鍙嶆鍙互parse鍥炴潵錛屾墍浠ヤ繚瀛樻垚鏂囨湰鏄竴浠剁壒鍒柟渚跨殑浜嬫儏錛夛紝鐢氳嚦鏄敓鎴愰敊璇秷鎭殑鐗囨絳夌瓑銆?/p>

浠婂ぉ灝卞厛璁插埌榪欓噷浜嗐傜幇鍦ㄧ殑鍙厤緗娉曞垎鏋愬櫒鐨勫紑鍙戣繘搴︽槸姝e湪鍐欒涔夊垎鏋愮殑閮ㄥ垎銆傜瓑鍒拌涔夊垎鏋愬啓瀹屼簡錛屾垜浼氬啀鍐欎竴綃囩邯浜嬫潵璇存槑寮鍙戣涔夊垎鏋愮▼搴忓拰鏋勯犵鍙瘋〃鐨勪竴鑸仛娉曘?/p>

]]>
C++浣跨敤Uniscribe榪涜鏂囧瓧鑷姩鎹㈣鐨勮綆楀拰娓叉煋http://www.shnenglu.com/vczh/archive/2012/11/06/194817.html闄堟鐎?vczh)闄堟鐎?vczh)Tue, 06 Nov 2012 14:34:00 GMThttp://www.shnenglu.com/vczh/archive/2012/11/06/194817.htmlhttp://www.shnenglu.com/vczh/comments/194817.htmlhttp://www.shnenglu.com/vczh/archive/2012/11/06/194817.html#Feedback4http://www.shnenglu.com/vczh/comments/commentRss/194817.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/194817.html闃呰鍏ㄦ枃

]]>
鍙堝埌浜嗕竴騫翠竴搴﹂噸鏋勯氱敤鍙厤緗娉曞垎鏋愬櫒鐨勬椂鍊欎簡http://www.shnenglu.com/vczh/archive/2012/10/30/194052.html闄堟鐎?vczh)闄堟鐎?vczh)Mon, 29 Oct 2012 16:23:00 GMThttp://www.shnenglu.com/vczh/archive/2012/10/30/194052.htmlhttp://www.shnenglu.com/vczh/comments/194052.htmlhttp://www.shnenglu.com/vczh/archive/2012/10/30/194052.html#Feedback6http://www.shnenglu.com/vczh/comments/commentRss/194052.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/194052.html鍥犱負GacUI闇瑕佸疄鐜頒竴涓枃鏈弿榪扮殑紿楀彛鎻忚堪鏍煎紡錛屽啀鍔犱笂C++緇忓父闇瑕佸鐞唜ml鍜宩son絳夊父鐢ㄦ暟鎹粨鏋勶紝榪樻湁鑷繁榪樿鏃朵笉鏃跺紑鍙戜竴浜涜璦鏉ョ帺涓鐜╀箣綾葷殑鐞嗙敱錛屾瘡涓嬈¢亣鍒拌嚜宸辯殑鎶鏈潻鏂扮殑鏃跺欙紝鎬繪槸鍏嶄笉浜嗚瀵瑰彲閰嶇疆璇硶鍒嗘瀽鍣ㄥ仛鍑轟慨鏀廣備笂涓涓増鏈殑鍙厤緗娉曞垎鏋愬櫒鍙互瑙佷箣鍓嶇殑鍗氬鏂囩珷銆?strong>Vczh Library++ 璇硶鍒嗘瀽鍣ㄥ紑鍙戞寚鍗?/a>銆嬨?/p>

涓轟粈涔堣閲嶅啓vlpp鐨勮繖涓閮ㄥ垎鍛紵鍥犱負緇忚繃澶氭鍙厤緗娉曞垎鏋愬櫒鐨勫紑鍙戯紝鎴戞劅瑙夊埌浜咰++鐩存帴鐢ㄦ潵琛ㄨ揪鏂囨硶鏈夊緢澶氬急鐐癸細

1銆丆++鑷韓鐨勭被鍨嬬郴緇熷鑷磋〃杈懼嚭鏉ョ殑鏂囨硶浼氭湁寰堝鍣煶銆傚綋鐒惰繖騫朵笉鏄疌++鐨勯敊錛岃屾槸閫氱敤鐨勮璦鍋氳繖縐嶄簨鎯呮繪槸浼氭湁鐐瑰櫔闊崇殑銆傛棤璁烘槸銆?a target="_blank">Monadic Parser Combinators using C# 3.0銆嬩篃濂斤紝鎴戝ぇ寰蔣鐮旂┒闄㈢殑鍩轟簬Haskell鐨?a target="_blank">Parsec涔熷ソ錛岃繕鏄痓oost鐨?a target="_blank">spirit涔熷ソ錛岀敋鑷蟲槸F#鐨?a target="_blank">Fsyacc涔熷ソ錛岄兘鍦ㄥ睍紺轟簡parser combinator榪欎釜寮哄ぇ鐨勬蹇電殑鍚屾椂錛屼篃鏆撮湶鍑轟簡parser combinator鐨勫急鐐癸細鍦ㄨ娉曞垎鏋愮粨鏋滃拰璇█鐨勬暟鎹粨鏋勭殑緇撳悎鏂歸潰鐗瑰埆鐨勯夯鐑︺傝繖閲岀殑楹葷儲涓嶄粎鍦ㄤ簬浼氱粰鏂囨硶閫犳垚寰堝鍣煶錛岃屼笖澶嶆潅鐨刾arser榪樹細浣垮緱浣犵殑緇撴瀯鐗瑰埆鐨勮噧鑲匡紙鍙傝傾ntlr鐨勬煇浜涘鏉傜殑搴旂敤錛岃繖閲屽氨涓嶄竴涓鍒椾婦浜嗭級銆?/p>

2銆侀毦浠ョ淮鎶ゃ傚鏋滅洿鎺ョ敤C++鎻忚堪涓涓己綾誨瀷鏂囨硶鐨勮瘽錛屽娍蹇呮槸瑕佸熷姪parser combinator榪欎釜姒傚康鐨勩傛蹇墊湰韜槸寰堝帀瀹崇殑錛岃屼笖瀹炵幇鐨勫ソ鐨勮瘽寮鍙戞晥鐜囦細鐗瑰埆鐨勯珮銆備絾鏄浜嶤++榪欑闈炲嚱鏁板紡璇█鏉ヨ錛宲arser combinator榪欑鐗瑰埆鍑芥暟寮忕殑鎻忚堪鏀懼湪C++閲岄潰灝變細澶氬嚭寰堝楹葷儲錛岃濡傞棴鍖呯殑璇硶涓嶅婕備寒鍟︺佹病鏈夊瀮鍦炬敹闆嗗櫒鐨勯棶棰樺鑷磖ule涓巖ule鐨勫驚鐜紩鐢ㄩ棶棰樿繕瑕佽嚜琛屽鐞嗗暒錛堝湪寰堟棭浠ュ墠鐨勪竴綃囧崥瀹㈣璇佽繃浜嗭紝鍙鏄甫瀹屾暣闂寘鍔熻兘鐨勮璦錛岄兘涓瀹氫笉鑳芥槸鐢ㄥ紩鐢ㄨ鏁版潵澶勭悊鍐呭瓨錛岃屽繀欏昏涓涓瀮鍦炬敹闆嗗櫒鐨勶級銆傚敖綆℃垜涓鐩翠互鏉ラ兘榪樻槸娌″仛鍑鴻繃榪欐柟闈㈢殑bug錛屼絾鏄敱浜庯紙涓昏鏄敤鏉ュ鐞嗕綍鏃跺簲璇elete瀵硅薄閮ㄥ垎鐨勶級閫昏緫澶嶆潅錛屽鑷存暟鎹粨鏋勫繀欏諱負delete瀵硅薄鐨勯儴鍒嗚姝ワ紝浠g爜緇存姢璧鋒潵涔熺浉褰撶殑铔嬬柤銆?/p>

3銆佹湁浜涗紭鍖栨棤娉曞仛銆備婦涓畝鍗曠殑渚嬪瓙錛宲arser combinator灝辨牴鏈病鍔炴硶澶勭悊宸﹂掑綊銆傛病鏈夊乏閫掑綊錛屽啓璧鋒煇浜涙枃娉曟潵涔熸槸鐗瑰埆鐨勮泲鐤箋傝繕鏈夊悎騫跺叡鍚屽墠緙絳夌瓑鐨勪紭鍖栦篃涓嶈兘鍋氾紝榪欏鑷存垜浠繀欏諱負浜嗘ц兘鐗虹壊鏈潵灝卞凡緇忓厖婊′簡鍣煶鐨勬枃娉曠殑琛ㄨ揪錛岃漿鑰屼漢宸ヤ綔鏂囨硶鐨勫叡鍚屽墠緙鍚堝茍錛屾枃娉曠湅璧鋒潵灝辨洿涔變簡銆?/p>

褰撶劧涓婇潰涓変釜鐞嗙敱鐪嬭搗鏉ュソ鍍忎笉澶洿瑙傦紝閭f垜灝變婦涓涓吀鍨嬬殑渚嬪瓙銆傚ぇ瀹跺簲璇ヨ繕璁板緱鎴戜互鍓嶅啓榪囦竴涓彨鍋?a href="http://www.shnenglu.com/vczh/archive/2011/03/20/142261.html" target="_blank">NativeX鐨勮璦錛岃繕緇欏畠鍋氫簡涓涓?a href="http://www.shnenglu.com/vczh/archive/2011/02/25/140618.html" target="_blank">甯︽櫤鑳芥彁紺虹殑緙栬緫鍣?/a>錛堣繕鏈?a href="http://www.shnenglu.com/vczh/archive/2010/11/07/132876.html" target="_blank">榪欓噷鍜?a href="http://www.shnenglu.com/vczh/archive/2010/12/05/135505.html" target="_blank">榪欓噷錛夈侼ativeX鏄竴涓狢++瀹炵幇鐨凜+template+concept mapping鐨勮璦錛岃娉曞垎鏋愬櫒褰撶劧鏄敤涓婁竴涓増鏈殑鍙厤緗娉曞垎鏋愬櫒鏉ュ仛鐨勩傛枃娉曡鍒欏緢澶嶆潅錛屼絾鏄C++榪欎箞浠ヨ〃杈撅紝灝辨洿鍔犲鏉備簡錛?a target="_blank">.\Library\Scripting\Languages\NativeX\NativeXParser.cpp錛夛紝宸茬粡鍒頒簡涓嶄粩緇嗙湅灝辨棤娉曠淮鎶ょ殑鍦版浜嗐?/p>

緇間笂鎵榪幫紝鍋氫竴涓柊鐨勫彲閰嶇疆璇硶鍒嗘瀽鍣ㄥ嚭鏉ョ悊鐢卞厖鍒嗭紝鍔垮湪蹇呭緱銆備絾鏄艦寮忎笂鏄粈涔堟牱瀛愮殑鍛紵涓婇潰璇磋繃鎴戜互鍓嶇粰NativeX鍐欒繃涓涓甫鏅鴻兘鎻愮ず鐨勭紪杈戝櫒銆傝繖涓紪杈戝櫒鐢ㄧ殑鏄疻inForm錛岄偅褰撶劧涔熸槸鐢–#鍐欑殑錛屽洜姝ら偅涓鎬ц兘瑕佹眰楂樺埌紱昏氨鐨凬ativeX緙栬緫鍣ㄧ敤鐨勮娉曞垎鏋愬櫒褰撶劧涔熸槸鐢–#鍐欑殑銆傛祦紼嬪ぇ姒傚涓嬶細
1銆佺敤C#鎸夌収瑕佹眰澹版槑璇硶鏍戠粨鏋?br>2銆佷嬌鐢ㄦ垜鐨勫簱鐢–#鍐欎竴涓枃娉?br>3銆佹垜鐨勫簱浼氭墽琛岃繖涓枃娉曪紝鐢熸垚涓澶фC#鍐欑殑絳変環鐨勯掑綊涓嬮檷璇硶鍒嗘瀽鍣ㄧ殑浠g爜
褰撴椂鎴戞妸榪欎釜榪囩▼璁板綍鍦ㄤ簡榪欑瘒鍗氬鏂囩珷閲岄潰銆?/p>

鍥犳鐜板湪灝辨湁涓涓鍒掞紝榪欎釜鏂扮殑鍙厤緗娉曞垎鏋愬櫒褰撶劧榪樻槸瑕佸畬鍏ㄧ敤C++錛屼絾鏄繖灝辮窡姝e垯琛ㄨ揪寮忎竴鏍鳳細
1銆侀鍏堣娉曟爲緇撴瀯鍜屾枃娉曢兘澹版槑鍦ㄤ竴涓瓧絎︿覆閲岄潰
2銆佸彲閰嶇疆璇硶鍒嗘瀽鍣ㄥ彲浠ュ湪鍐呭瓨涓姩鎬佹墽琛岃繖孌墊枃娉曪紝騫舵寜鐓х粰瀹氱殑璇硶鏍戠粨鏋勭粰鍑轟竴涓湪鍐呭瓨涓殑鍔ㄦ佺殑鏁版嵁緇撴瀯
3銆佸彲閰嶇疆璇硶鍒嗘瀽鍣ㄥ綋鐒惰繕瑕侀檮甯︿竴涓懡浠よ宸ュ叿錛岀敤鏉ヨ鏂囨硶鐢熸垚C++浠g爜錛屽寘鎷嚜甯isitor妯″紡鐨勮娉曟爲緇撴瀯錛屽拰C++鍐欑殑閫掑綊涓嬮檷璇硶鍒嗘瀽鍣?/p>

鎵浠ョ幇鍦ㄥ氨鏈変竴涓崏紼匡紝灝辨槸閭d釜鈥滃0鏄庡湪瀛楃涓查噷闈⑩濈殑璇硶鏍戠粨鏋勫拰鏂囨硶鐨勮鏄庛傝繖鏄竴涓緢鏈夋剰鎬濈殑榪囩▼銆?/p>

棣栧厛錛岃繖涓彲閰嶇疆璇硶鍒嗘瀽鍣ㄩ渶瑕佸湪鍐呭瓨涓〃杈捐娉曟爲緇撴瀯錛屽拰涓涓彲浠ユ墽琛岀劧鍚庝駭鐢熷姩鎬佹暟鎹粨鏋勭殑鏂囨硶銆傚洜姝ゆ垜浠湪浣跨敤瀹冪殑鏃跺欙紝鍙互閫夋嫨鐩存帴鍦ㄥ唴瀛樹腑鍫嗗嚭璇硶鏍戠粨鏋勫拰鏂囨硶鐨勬弿榪幫紝鑰屼笉鏄潪寰楃敤閭d釜瀛楃涓茬殑琛ㄨ揪褰㈠紡銆傚綋鐒訛紝瀛楃涓茬殑琛ㄨ揪褰㈠紡鑲畾鏄崄鍒嗙揣鍑戠殑錛屼絾榪欎笉鏄繀欏葷殑錛屽彧鏄帹鑽愮殑銆?/p>

鍏舵錛宲arse榪欎釜鈥滆娉曟爲緇撴瀯鍜屾枃娉曢兘澹版槑鈥濆綋鐒朵篃闇瑕佷竴涓娉曞垎鏋愬櫒鏄笉鏄紵鎵浠ユ垜浠彲浠ョ敤涓婇潰鐨勬柟娉曪紝閫氳繃鐩存帴鍦ㄥ唴瀛樹腑鍫嗗嚭鏂囨硶鏉ョ敤鑷繁鏋勯犲嚭涓涓嚜宸辯殑璇硶鍒嗘瀽鍣ㄣ?/p>

鍐嶈咃紝鏈変簡涓涓唴瀛樹腑鐨勮娉曞垎鏋愬櫒涔嬪悗錛屾垜灝卞彲浠ュ皢涓婇潰絎笁姝ョ殑鍛戒護琛屽伐鍏峰仛鍑烘潵錛岀劧鍚庣敤瀹冩潵鎻忚堪鑷繁鐨勬枃娉曪紝浜х敓鍑轟竴孌礐++鍐欑殑閫掑綊涓嬮檷璇硶鍒嗘瀽鍣紝鐢ㄦ潵鍒嗘瀽鈥滆娉曟爲緇撴瀯鍜屾枃娉曢兘澹版槑鈥濓紝鐒跺悗灝辨湁浜嗕竴瀵笴++浠g爜鏂囦歡銆?/p>

鏈鍚庯紝鎶婁駭鐢熷嚭鏉ョ殑榪欏C++浠g爜鏂囦歡鍔犺繘鍘伙紝鎴戜滑灝辨湁浜嗕竴涓狢++鐩存帴鍐欙紝鑰屼笉鏄湪鍐呭瓨涓姩鎬佹瀯閫犲嚭鏉ョ殑鈥滆娉曟爲緇撴瀯鍜屾枃娉曢兘澹版槑鈥濈殑鍒嗘瀽鍣ㄤ簡銆傜劧鍚庤繖涓垎鏋愬櫒灝卞彲浠ユ浛鎹㈡帀鍛戒護琛屽伐鍏烽噷闈㈤偅涓師鍏堝姩鎬佹瀯閫犲嚭鏉ョ殑璇硶鍒嗘瀽鍣ㄣ傚綋鐒墮偅涓姩鎬佹瀯閫犲嚭鏉ョ殑璇硶鍒嗘瀽鍣ㄨ繖涓椂鍊欏凡緇忔病鐢ㄤ簡錛屽洜涓烘湁浜嗙敓鎴愮殑C++璇硶鍒嗘瀽鍣紝鎴戜滑灝卞彲浠ョ洿鎺ヤ嬌鐢ㄢ滆娉曟爲緇撴瀯鍜屾枃娉曢兘澹版槑鈥濇潵鎻忚堪鑷繁錛屽緱鍒拌繖涔堜竴涓弿榪扮殑瀛楃涓詫紝鐒跺悗闅忔椂閮藉彲浠ョ敤榪欎釜瀛楃涓叉潵鍔ㄦ佺敓鎴愯娉曞垎鏋愬櫒浜嗐?/p>

鎬昏岃█涔嬪氨鏄?br>1銆佸疄鐜板彲閰嶇疆璇硶鍒嗘瀽鍣紝鍙互鐩存帴鐢ㄦ暟鎹粨鏋勫仛鍑轟竴涓駭鐢熷姩鎬佹暟鎹粨鏋勭殑parser combinator錛岃涓篜C銆?br>2銆佺敤PC鍋氫竴涓滆娉曟爲緇撴瀯鍜屾枃娉曢兘澹版槑鈥濈殑璇硶鍒嗘瀽鍣ㄣ傝繖涓滆娉曟爲緇撴瀯鍜屾枃娉曢兘澹版槑鈥濊涓篜C Grammar銆?br>3銆丳C Grammar褰撶劧鍙互鐢ㄦ潵琛ㄨ揪PC Grammar鑷繁錛岃繖鏍鋒垜浠氨寰楀埌浜嗕竴涓笓闂ㄧ敤鏉ヨ鏄庝粈涔堟槸鍚堟硶鐨勨滆娉曟爲緇撴瀯鍜屾枃娉曢兘澹版槑鈥濈殑鎻忚堪鐨勫瓧絎︿覆鐨勮繖涔堜釜鏂囨硶錛岃涓篜C Grammar Syntax Definition銆?br>4銆侀氳繃榪欎喚婊¤凍PC Grammar瑕佹眰鐨凱C Grammar Syntax Definition錛屾垜浠氨鍙互鐢≒C鏉ヨВ閲奝C Grammar Syntax Definition錛屽姩鎬佷駭鐢熶竴涓В閲奝C Grammar鐨勮娉曞垎鏋愬櫒
5銆佹湁浜哖C Grammar鐨勮娉曞垎鏋愬櫒PC Grammar Parser (in memory version)錛屼箣鍚庢垜浠氨鍙互鎶娾滄枃娉?>C++浠g爜鈥濈殑浠g爜鐢熸垚鍣ㄥ仛鍑烘潵錛岀О涔嬩負PC Grammar C++ Codegen銆?br>6銆佹湁浜哖C Grammar C++ Codegen錛屾垜浠氨鍙互鐢ㄤ粬璇誨叆PC Grammar Syntax Definition錛屼駭鐢熶竴涓洿鎺ョ敤C++鍐欑殑PC Grammar鐨勮娉曞垎鏋愬櫒錛屽彨鍋歅C Grammar Parser (C++ version)銆?/p>

鍒版涓烘錛屾垜浠幏寰楃殑涓滆タ鏈?br>1銆丳C 錛圥arser Combinator錛?br>2銆丳C Grammar
3銆丳C Grammar Syntax Definition
4銆丳C Grammar Parser (in memory version)
5銆丳C Grammar Parser (C++ version)
6銆丳C Grammar C++ Codegen

鍏朵腑錛?銆?銆?銆?銆?閮芥槸鍙互鎵ц鐨勶紝2鏄竴涓滄爣鍑嗏濄傚埌浜嗚繖涓姝ワ紝鎴戜滑灝卞彲浠ョ敤PC Grammar Parser (C++ version)鏉ユ浛鎹㈡帀PC Grammar C++ Codegen閲岄潰鐨凱C Grammar Parser (in memory version)浜嗐傝繖灝辮窡gcc瑕佺紪璇戜竴涓皬緙栬瘧鍣ㄦ潵緙栬瘧鑷繁寰楀埌涓涓畬鏁寸殑gcc涓鏍楓傝繖涓繃紼嬭繕鍙互鐢ㄦ潵嫻嬭瘯PC Grammar C++ Codegen鏄惁鍐欑殑瓚沖濂姐?/p>

閭d箞鈥滆娉曟爲緇撴瀯鍜屾枃娉曢兘澹版槑鈥濆埌鍦版槸浠涔堟牱瀛愮殑鍛紵鎴戣繖閲岀粰鍑轟竴涓畝鍗曠殑鏂囨硶錛屽氨鏄敤鏉arse璇稿int銆乿l::collections::List<WString>銆乮nt*銆乮nt&銆乮nt[]銆乿oid(int, WString, double*)鐨勮繖浜涚被鍨嬬殑瀛楃涓蹭簡銆備笅闈㈤鍏堝睍紺哄浣曠敤榪欎釜鎻忚堪鏉ヨВ鍐充笂闈㈢殑鈥滅被鍨嬧濈殑璇硶涔﹀0鏄庯細

class Type{}

class DecoratedType : Type
{
    enum Decoration
    {
        Pointer,
        Reference,
        Array,
    }
    Decoration        decoration;
    Type            elementType;
}

class PrimitiveType : Type
{
    token            name;
}

class GenericType : Type
{
    Type            type;
    Type[]            arguments;
}

class SubType : Type
{
    Type            type;
    token            name;
}

class FunctionType : Type
{
    Type            returnType;
    Type[]            arguments;
}

鐒跺悗灝辨槸澹版槑璇硶鍒嗘瀽鍣ㄦ墍闇瑕佺殑璇嶆硶鍏冪礌錛岀敤姝e垯琛ㄨ揪寮忔潵鎻忚堪錛?/p>

token SYMBOL        = <|>|\[|\]|\(|\)|,|::|\*|&
token NAME            = [a-zA-Z_]\w*

榪欓噷鍙渶瑕佷袱縐峵oken灝卞彲浠ヤ簡銆傛帴涓嬫潵灝辨槸涓ょ絳変環鐨勫浜庤繖涓枃娉曠殑鎻忚堪錛岀敤鏉ュ睍紺哄叏閮ㄧ殑鍔熻兘銆?/p>

========================================================

Type SubableType    = NAME[name] as PrimitiveType
                    = SubableType[type] '<' Type[arguments] { ',' Type[arguments] } '>' as GenericType
                    = SubableType[type] '::' NAME[name] as SubType

Type Type            = @SubableType
                    = Type[elementType](
                            ( '*' {decoration = DecoratedType::Pointer}
                            | '&' {decoration = DecoratedType::Reference}
                            | '[' ']' {decoration = ecoratedType::Array}
                            )
                        ) as DecoratedType
                    = Type[returnType] '(' Type[arguments] { ',' Type[arguments] } ')' as FunctionType

========================================================

rule PrimitiveType    PrimitiveType    = NAME[name]
rule GenericType    GenericType        = SubableType[type] '<' Type[arguments] { ',' Type[arguments] } '>'
rule SubType        SubType            = SubableType[type] :: NAME[name]
rule Type            SubableType        = @PrimitiveType | @GenericType | @SubType

rule DecoratedType    DecoratedType    = Type[elementType] '*' {decoration = DecoratedType::Pointer}
                                    = Type[elementType] '&' {decoration = DecoratedType::Reference}
                                    = Type[elementType] '[' ']' {decoration = DecoratedType::Array}
rule FunctionType    FunctionType    = Type[returnType] '(' Type[arguments] { ',' Type[arguments] } ')'
rule Type            Type            = @SubableType | @DecoratedType | @FunctionType

========================================================

濡傛灉鏁村緋葷粺寮鍙戝嚭鏉ョ殑璇濓紝閭d箞鎴戝氨浼氭彁渚涗竴涓彨鍋歅arserGen.exe鐨勫懡浠よ宸ュ叿錛屾妸涓婇潰鐨勫瓧絎︿覆杞崲涓轟竴涓?strong>鍙鐨勩佺瓑浠蜂笌榪欐鏂囨硶鐨勩佷嬌鐢ㄩ掑綊涓嬮檷鏂規硶鏉ユ弿榪扮殑銆丆++鍐欏嚭鏉ョ殑璇硶鍒嗘瀽鍣ㄥ拰璇硶鏍戝0鏄庝簡銆?/p>

]]>
浣跨敤C++鍜學indows API鎿嶄綔鍩轟簬http鍗忚鐨剎ml servicehttp://www.shnenglu.com/vczh/archive/2012/10/27/193945.html闄堟鐎?vczh)闄堟鐎?vczh)Sat, 27 Oct 2012 07:19:00 GMThttp://www.shnenglu.com/vczh/archive/2012/10/27/193945.htmlhttp://www.shnenglu.com/vczh/comments/193945.htmlhttp://www.shnenglu.com/vczh/archive/2012/10/27/193945.html#Feedback1http://www.shnenglu.com/vczh/comments/commentRss/193945.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/193945.html鍦⊿1姝葷▼緹kula鐨勯紦鍔變笅錛屾垜寮濮嬩嬌鐢╧ula鎻愪緵鐨刟pi鏉ユ搷浣滈偅涓偦閫肩殑“楦熺獫”緗戠珯錛?a style="color: ; text-decoration: underline" target="_blank">https://www.niaowo.me錛夈備笉榪囩敱浜庢垜鑷繁鍦ㄤ笟浣欐椂闂村啓鐨勭▼搴忛兘鍠滄鐢–++鍜學indows API錛屽洜姝ゆ垜鐞㈢(浜嗗嚑澶╋紝鐪熺殑璁╂垜鐢–++緇欏啓浜嗗嚭鏉ャ?/p>

鎴戝啓浜嗕竴涓狧ttpUtility搴撴潵瀹炵幇C++鎿嶄綔http/https鏈嶅姟鐨勫姛鑳斤紝榪欎喚浠g爜鍙互鍦ㄨ繖閲岃幏寰楋細

HttpUtility.h錛?a style="color: ; text-decoration: underline" target="_blank">http://gac.codeplex.com/SourceControl/changeset/view/95641#2295555
HttpUtility.cpp錛?a title="http://gac.codeplex.com/SourceControl/changeset/view/95641#2295554" style="color: ; text-decoration: underline" target="_blank">http://gac.codeplex.com/SourceControl/changeset/view/95641#2295554

浣跨敤鐨勬椂鍊欏緢綆鍗曪紝鍙渶瑕丠ttpRequest閲岄潰濉弧浜嗗弬鏁幫紝鐒跺悗灝卞彲浠ョ敤HttpQuery鍙傛暟鑾峰緱涓涓狧ttpResponse綾誨瀷錛岃繖涓被鍨嬮噷闈㈠啓婊′簡http鏈嶅姟鍣ㄧ殑榪斿洖鍊箋佽繑鍥炲唴瀹瑰拰cookie絳夌殑鏁版嵁銆傝濡傝鐢ㄦ潵post鏉ョ櫥闄嗛笩紿濓紝鐒跺悗鎷垮埌cookie涔嬪悗鏌ヨ棣栭〉鐨勬墍鏈夊笘瀛愶紝澶ф灝卞彲浠ヨ繖涔堝啓錛?/p>

WString NestleGetSession(const WString& username, const WString& password, const WString& apiKey, const WString& apiSecret)
{
    WString body=L"api_key="+apiKey+L"&api_secret="+apiSecret+L"&username="+username+L"&password="+password;

    HttpRequest request;
    HttpResponse response;

    request.SetHost(L"https://www.niaowo.me/account/token/");
    request.method=L"POST";
    request.contentType=L"application/x-www-form-urlencoded";
    request.SetBodyUtf8(body);
    HttpQuery(request, response);

    if(response.statusCode==200)
    {
        return response.cookie;
    }
    else
    {
        return L"";
    }
}

WString NestleGetXml(const WString& path, const WString& cookie)
{
    HttpRequest request;
    HttpResponse response;

    request.SetHost(L"https://www.niaowo.me"+path+L".xml");
    request.method=L"GET";
    request.cookie=cookie;
    request.acceptTypes.Add(L"application/xml");
    HttpQuery(request, response);
   

    if(response.statusCode==200)
    {
        return response.GetBodyUtf8();
    }
    else
    {
        return L"";
    }
}

浜庢槸鎴戜滑緇堜簬鑾峰緱浜嗕竴涓繚瀛樺湪vl::WString鐨剎ml瀛楃涓蹭簡錛岄偅鎬庝箞鍔炲憿錛熻繖涓椂鍊欓渶瑕佸嚭鍔↖XMLDOMDocument2鏉ヨВ鏋愭垜浠殑xml銆傚彧瑕佽浜咺E鐨勮綆楁満涓婇兘鏄湁IXMLDOMDocument2鐨勶紝鑰屼笉瑁匢E鐨刉indows PC鏄笉瀛樺湪鐨勶紝鍥犳鎴戜滑鎬繪槸鍙互澶ц儐鐨勪嬌鐢ㄣ傚綋鐒訛紝鐢↖XMLDOMDocument鐩存帴鏉ラ亶鍘嗕粈涔堜笢瑗跨壒鍒殑鎱紝鎵浠ユ垜浠渶瑕佺殑鏄痻path銆倄path瀵逛簬xml灝辮窡regex瀵逛簬瀛楃涓蹭竴鏍鳳紝鍙互鐩存帴鏌ヨ鍑烘垜浠鐨勪笢瑗褲傞鍏堢湅涓涓嬪浣曟搷浣淚XMLDOMDocument2鎺ュ彛錛?/p>

IXMLDOMNodeList* XmlQuery(IXMLDOMNode* pDom, const WString& xpath)
{
    IXMLDOMNodeList* nodes=0;
    BSTR xmlQuery=SysAllocString(xpath.Buffer());
    if(xmlQuery)
    {
        HRESULT hr=pDom->selectNodes(xmlQuery, &nodes);
        if(FAILED(hr))
        {
            nodes=0;
        }
        SysFreeString(xmlQuery);
    }
    return nodes;
}

WString XmlReadString(IXMLDOMNode* node)
{
    WString result;
    BSTR text=0;
    HRESULT hr=node->get_text(&text);
    if(SUCCEEDED(hr))
    {
        const wchar_t* candidateItem=text;
        result=candidateItem;
        SysFreeString(text);
    }
    return result;
}

void XmlReadMultipleStrings(IXMLDOMNodeList* textNodes, List<WString>& candidates, int max)
{
    candidates.Clear();
    while((int)candidates.Count()<max)
    {
        IXMLDOMNode* textNode=0;
        HRESULT hr=textNodes->nextNode(&textNode);
        if(hr==S_OK)
        {
            candidates.Add(XmlReadString(textNode));
            textNode->Release();
        }
        else
        {
            break;
        }
    }
}

IXMLDOMDocument2* XmlLoad(const WString& content)
{
    IXMLDOMDocument2* pDom=0;
    HRESULT hr=CoCreateInstance(__uuidof(DOMDocument60), NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDom));
    if(SUCCEEDED(hr))
    {
        pDom->put_async(VARIANT_FALSE);
        pDom->put_validateOnParse(VARIANT_FALSE);
        pDom->put_resolveExternals(VARIANT_FALSE);

        BSTR xmlContent=SysAllocString(content.Buffer());
        if(xmlContent)
        {
            VARIANT_BOOL isSuccessful=0;
            hr=pDom->loadXML(xmlContent, &isSuccessful);
            if(!(SUCCEEDED(hr) && isSuccessful==VARIANT_TRUE))
            {
                pDom->Release();
                pDom=0;
            }
            SysFreeString(xmlContent);
        }
    }
    return pDom;
}

鏈変簡榪欏嚑涓嚱鏁頒箣鍚庯紝鎴戜滑灝卞彲浠ュ共涓嬮潰鐨勪簨鎯咃紝璀璇翠粠楦熺獫棣栭〉涓嬭澆絎竴欏電殑鎵鏈塼opic鐨勬爣棰橈細

WString xml=NestleGetXml(L”/topics”, cookie);
IXMLDOMDocument2* pDom=XmlLoad(xml);
List<WString> titles;
IXMLNodeList* nodes=XmlQuery(pDom, L”/hash/topics/topic/title/text()”);
XmlReadMultipleStrings(nodes, titles, 100);

涓轟粈涔堜笂闈㈢殑xpath鏄痟ash/topics/topic/title/text()鍛?鍥犱負榪欎釜xml鐨勫唴瀹瑰ぇ姒傜被浼間簬錛?br /><hash>
    <topics>
        <topic>
            <title>TITLE</title>

鍓╀笅鐨勫ぇ瀹跺氨鍘葷湅浠g爜鍚с傝繖涓晠浜嬪憡璇夋垜浠紝鍙鏈変竴涓悎閫傜殑灝佽錛孋++鍐欒搗榪欎簺鏈潵搴旇璁〤#鏉ュ啓鐨勪笢瑗夸篃涓嶆槸閭d箞鐨勭儲浜虹殑錛屽晩鍝堝搱鍝堝搱銆?/p>

]]>
寮濮嬩嬌鐢╒S2012鏉ュ紑鍙慓acUI浜?/title><link>http://www.shnenglu.com/vczh/archive/2012/08/30/188822.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Thu, 30 Aug 2012 13:29:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2012/08/30/188822.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/188822.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2012/08/30/188822.html#Feedback</comments><slash:comments>25</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/188822.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/188822.html</trackback:ping><description><![CDATA[<div>    Visual Studio 2012鍙戝竷鐨勯偅涓澶╂垜灝辨妸瀹冩悶鍒版墜浜嗐傛柊鐨凜++ IDE鐪熺殑鏄姴鐖嗕簡錛屽啓浠g爜鐨勬劅瑙夋涓嶄簹浜嶤#銆傛垜鏈鍠滄鐨勯儴鍒嗘槸鏅鴻兘琛ュ叏鍜岀潃鑹查儴鍒嗐傚浠奀++鐨勫畯琚覆鏌撴垚灞庣孩鑹詫紝綾誨瀷琚覆鏌撴垚灞庣豢鑹詫紝鍙傛暟琚覆鏌撴垚灞庣伆鑹詫紝榪欐牱鍩烘湰涓嶉渶瑕佽緙栬瘧錛岀湅鐫棰滆壊閮界煡閬撴湁娌℃湁鍐欏銆傛櫤鑳借ˉ鍏ㄥ凡緇忚刀瓚匳AX錛岃屼笖榪樺疄鐜頒簡“緙╁啓榪囨護”錛岃濡傝杈撳叆PNT灝卞彲浠ュ湪寮瑰嚭鍒楄〃閲岄潰鏄劇ず鎵鏈夊ぇ鍐欏瓧姣嶄負PNT鐨勫璞★紙璀璇碢arsingNodeTransition錛夌瓑絳夈傝繖鏍峰仛鐨勫ソ澶勬槸錛屾垜鍙鎵撴湁闄愬嚑涓瓧絎﹀氨鍙互琛ュ畬涓鏁村彞浜嗭紝杈撳叆閫熷害澶уぇ鎻愰珮銆?br /><br />    鎵浠ユ垜鍗囩駭浜嗗嚑涔庢墍鏈夊伐紼嬨傛枃。鐢熸垚閮ㄥ垎鐢变簬杩樺湪鋴社敤DIA100錛屾墍浠ユ殏鏃舵病鏈夊崌綰у埌2012錛屼笉榪囪繖鏄繜鏃╃殑浜嬫儏銆備笉榪囪繖嬈″崌綰ч亣鍒頒簡鍑犱釜灝忛棶棰樸?br /><br />    絎竴涓槸錛屽浜庢病鏈塩apture浠諱綍澶栭儴鍙橀噺鐨刲ambda expression錛屽畠鍙互闅愬紡杞崲鎴愪竴涓嚱鏁版寚閽堛傝繖涓姛鑳絍S2010鏄病鏈夌殑錛岀粨鏋滃崌綰т簡涔嬪悗閫犳垚浜嗘垜鍑犱釜閲嶈澆鍑芥暟鐨勯棶棰橈紝涓嶈繃瑙e喅榪欎釜涓滆タ榪樻槸寰堢畝鍗曠殑錛屽彧瑕佹妸lambda琛ㄨ揪寮忓厛淇濆瓨鍦ㄤ竴涓獀l::Func鍙橀噺閲岄潰灝卞ソ浜嗐?br /><br />    絎簩涓槸WICImagingFactory銆傚湪Windows SDK 7.0閲岄潰錛孋LSID_WICImagingFactory鎸囧悜浜哤IC鐨勫敮涓涓涓増鏈傚湪Windows SDK 8.0閲岄潰錛屽嚭鐜頒簡CLSID_WICImagingFactory1鍜孋LSID_WICImagingFactory2錛屽茍涓擟LSID_WICImagingFactory絳変簬CLSID_WICImagingFactory2銆傞棶棰樺氨鏉ヤ簡錛學indows 7閲岄潰騫舵病鏈塛ICImagingFactory2錛岀粨鏋滄垜CoCreateInstance灝辨槸璐ヤ簡銆備竴寮濮嬭寰楀緢濂囨紝鍚庢潵鎯充簡鎯籌紝鐩存帴鐢╒S閭e己澶х殑Go To Definition鍔熻兘璺沖埌浜嗗畾涔塁LSID_WICImagingFactory鐨勫湴鏂癸紝鐒跺悗鍙戠幇浜嗚繖涓簨鎯呫傚洜姝ゆ垜灝辨妸浠g爜鏀規垚浜嗭紝濡傛灉sdk鐢ㄧ殑鏄珮綰х増鏈紝灝卞己鍒朵嬌鐢?.0鐨勩?br /><br />    VS2012瀵規ā鏉胯娉曠殑媯鏌ユ洿鍔犱弗鏍間簡銆備互鍓嶈繕鍙互鍐檛ypename A<T>::B<T>錛岀幇鍦ㄤ笉琛屼簡錛屽緱鍐欐垚typename A<T>::template B<T>銆傚叾瀹炲悗闈㈤偅涓墠鏄爣鍑嗙殑錛岃屼笖VS2010涔熸敮鎸併傚彧鏄疺S2010涔熷厑璁鎬綘鐪佺暐template銆?br /><br />    VS2012瀵逛簬C++鐨勬敼榪涘凡緇忚窡C#鍑犱箮涓妯′竴鏍蜂簡錛岃屼笖VS2012榪樻敮鎸丆++鐨勫崟鍏冩祴璇曢」鐩傛葷殑鏉ヨ錛屾垜鍗佸垎鍠滄銆?/div><img src ="http://www.shnenglu.com/vczh/aggbug/188822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2012-08-30 21:29 <a href="http://www.shnenglu.com/vczh/archive/2012/08/30/188822.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍚堝茍Visual Studio鏈湴C++XML娉ㄩ噴鏂囨。鍜孭DB鐨勭鍙峰唴瀹?/title><link>http://www.shnenglu.com/vczh/archive/2012/03/10/167539.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Sat, 10 Mar 2012 01:04:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2012/03/10/167539.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/167539.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2012/03/10/167539.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/167539.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/167539.html</trackback:ping><description><![CDATA[     鎽樿: 緇堜簬鍒頒簡嬋鍔ㄤ漢蹇冪殑鏃跺埢浜嗐備粖澶╃殑鍗氬鍐呭灝嗘案榪滄秷闄isual Studio鐨勬湰鍦癈++XML娉ㄩ噴緙栬瘧鍑烘潵鐨刋ML鏂囨。娌℃湁鍔炴硶鐢熸垚鍙鏂囨。鐨勬牴鏈師鍥犮?<br> <br> 棣栧厛浠嬬粛涓涓婥++鐨刋ML娉ㄩ噴銆傚湪鍚敤娉ㄩ噴涔嬪墠錛屾垜浠繀欏誨厛鍘誨伐紼嬪睘鎬ч噷闈紝鎶奫C/C++ -> Output Files -> Generate Xml Documentation Files]璁劇疆鎴怸es銆傝繖鏍鋒垜浠氨鍙互鍦–++鐨勭被鍟婂嚱鏁頒笂闈㈠啓XML娉ㄩ噴錛岀劧鍚庤緙栬瘧鎴愪竴浠藉甫鏈夌鍙烽摼鎺ョ殑XML娉ㄩ噴闆嗗悎銆傝繖閲屽厛緇欎竴涓狦acUI鐨刋ML娉ㄩ噴鐨勪緥瀛愶細  <a href='http://www.shnenglu.com/vczh/archive/2012/03/10/167539.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/vczh/aggbug/167539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2012-03-10 09:04 <a href="http://www.shnenglu.com/vczh/archive/2012/03/10/167539.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>浣跨敤VS API寮鍙戜竴涓狿DB Dumper騫朵笖鍙互鍦ㄦ病瑁匳S2010鐨勮綆楁満涓婅繍琛?/title><link>http://www.shnenglu.com/vczh/archive/2012/03/10/167538.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Fri, 09 Mar 2012 22:43:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2012/03/10/167538.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/167538.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2012/03/10/167538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/167538.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/167538.html</trackback:ping><description><![CDATA[     鎽樿: GacUI鍒頒簡鎾板啓鏂囨。鐨勬椂鍊欎簡銆傝櫧鐒禛acUI鏈韓鐨勫姛鑳借繕娌℃湁鍏ㄩ儴瀹屾垚錛屼絾鏄彂甯冧竴涓猘lpha鐗堣繕鏄彲浠ョ殑銆傚洜姝acUI闇瑕佷竴浠芥枃。銆傝嚜浠?net璇█鏀寔XML娉ㄩ噴鐢熸垚鏂囨。涔嬪悗錛孷isual Studio鐨勬湰鍦癈++涔熸敮鎸佷嬌鐢╔ML娉ㄩ噴浜嗐傚彧瑕佹墦寮浜哰宸ョ▼灞炴?-> C/C++ -> Output Files -> Generate XML Documentation Files]涔嬪悗錛孷isual Studio浼氬湪緙栬瘧鏈湴C++宸ョ▼涔嬪悗錛屽皢鎵鏈夌殑XML娉ㄩ噴鏀墮泦璧鋒潵錛屾斁鍦ㄥ拰鍙墽琛屾枃浠跺悓涓涓洰褰曚笅鐨?ProjectName.xml>閲岄潰銆傜劧鍚庢垜灝卞皾璇昩ing浜嗕竴涓嬫湁娌℃湁浠嶤++鐨刋ML鏂囨。鐢熸垚鍙鏂囨。鐨勫伐鍏鳳紝緇撴灉鍙戠幇鍙湁.net鎵嶆敮鎸併?<br> <br> 鍚庢潵鎴戠◢寰爺絀朵簡涓涓嬶紙璇︾粏鍐呭灝嗕細鍦ㄤ笅涓綃囧崥瀹㈤忛湶錛夛紝鍙戠幇涔嬫墍浠ユ病浜哄啓榪欎釜宸ュ叿錛屾槸鍥犱負鍙湁.net鐨勫彲鎵ц鏂囦歡鎵嶅寘鍚凍澶熷鐨勫厓鏁版嵁錛岃屼笖榪欎簺鍏冩暟鎹槸蹇呴』鐨勶紝鍚﹀垯鏃犳硶鐢熸垚涓涓畬鏁寸殑鏂囨。銆備婦涓緥瀛愶紝铏界劧<ProjectName.xml>鍖呭惈浜唜ml娉ㄩ噴鍜岃娉ㄩ噴鎵鍦ㄧ殑絎﹀彿錛屼絾鏄嵈娌℃湁鍖呭惈璇ョ鍙風殑緇撴瀯淇℃伅銆傜粨鏋滀綘璇曞浘鐢熸垚涓涓嚱  <a href='http://www.shnenglu.com/vczh/archive/2012/03/10/167538.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/vczh/aggbug/167538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2012-03-10 06:43 <a href="http://www.shnenglu.com/vczh/archive/2012/03/10/167538.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>C++鍙嶅皠瀹炵幇鏂規硶璁炬兂錛圙acUI錛?/title><link>http://www.shnenglu.com/vczh/archive/2012/01/11/164003.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Wed, 11 Jan 2012 11:39:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2012/01/11/164003.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/164003.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2012/01/11/164003.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/164003.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/164003.html</trackback:ping><description><![CDATA[<div>    C++鐨勫弽灝勪竴鐩存槸涓涓緢澶氫漢閮藉湪鍋氱殑浜嬫儏銆備笉榪囦粖澶╂垜緇堜簬鏈変簡涓涓畝鍗曠殑鎯蟲硶錛屽綋鐒跺彧瀵筕C++緙栬瘧鍑烘潵鐨勭▼搴忔湁鏁堛傞鍏堢湅涓嬮潰鐨勪竴涓崟鍏冩祴璇曪細<br /><br />    濡傛灉鎴戜滑鏈変笅闈㈢殑浠g爜錛? <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> A{};<br /></span><span style="color: #008080">2</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> B:</span><span style="color: #0000ff">public</span><span style="color: #000000"> A{};<br /></span><span style="color: #008080">3</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> C:</span><span style="color: #0000ff">public</span><span style="color: #000000"> A{};<br /></span><span style="color: #008080">4</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> D:</span><span style="color: #0000ff">public</span><span style="color: #000000"> B, </span><span style="color: #0000ff">public</span><span style="color: #000000"> C{};<br /></span><span style="color: #008080">5</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> E:</span><span style="color: #0000ff">virtual</span><span style="color: #000000"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> A{};<br /></span><span style="color: #008080">6</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> F:</span><span style="color: #0000ff">virtual</span><span style="color: #000000"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> A{};<br /></span><span style="color: #008080">7</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> G:</span><span style="color: #0000ff">public</span><span style="color: #000000"> E, </span><span style="color: #0000ff">public</span><span style="color: #000000"> F{};</span></div>    閭d箞涓嬮潰鐨勪簨鎯呬竴瀹氫細鍙戠敓錛? <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span> <span style="color: #000000">    D d;<br /></span><span style="color: #008080">2</span> <span style="color: #000000">    A</span><span style="color: #000000">&</span><span style="color: #000000"> da1</span><span style="color: #000000">=</span><span style="color: #000000">static_cast</span><span style="color: #000000"><</span><span style="color: #000000">B</span><span style="color: #000000">&></span><span style="color: #000000">(d);<br /></span><span style="color: #008080">3</span> <span style="color: #000000">    A</span><span style="color: #000000">&</span><span style="color: #000000"> da2</span><span style="color: #000000">=</span><span style="color: #000000">static_cast</span><span style="color: #000000"><</span><span style="color: #000000">C</span><span style="color: #000000">&></span><span style="color: #000000">(d);<br /></span><span style="color: #008080">4</span> <span style="color: #000000">    TEST_ASSERT(</span><span style="color: #000000">&</span><span style="color: #000000">da1</span><span style="color: #000000">!=&</span><span style="color: #000000">da2);<br /></span><span style="color: #008080">5</span> <span style="color: #000000">    <br /></span><span style="color: #008080">6</span> <span style="color: #000000">    G g;<br /></span><span style="color: #008080">7</span> <span style="color: #000000">    A</span><span style="color: #000000">&</span><span style="color: #000000"> ga1</span><span style="color: #000000">=</span><span style="color: #000000">static_cast</span><span style="color: #000000"><</span><span style="color: #000000">E</span><span style="color: #000000">&></span><span style="color: #000000">(g);<br /></span><span style="color: #008080">8</span> <span style="color: #000000">    A</span><span style="color: #000000">&</span><span style="color: #000000"> ga2</span><span style="color: #000000">=</span><span style="color: #000000">static_cast</span><span style="color: #000000"><</span><span style="color: #000000">F</span><span style="color: #000000">&></span><span style="color: #000000">(g);<br /></span><span style="color: #008080">9</span> <span style="color: #000000">    TEST_ASSERT(</span><span style="color: #000000">&</span><span style="color: #000000">ga1</span><span style="color: #000000">==&</span><span style="color: #000000">ga2);</span></div><br />    瀵逛簬榪欑virtual緇ф壙鐨勪簨鎯咃紝鍒拌繖閲岃繕鏄緢瀹規槗鐞嗚В鐨勩傞偅鐜板湪鎴戜滑鏉ユ洿榪涗竴姝ワ細 <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080"> 1</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> Base<br /></span><span style="color: #008080"> 2</span> <span style="color: #000000">    {<br /></span><span style="color: #008080"> 3</span> <span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /></span><span style="color: #008080"> 4</span> <span style="color: #000000">        size_t size;<br /></span><span style="color: #008080"> 5</span> <span style="color: #000000"><br /></span><span style="color: #008080"> 6</span> <span style="color: #000000">        Base()<br /></span><span style="color: #008080"> 7</span> <span style="color: #000000">            :size(</span><span style="color: #000000">0</span><span style="color: #000000">)<br /></span><span style="color: #008080"> 8</span> <span style="color: #000000">        {<br /></span><span style="color: #008080"> 9</span> <span style="color: #000000">        }<br /></span><span style="color: #008080">10</span> <span style="color: #000000">    };<br /></span><span style="color: #008080">11</span> <span style="color: #000000"><br /></span><span style="color: #008080">12</span> <span style="color: #000000">    template</span><span style="color: #000000"><</span><span style="color: #000000">typename T</span><span style="color: #000000">></span><span style="color: #000000"><br /></span><span style="color: #008080">13</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> Derived : </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">virtual</span><span style="color: #000000"> Base<br /></span><span style="color: #008080">14</span> <span style="color: #000000">    {<br /></span><span style="color: #008080">15</span> <span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /></span><span style="color: #008080">16</span> <span style="color: #000000">        Derived()<br /></span><span style="color: #008080">17</span> <span style="color: #000000">        {<br /></span><span style="color: #008080">18</span> <span style="color: #000000">            </span><span style="color: #0000ff">if</span><span style="color: #000000">(size</span><span style="color: #000000"><</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(T)) size</span><span style="color: #000000">=</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(T);<br /></span><span style="color: #008080">19</span> <span style="color: #000000">        }<br /></span><span style="color: #008080">20</span> <span style="color: #000000">    };<br /></span><span style="color: #008080">21</span> <span style="color: #000000"><br /></span><span style="color: #008080">22</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> H : </span><span style="color: #0000ff">public</span><span style="color: #000000"> Derived</span><span style="color: #000000"><</span><span style="color: #000000">H</span><span style="color: #000000">></span><span style="color: #000000">{};<br /></span><span style="color: #008080">23</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> I : </span><span style="color: #0000ff">public</span><span style="color: #000000"> H, </span><span style="color: #0000ff">public</span><span style="color: #000000"> Derived</span><span style="color: #000000"><</span><span style="color: #000000">I</span><span style="color: #000000">></span><span style="color: #000000">{};<br /></span><span style="color: #008080">24</span> <span style="color: #000000">    </span><span style="color: #0000ff">class</span><span style="color: #000000"> J : </span><span style="color: #0000ff">public</span><span style="color: #000000"> I, </span><span style="color: #0000ff">public</span><span style="color: #000000"> Derived</span><span style="color: #000000"><</span><span style="color: #000000">J</span><span style="color: #000000">></span><span style="color: #000000">{};</span></div><br />    棣栧厛錛孒銆両鍜孞閮藉悇鑷嫢鏈夎嚜宸辯殑鍞竴鐨勪竴涓狟ase銆侸铏界劧緇ф壙浜咲erived<H>銆丏erived<I>鍜孌erived<J>錛屼絾鏄緇堝彧鎷ユ湁涓涓狟ase銆傚洜涓築ase鏄痸irtual緇ф壙鐨勩?br /><br />    鍏舵錛宻izeof(Derived<T>)>sizeof(Base)濮嬬粓鏄垚绔嬬殑錛屽洜涓築ase鐨剉irtual緇ф壙瀵艱嚧浜咲erived<T>閲岄潰鑷沖皯瑕佷繚瀛樹竴涓寚鍚態ase錛堟垨鑰呭彲浠ョ敤鏉ユ壘鍒癇ase錛夌殑鎸囬拡銆傝繖涓潯浠跺緢閲嶈錛屽洜涓鴻繖瀵艱嚧浜唖izeof(J)>sizeof(I)榪欎釜鏉′歡鏄亽鎴愮珛鐨勩?br /><br />    濂戒簡錛岄偅涔堟潵鐪婮銆傜敱浜嶤++騫舵病鏈夎瀹氬閲嶇戶鎵跨殑鏃跺欙紝鍑犱釜鐖剁被鐨勬瀯閫犲嚱鏁扮殑欏哄簭鏄粈涔堬紝鎵浠ユ垜浠渶瑕乻izeof(J)>sizeof(I)榪欎釜鏉′歡銆備負浠涔堝憿錛熺湅Derived綾葷殑鏋勯犲嚱鏁?#8212;—瀹冧箣璁﹕izeof(T)鏇村ぇ鐨勬暟鎹鐩朆ase閲岄潰鐨勬暟鎹?br /><br />    鎵浠ユ垜浠氨鍙互紜畾涓嬮潰鐨勪簨鎯咃細 <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span> <span style="color: #000000">    </span><span style="color: #0000ff">const</span><span style="color: #000000"> H</span><span style="color: #000000">&</span><span style="color: #000000"> h</span><span style="color: #000000">=</span><span style="color: #000000">H();<br /></span><span style="color: #008080">2</span> <span style="color: #000000">    </span><span style="color: #0000ff">const</span><span style="color: #000000"> H</span><span style="color: #000000">&</span><span style="color: #000000"> i</span><span style="color: #000000">=</span><span style="color: #000000">I();<br /></span><span style="color: #008080">3</span> <span style="color: #000000">    </span><span style="color: #0000ff">const</span><span style="color: #000000"> H</span><span style="color: #000000">&</span><span style="color: #000000"> j</span><span style="color: #000000">=</span><span style="color: #000000">J();<br /></span><span style="color: #008080">4</span> <span style="color: #000000">    TEST_ASSERT(h.size</span><span style="color: #000000"><</span><span style="color: #000000">i.size);<br /></span><span style="color: #008080">5</span> <span style="color: #000000">    TEST_ASSERT(i.size</span><span style="color: #000000"><</span><span style="color: #000000">j.size);<br /></span><span style="color: #008080">6</span> <span style="color: #000000">    TEST_ASSERT(h.size</span><span style="color: #000000">==</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(H));<br /></span><span style="color: #008080">7</span> <span style="color: #000000">    TEST_ASSERT(i.size</span><span style="color: #000000">==</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(I));<br /></span><span style="color: #008080">8</span> <span style="color: #000000">    TEST_ASSERT(j.size</span><span style="color: #000000">==</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(J));</span></div><br />    鏃犺J鐨勪笁涓狣erived<T>鐨勬瀯閫犲嚱鏁拌皝鍏堟墽琛岋紝鏈鍚庤兘澶熺暀涓嬫潵鐨凚ase閲岄潰鐨勬暟鎹偗瀹氭槸Derived<J>閲岄潰鐨勬暟鎹傝鍒拌繖閲屽簲璇ュ緢娓呮浜嗐傚鏋滆鑰呰繕娌℃兂鍒拌繖璺熷弽灝勬湁浠涔堝叧緋葷殑璇濓紝閭d箞璇鋒兂涓涓嬶紝濡傛灉Base闄や簡size浠ュ錛岃繕鏈変竴涓狪TypeDescriptor** typeDescriptor;鎴愬憳銆傜劧鍚嶥erived鏀規垚榪欐牱錛? <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080"> 1</span> <span style="color: #000000">template</span><span style="color: #000000"><</span><span style="color: #000000">typename T</span><span style="color: #000000">></span><span style="color: #000000"><br /></span><span style="color: #008080"> 2</span> <span style="color: #000000"></span><span style="color: #0000ff">class</span><span style="color: #000000"> Derived : <img alt="" src="http://www.shnenglu.com/Images/dot.gif" /><br /></span><span style="color: #008080"> 3</span> <span style="color: #000000">{<br /></span><span style="color: #008080"> 4</span> <span style="color: #000000"></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /></span><span style="color: #008080"> 5</span> <span style="color: #000000">    </span><span style="color: #0000ff">static</span><span style="color: #000000"> ITypeDescriptor</span><span style="color: #000000">*</span><span style="color: #000000"> type;<br /></span><span style="color: #008080"> 6</span> <span style="color: #000000"><br /></span><span style="color: #008080"> 7</span> <span style="color: #000000">    Derived()<br /></span><span style="color: #008080"> 8</span> <span style="color: #000000">    {<br /></span><span style="color: #008080"> 9</span> <span style="color: #000000">        </span><span style="color: #0000ff">if</span><span style="color: #000000">(<img alt="" src="http://www.shnenglu.com/Images/dot.gif" />){size</span><span style="color: #000000">=</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(T); typeDescriptor</span><span style="color: #000000">=&</span><span style="color: #000000">type;}<br /></span><span style="color: #008080">10</span> <span style="color: #000000">    }<br /></span><span style="color: #008080">11</span> <span style="color: #000000">};</span></div><br />    閭d箞涓嶇浣犵殑J鎷垮埌鎵嬮噷鐨勭被鍨嬫槸浠涔堬紝鍝曟槸const H& j錛岄偅涔坖.typeDescriptor鑲畾灝辨槸&Derived<J>::type;<br /><br />    鍒拌繖閲岃繕娌℃湁璺烿C++鏈夊叧緋葷殑涓滆タ銆傚亣璁綢TypeDescriptor鏄竴涓凍澶熶唬琛ㄥ弽灝勫姛鑳界殑楂樼駭鎺ュ彛鐨勮瘽錛岄偅涔堟垜浠鎬庝箞瀹炵幇瀹冨憿錛熸垜浠嚜宸辨潵鎸夌収瀛楃涓插幓璋冪敤鍚勭鍑芥暟浠涔堢殑鍘誨疄鐜板畠鑲畾楹葷儲鍒版浜嗐備絾鏄鏋滃ぇ瀹惰繕璁扮殑鎴戝墠闈㈢殑<a style="text-decoration: underline" href="http://www.shnenglu.com/vczh/archive/2011/12/30/163200.html" target="_blank">榪欑瘒鍗氬鏂囩珷</a>鐨勮瘽錛岄偅涔堝ぇ瀹惰偗瀹氭兂鍒頒簡錛屾垜浠彲浠ュ啓涓涓▼搴忔潵鏇挎垜浠pdb鐢熸垚ITypeDescriptor鐨勪唬鐮侊紝榪樻湁鎶婂叿浣撶殑瀵硅薄璧嬪艱繘Derived<T>::type閲岄潰鍘葷殑涓涓垵濮嬪寲鍑芥暟錛佸晩鍝堝搱鍝堬紒褰撶劧pdb鍙兘鏄粠Visual C++緙栬瘧鍑烘潵鐨勶紝灝辯畻涓嶆槸錛屼篃鑷沖皯鍙兘鏄疻indows涓婇潰鐨勩備笉榪囧GacUI鏉ヨ騫舵棤鎵璋撱傚洜涓烘垜鍙鎶奊acUI鍦╒isualStudio閲岄潰緙栬瘧鐢熸垚鍙嶅皠鐨勪唬鐮侊紝榪欎釜鐢熸垚涔嬪悗鐨勪唬鐮佹垜榪樻槸鑳芥斁鍒板叾浠栧湴鏂圭紪璇戠殑銆傚埌鏃跺欐垜鍙榪炲悓榪欐浠g爜涓騫跺彂甯冨氨濂戒簡銆?br /><br />    褰撶劧錛岃繖涓▼搴忎笉浠呬粎鍙互甯垜瀹炵幇ITypeDescriptor錛岃繕鍙互甯垜瀹炵幇C璇█鍜孋++璇█鐨刣ll鎺ュ彛鐨勫疄鐜幫紝鍥犱負dll閲岄潰鑲畾涓嶈兘鏆撮湶妯℃澘鐨勩備笅闈㈠氨浠呴渶瑕佹垜鍘繪妸瀹冨仛鍑烘潵灝卞彲浠ヤ簡銆傝嚦姝わ紝鎴戜滑璁╀竴涓被鏀寔鍙嶅皠鐨勪唬浠峰緢浣?#8212;—鍙璁╀粬緇ф壙鑷狣erived<鑷繁>灝卞ソ浜嗐?br /></div><img src ="http://www.shnenglu.com/vczh/aggbug/164003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2012-01-11 19:39 <a href="http://www.shnenglu.com/vczh/archive/2012/01/11/164003.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍥炴潵浜嗭紙VL++3.0璁″垝錛?/title><link>http://www.shnenglu.com/vczh/archive/2009/10/09/98207.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Fri, 09 Oct 2009 15:17:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2009/10/09/98207.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/98207.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2009/10/09/98207.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/98207.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/98207.html</trackback:ping><description><![CDATA[     鎽樿: 涔嬪墠鍥犱負闈炲父蹇欙紝鍔犱笂鏃犺亰寮鍙戜粈涔堢被浼糤CF鍜學PF鐨勪笢瑗匡紝鏈榪戠粓浜庢壘鍒頒簡鏂扮殑鐩爣浜嗭紝浜庢槸涔嬪墠閭d簺灝變笉鍋氫簡銆傞殧浜嗚繖涔堜箙娌℃硶鏂囩珷涓昏鏄洜涓烘渶榪戞病鍐欏嚭浠涔堝畬鏁寸殑涓滆タ銆傚浗搴嗙帺浜?澶╋紝涔嬪墠鍦ㄨ鍒扸L++3.0銆?<br> <br> VL++3.0琚畾浣嶄負涓涓負浜嗘暟鎹鐞嗚屽紑鍙戠殑C++搴撱傝繖涓簱涓嶇殑鐗圭偣鍦ㄤ簬鈥滃叾浠栬璦鐨勫懗閬撳緢嫻撯濄侰++鐨勫簱鐢ㄨ搗鏉ヤ笉鐖戒富瑕佹槸鍥犱負鑰佹槸瑕佹垜鎸変笅鍒掔嚎錛岃屼笖澶ч噺搴旂敤闈濷OP鐗規у鑷碔DE鐨勮嚜鍔ㄨˉ鍏ㄦ棤娉曞彂鎸ヤ綔鐢ㄣ傛墍浠ヤ負浜嗗譏琛ヨ繖涓己闄鋒垜鍋氫簡涓涓緢涓嶄竴鏍風殑涓滆タ錛屼篃灝辨槸VL++浜嗐傜粡榪囦簡涓夊勾澶氱殑寮鍙戯紝1.0鍜?.0宸茬粡鐩哥戶鍑虹倝錛屾瘡涓嬈℃墦緲繪柊閮借В鍐充簡涓浜涘墠涓涓増鏈В鍐充笉浜嗙殑闂銆?nbsp; <a href='http://www.shnenglu.com/vczh/archive/2009/10/09/98207.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/vczh/aggbug/98207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2009-10-09 23:17 <a href="http://www.shnenglu.com/vczh/archive/2009/10/09/98207.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>C++榪滅▼璋冪敤綾繪搷浣滄敮鎸丆allback Interfacehttp://www.shnenglu.com/vczh/archive/2009/07/18/90409.html闄堟鐎?vczh)闄堟鐎?vczh)Sat, 18 Jul 2009 02:20:00 GMThttp://www.shnenglu.com/vczh/archive/2009/07/18/90409.htmlhttp://www.shnenglu.com/vczh/comments/90409.htmlhttp://www.shnenglu.com/vczh/archive/2009/07/18/90409.html#Feedback10http://www.shnenglu.com/vczh/comments/commentRss/90409.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/90409.html
浣跨敤榪欎釜涓滆タ鍙互寮鍙戜竴浜汣/S妯″紡鐨勭▼搴忥紝鐒跺悗鍙渶瑕佸皢鏈嶅姟鍣ㄥ拰瀹㈡埛绔湅鎴愬悓涓涓▼搴忥紝灝嗗鎴風璁や負鏄緢澶氫釜綰跨▼灝辮浜嗐傛湇鍔″櫒绔彁渚涗竴浜涚被緇欏鎴風鍒涘緩騫朵嬌鐢紝褰撹繖浜涙湇鍔$被瑕佹眰鍥炶皟鐨勬椂鍊欙紝瀹㈡埛绔彧闇瑕佹寜鐓у洖璋冪殑鎺ュ彛瀹炵幇鍥炶皟錛岀劧鍚庡皢鎸囬拡鎻愪緵緇欐湇鍔$被灝辮浜嗐傚墿涓嬫潵鐨勯摼鎺ュ晩璋冨害鍟婄綉緇滀紶杈撶殑闂灝卞叏閮ㄤ笉鐢ㄧ浜嗭紝闈炲父鏂逛究銆?nbsp; 闃呰鍏ㄦ枃

]]>
瀹炵幇C++榪滅▼璋冪敤綾葷殑鎿嶄綔銆?/title><link>http://www.shnenglu.com/vczh/archive/2009/07/04/89211.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Sat, 04 Jul 2009 02:07:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2009/07/04/89211.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/89211.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2009/07/04/89211.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/89211.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/89211.html</trackback:ping><description><![CDATA[     鎽樿: 榪欐灞曠ず濡備綍灝嗕竴涓湇鍔″櫒绔殑C++綾昏瀹㈡埛绔皟鐢ㄣ備嬌鐢ㄦ棭涓婂垰鍒氬紑鍙戝畬鐨勫伐鍏鳳紝鐢ㄦ埛鍙互涓嶇敤澶勭悊浠諱綍浼犺緭榪囩▼涓殑榪炴帴鍜岀紪鐮佽В鐮佺瓑鎿嶄綔銆傝繖嬈″疄鐜頒竴涓洓鍒欒繍綆楃殑璇硶鍒嗘瀽鍣紝瀹㈡埛绔彂閫佽〃杈懼紡錛屾湇鍔″櫒绔紶鍥炶娉曟爲錛堢戶鎵挎爲閭d釜妯″瀷錛夛紝瀹㈡埛绔皢璇硶鏍戜紶鍥炲幓錛屾湇鍔″櫒绔紶鍥炶繍綆楃粨鏋溿?nbsp; <a href='http://www.shnenglu.com/vczh/archive/2009/07/04/89211.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/vczh/aggbug/89211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2009-07-04 10:07 <a href="http://www.shnenglu.com/vczh/archive/2009/07/04/89211.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>C++鍩轟簬綾諱技鍙嶅皠鏈哄埗鐨勫嚱鏁拌皟鐢ㄥ畬鎴?/title><link>http://www.shnenglu.com/vczh/archive/2009/06/30/88880.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Tue, 30 Jun 2009 04:47:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2009/06/30/88880.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/88880.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2009/06/30/88880.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/88880.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/88880.html</trackback:ping><description><![CDATA[     鎽樿: 鐜板湪涓嶄粎鍙互闃呰綾葷殑鎴愬憳錛屼篃鍙互鐢ㄥ嚱鏁板悕鐨勫瓧絎︿覆鍘昏皟鐢ㄥ嚱鏁板茍鍙栧緱緇撴灉浜嗐備唬鐮佷笌榪欑瘒鏂囩珷鐨勫疄渚嬬被浼鹼紝鍥犳鍙創鍑烘洿鏀圭殑閮ㄥ垎浠ュ強紼嬪簭鎴浘銆?nbsp; <a href='http://www.shnenglu.com/vczh/archive/2009/06/30/88880.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/vczh/aggbug/88880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2009-06-30 12:47 <a href="http://www.shnenglu.com/vczh/archive/2009/06/30/88880.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>孌嬪簾鐗圚TTP Server涔嬪皬璇曠墰鍒http://www.shnenglu.com/vczh/archive/2009/06/29/88834.html闄堟鐎?vczh)闄堟鐎?vczh)Mon, 29 Jun 2009 13:19:00 GMThttp://www.shnenglu.com/vczh/archive/2009/06/29/88834.htmlhttp://www.shnenglu.com/vczh/comments/88834.htmlhttp://www.shnenglu.com/vczh/archive/2009/06/29/88834.html#Feedback4http://www.shnenglu.com/vczh/comments/commentRss/88834.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/88834.html闃呰鍏ㄦ枃

]]>
C++鍩轟簬綾諱技鍙嶅皠鏈哄埗鐨刋ML搴忓垪鍖栧拰鍙嶅簭鍒楀寲瀹屾垚http://www.shnenglu.com/vczh/archive/2009/06/29/88758.html闄堟鐎?vczh)闄堟鐎?vczh)Mon, 29 Jun 2009 04:12:00 GMThttp://www.shnenglu.com/vczh/archive/2009/06/29/88758.htmlhttp://www.shnenglu.com/vczh/comments/88758.htmlhttp://www.shnenglu.com/vczh/archive/2009/06/29/88758.html#Feedback10http://www.shnenglu.com/vczh/comments/commentRss/88758.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/88758.html闃呰鍏ㄦ枃

]]>
閲嶅啓浜咰++鐨勭被浼煎弽灝勭殑宸ュ叿http://www.shnenglu.com/vczh/archive/2009/06/25/88533.html闄堟鐎?vczh)闄堟鐎?vczh)Thu, 25 Jun 2009 14:48:00 GMThttp://www.shnenglu.com/vczh/archive/2009/06/25/88533.htmlhttp://www.shnenglu.com/vczh/comments/88533.htmlhttp://www.shnenglu.com/vczh/archive/2009/06/25/88533.html#Feedback4http://www.shnenglu.com/vczh/comments/commentRss/88533.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/88533.html闃呰鍏ㄦ枃

]]>
浣跨敤COM瀹炵幇鎺т歡鍐呭鐨凞rag and Drophttp://www.shnenglu.com/vczh/archive/2009/05/30/86163.html闄堟鐎?vczh)闄堟鐎?vczh)Sat, 30 May 2009 05:17:00 GMThttp://www.shnenglu.com/vczh/archive/2009/05/30/86163.htmlhttp://www.shnenglu.com/vczh/comments/86163.htmlhttp://www.shnenglu.com/vczh/archive/2009/05/30/86163.html#Feedback4http://www.shnenglu.com/vczh/comments/commentRss/86163.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/86163.html
瀹炵幇浜嗕箣鍚庯紝紼嬪簭鍒氬紑濮嬮渶瑕佽皟鐢∣ldInitialize(NULL);錛岀粨鏉熺殑鏃跺欒皟鐢∣nUninitialize();錛屾帶浠跺垱寤虹殑鏃跺欒皟鐢≧egisterDragDrop錛屾帶浠剁粨鏉熺殑鏃跺欒皟鐢≧evokeDragDrop銆傜劧鍚庡氨鍙互閫氳繃榪欎簺COM鏉ュ仛Drag and Drop浜嗐備笅闈㈡槸鎺ュ彛鐨勫疄鐜幫細  闃呰鍏ㄦ枃

]]>
Combinator Parser淇敼閿欒澶勭悊鏂規硶http://www.shnenglu.com/vczh/archive/2009/05/04/81860.html闄堟鐎?vczh)闄堟鐎?vczh)Mon, 04 May 2009 10:35:00 GMThttp://www.shnenglu.com/vczh/archive/2009/05/04/81860.htmlhttp://www.shnenglu.com/vczh/comments/81860.htmlhttp://www.shnenglu.com/vczh/archive/2009/05/04/81860.html#Feedback1http://www.shnenglu.com/vczh/comments/commentRss/81860.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/81860.html闃呰鍏ㄦ枃

]]>
鎼炲畾妯℃澘鍏冪紪紼嬶紙meta programming錛?/title><link>http://www.shnenglu.com/vczh/archive/2009/04/08/79291.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Wed, 08 Apr 2009 13:17:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2009/04/08/79291.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/79291.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2009/04/08/79291.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/79291.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/79291.html</trackback:ping><description><![CDATA[     鎽樿: 浠婂ぉ闂插緱鏃犺亰錛屾棭涓婅搗鏉ヤ範鎯х灍涓鐬焍oost錛岀獊鐒剁湅涓簡瀹冪殑MPL搴擄紝鎵浠ヨ嚜宸卞疄鐜頒簡涓涓瓙闆嗘秷紓ㄦ椂闂淬?<br> <br> 宸茬粡瀹炵幇鐨勫姛鑳芥湁錛氭暣鏁拌繍綆椼侀棴鍖呫佸垪琛ㄥ鐞嗙瓑銆傛垜鐢ㄤ簡鑷繁鐨剈nit test妗嗘灦錛岄氳繃鍐欎竴涓嚱鏁拌緭鍑轟竴涓睘浜庤嚜宸辯殑MPL綾誨瀷鐨勫瓧絎︿覆錛堣濡侺ist<Int<0>,List<Int<1>,Empty>>浜х敓"[0 , 1]"錛夛紝鐒跺悗鐢ㄨ嚜宸卞啓鐨勫瓧絎︿覆姣旇緝錛屽彲浠ュ彂鐜板簱閲岄潰鏄惁鏈夐敊銆?<br> <br> 涓涓嬫湁涓や喚浠g爜錛岀涓浠芥槸浣跨敤錛岀浜屼喚鏄嚜宸辯殑MPL鐨勬簮浠g爜錛?nbsp; <a href='http://www.shnenglu.com/vczh/archive/2009/04/08/79291.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/vczh/aggbug/79291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2009-04-08 21:17 <a href="http://www.shnenglu.com/vczh/archive/2009/04/08/79291.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>瀹炵幇浜咹uffman鍘嬬緝瑙e帇綆楁硶http://www.shnenglu.com/vczh/archive/2009/01/11/71693.html闄堟鐎?vczh)闄堟鐎?vczh)Sat, 10 Jan 2009 17:16:00 GMThttp://www.shnenglu.com/vczh/archive/2009/01/11/71693.htmlhttp://www.shnenglu.com/vczh/comments/71693.htmlhttp://www.shnenglu.com/vczh/archive/2009/01/11/71693.html#Feedback0http://www.shnenglu.com/vczh/comments/commentRss/71693.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/71693.html闃呰鍏ㄦ枃

]]>
淇敼鍚庣殑LZ77鍘嬬緝瑙e帇婧愮爜http://www.shnenglu.com/vczh/archive/2009/01/07/71418.html闄堟鐎?vczh)闄堟鐎?vczh)Wed, 07 Jan 2009 07:35:00 GMThttp://www.shnenglu.com/vczh/archive/2009/01/07/71418.htmlhttp://www.shnenglu.com/vczh/comments/71418.htmlhttp://www.shnenglu.com/vczh/archive/2009/01/07/71418.html#Feedback6http://www.shnenglu.com/vczh/comments/commentRss/71418.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/71418.html
1銆佸彲淇敼鐨刉indow Size銆傚帇緙╂祦浼氭妸Window Size鍐欒繘鍘伙紝瑙e帇嫻佽兘澶熻嚜鍔ㄨ幏鍙栥?
2銆佸彂鐜板啑浣欑殑鍦版柟錛屾瘡涓涓爣璁扮殑鍘嬬緝鍧楄妭鐪佷簡涓浣嶃?
3銆佸鏋滅敤鎴蜂竴嬈℃у啓鍏ョ殑瀛楄妭涓嶅澶氬垯浼氱紦瀛樿搗鏉ワ紝涓婁竴鐗堟湰鍒欐槸鐩存帴鍘嬬緝瀹屻傝繖鏍蜂細涓㈠け鏌愪簺鍘熸湰鍙互鍘嬬緝鐨勬暟鎹紝鍥犳淇銆?nbsp; 闃呰鍏ㄦ枃

]]>
LZ77鍘嬬緝鏁堟灉嫻嬭瘯http://www.shnenglu.com/vczh/archive/2009/01/07/71390.html闄堟鐎?vczh)闄堟鐎?vczh)Tue, 06 Jan 2009 16:36:00 GMThttp://www.shnenglu.com/vczh/archive/2009/01/07/71390.htmlhttp://www.shnenglu.com/vczh/comments/71390.htmlhttp://www.shnenglu.com/vczh/archive/2009/01/07/71390.html#Feedback0http://www.shnenglu.com/vczh/comments/commentRss/71390.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/71390.html闃呰鍏ㄦ枃

]]>
瀹炵幇浜嗕竴涓?28闀垮害紿楀彛澶у皬鐨凩Z77鍘嬬緝瑙e帇綆楁硶http://www.shnenglu.com/vczh/archive/2009/01/06/71275.html闄堟鐎?vczh)闄堟鐎?vczh)Mon, 05 Jan 2009 17:47:00 GMThttp://www.shnenglu.com/vczh/archive/2009/01/06/71275.htmlhttp://www.shnenglu.com/vczh/comments/71275.htmlhttp://www.shnenglu.com/vczh/archive/2009/01/06/71275.html#Feedback5http://www.shnenglu.com/vczh/comments/commentRss/71275.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/71275.html闃呰鍏ㄦ枃

]]>
鍒嗚В澶嶆潅鐨勫懡浠よ鍙傛暟http://www.shnenglu.com/vczh/archive/2008/12/24/70253.html闄堟鐎?vczh)闄堟鐎?vczh)Wed, 24 Dec 2008 09:13:00 GMThttp://www.shnenglu.com/vczh/archive/2008/12/24/70253.htmlhttp://www.shnenglu.com/vczh/comments/70253.htmlhttp://www.shnenglu.com/vczh/archive/2008/12/24/70253.html#Feedback2http://www.shnenglu.com/vczh/comments/commentRss/70253.htmlhttp://www.shnenglu.com/vczh/services/trackbacks/70253.html闃呰鍏ㄦ枃

]]>
Vczh Serialization Demo 錛氬湪緗戠粶涓婁紶閫掑鏉傚璞?/title><link>http://www.shnenglu.com/vczh/archive/2008/11/22/67612.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Sat, 22 Nov 2008 10:26:00 GMT</pubDate><guid>http://www.shnenglu.com/vczh/archive/2008/11/22/67612.html</guid><wfw:comment>http://www.shnenglu.com/vczh/comments/67612.html</wfw:comment><comments>http://www.shnenglu.com/vczh/archive/2008/11/22/67612.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.shnenglu.com/vczh/comments/commentRss/67612.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vczh/services/trackbacks/67612.html</trackback:ping><description><![CDATA[     鎽樿: 浠婂ぉ灝哠erialization榪涜浜嗛噸鏋勶紝璁╁叾鏀寔瀹瑰櫒銆備簬鏄嬌鐢ㄤ互鍓嶇殑鍩虹璁炬柦灝辮兘瀹屾垚榪欎釜Demo浜嗐備唬鐮佸涓嬶細  <a href='http://www.shnenglu.com/vczh/archive/2008/11/22/67612.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/vczh/aggbug/67612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2008-11-22 18:26 <a href="http://www.shnenglu.com/vczh/archive/2008/11/22/67612.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://www.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://666675com.com" target="_blank">国产精品看片你懂得</a>| <a href="http://9993334.com" target="_blank">麻豆国产精品777777在线</a>| <a href="http://booyitech.com" target="_blank">欧美视频一区</a>| <a href="http://021jjjflaw.com" target="_blank">先锋a资源在线看亚洲</a>| <a href="http://tizenkorea.com" target="_blank">亚洲直播在线一区</a>| <a href="http://aa56789.com" target="_blank">激情av一区</a>| <a href="http://lfxhfh.com" target="_blank">欧美激情一区二区三区蜜桃视频</a>| <a href="http://hcbr365.com" target="_blank">欧美暴力喷水在线</a>| <a href="http://85995m.com" target="_blank">亚洲欧美在线观看</a>| <a href="http://yada-jg.com" target="_blank">欧美一区免费</a>| <a href="http://77xyc77.com" target="_blank">亚洲黄色影片</a>| <a href="http://9uu91.com" target="_blank">亚洲欧美久久久久一区二区三区</a>| <a href="http://wanyoulipin.com" target="_blank">国内精品亚洲</a>| <a href="http://shno1steel.com" target="_blank">亚洲精品一区二区三区99</a>| <a href="http://yw1998.com" target="_blank">亚洲日本欧美在线</a>| <a href="http://oksousou.com" target="_blank">一本一本a久久</a>| <a href="http://3531888.com" target="_blank">久久免费视频在线</a>| <a href="http://0999555.com" target="_blank">在线视频亚洲</a>| <a href="http://686852a.com" target="_blank">久久国产毛片</a>| <a href="http://xiaokd666.com" target="_blank">亚洲一级在线</a>| <a href="http://w7727.com" target="_blank">久久综合久久综合九色</a>| <a href="http://337795.com" target="_blank">亚洲视频一区二区在线观看</a>| <a href="http://www-699603.com" target="_blank">香蕉成人久久</a>| <a href="http://ccc36-com.com" target="_blank">在线视频免费在线观看一区二区</a>| <a href="http://tristooges.com" target="_blank">欧美一级片一区</a>| <a href="http://quanfadq.com" target="_blank">日韩一级精品</a>| <a href="http://163263.com" target="_blank">久久久久成人精品</a>| <a href="http://569688.com" target="_blank">亚洲永久免费av</a>| <a href="http://by1473.com" target="_blank">免费成人av在线看</a>| <a href="http://tigerpowerinc.com" target="_blank">欧美专区中文字幕</a>| <a href="http://tongrenyaoye.com" target="_blank">欧美精品日韩三级</a>| <a href="http://858185gg.com" target="_blank">噜噜噜噜噜久久久久久91</a>| <a href="http://www11108b.com" target="_blank">欧美深夜福利</a>| <a href="http://wwwmm131.com" target="_blank">亚洲国产成人精品久久</a>| <a href="http://344230.com" target="_blank">国产精品另类一区</a>| <a href="http://116016.com" target="_blank">亚洲精品国产精品国产自</a>| <a href="http://taoseav8.com" target="_blank">国产综合欧美</a>| <a href="http://icciran.com" target="_blank">亚洲一区二区三区激情</a>| <a href="http://tubcup.com" target="_blank">99精品欧美一区</a>| <a href="http://24kshopss.com" target="_blank">久久人人爽人人爽</a>| <a href="http://8842aa.com" target="_blank">久久精品一区二区国产</a>| <a href="http://wg135.com" target="_blank">欧美揉bbbbb揉bbbbb</a>| <a href="http://chongpiapia.com" target="_blank">欧美成人一区二区</a>| <a href="http://7776701.com" target="_blank">国内精品伊人久久久久av影院</a>| <a href="http://hbshwx.com" target="_blank">一区二区三区四区五区视频</a>| <a href="http://8847m.com" target="_blank">亚洲国产人成综合网站</a>| <a href="http://actskynet.com" target="_blank">久久精品国产亚洲aⅴ</a>| <a href="http://52wenxiu.com" target="_blank">性色av一区二区三区</a>| <a href="http://7171152.com" target="_blank">欧美另类99xxxxx</a>| <a href="http://aabbcc11.com" target="_blank">欧美激情视频给我</a>| <a href="http://56718ca.com" target="_blank">亚洲国产经典视频</a>| <a href="http://joy-learn.com" target="_blank">久久午夜色播影院免费高清</a>| <a href="http://91x8.com" target="_blank">久久青草欧美一区二区三区</a>| <a href="http://xxxcalls.com" target="_blank">国产精品亚洲аv天堂网</a>| <a href="http://lgaoxiao.com" target="_blank">99re国产精品</a>| <a href="http://988tz.com" target="_blank">亚洲性人人天天夜夜摸</a>| <a href="http://xingzhiyin85.com" target="_blank">欧美日韩国产成人</a>| <a href="http://lutube666.com" target="_blank">亚洲精品视频免费观看</a>| <a href="http://7171152.com" target="_blank">亚洲精品一区久久久久久</a>| <a href="http://ndr666.com" target="_blank">麻豆freexxxx性91精品</a>| <a href="http://yeyesaoqi.com" target="_blank">欧美不卡视频一区发布</a>| <a href="http://sz-jyqj.com" target="_blank">在线日本成人</a>| <a href="http://tianxiantxtv.com" target="_blank">男女精品视频</a>| <a href="http://www1126v.com" target="_blank">亚洲国产欧美一区二区三区久久 </a>| <a href="http://5555547.com" target="_blank">亚洲免费影视第一页</a>| <a href="http://www311pi.com" target="_blank">欧美日韩极品在线观看一区</a>| <a href="http://irongxun.com" target="_blank">亚洲美女尤物影院</a>| <a href="http://sifeksa.com" target="_blank">亚洲香蕉伊综合在人在线视看</a>| <a href="http://xw4433.com" target="_blank">欧美日韩一区在线</a>| <a href="http://287975.com" target="_blank">亚洲香蕉网站</a>| <a href="http://yp889.com" target="_blank">久久深夜福利免费观看</a>| <a href="http://www49853b.com" target="_blank">激情综合久久</a>| <a href="http://909059c.com" target="_blank">欧美国产一区二区</a>| <a href="http://carboarm.com" target="_blank">一本色道久久综合精品竹菊 </a>| <a href="http://mmmm43.com" target="_blank">裸体女人亚洲精品一区</a>| <a href="http://zyjzz.com" target="_blank">亚洲国产日韩欧美在线99</a>| <a href="http://92xx00.com" target="_blank">欧美成人午夜</a>| <a href="http://wwwmm131.com" target="_blank">一区二区三区国产精品</a>| <a href="http://yc0989.com" target="_blank">韩国三级在线一区</a>| <a href="http://dkmcjc.com" target="_blank">乱码第一页成人</a>| <a href="http://wwwlywbb.com" target="_blank">亚洲精品在线视频</a>| <a href="http://lgcpvip888.com" target="_blank">性欧美8khd高清极品</a>| <a href="http://jm1688e.com" target="_blank">国产一区二区三区黄视频</a>| <a href="http://www-67499.com" target="_blank">久久久久91</a>| <a href="http://cfqcgw.com" target="_blank">日韩视频免费在线</a>| <a href="http://yashikeji.com" target="_blank">久久爱另类一区二区小说</a>| <a href="http://k82net.com" target="_blank">久久精品欧洲</a>| <a href="http://59199m.com" target="_blank">91久久嫩草影院一区二区</a>| <a href="http://2938476.com" target="_blank">欧美日韩一区二区三区在线看</a>| <a href="http://082235.com" target="_blank">亚洲免费影院</a>| <a href="http://h7yy.com" target="_blank">欧美黄色网络</a>| <a href="http://cdcpt.com" target="_blank">欧美一区精品</a>| <a href="http://21bridal.com" target="_blank">亚洲欧洲在线一区</a>| <a href="http://www-34909.com" target="_blank">国产精品少妇自拍</a>| <a href="http://xiaokd666.com" target="_blank">久久精品卡一</a>| <a href="http://www672hh.com" target="_blank">一本一本久久a久久精品牛牛影视</a>| <a href="http://cdcpt.com" target="_blank">久久国产精品一区二区</a>| <a href="http://233116.com" target="_blank">亚洲激情网站</a>| <a href="http://69ru.com" target="_blank">国产午夜精品久久久久久久</a>| <a href="http://www524141.com" target="_blank">老色鬼精品视频在线观看播放</a>| <a href="http://k8m9.com" target="_blank">夜夜爽av福利精品导航</a>| <a href="http://9952222.com" target="_blank">久久亚洲综合色</a>| <a href="http://9882355.com" target="_blank">亚洲欧美国产毛片在线</a>| <a href="http://royaljinma.com" target="_blank">一区二区三区在线看</a>| <a href="http://zzztt04.com" target="_blank">欧美午夜电影完整版</a>| <a href="http://saobitv.com" target="_blank">久久久久中文</a>| <a href="http://bx989.com" target="_blank">性做久久久久久免费观看欧美</a>| <a href="http://yyypdq.com" target="_blank">亚洲国产精品久久久久婷婷884</a>| <a href="http://oudaole.com" target="_blank">午夜免费在线观看精品视频</a>| <a href="http://shyihegu.com" target="_blank">亚洲欧洲在线视频</a>| <a href="http://223533.com" target="_blank">狠狠色丁香久久婷婷综合丁香 </a>| <a href="http://sihu1515hh.com" target="_blank">麻豆精品一区二区av白丝在线</a>| <a href="http://555hhu.com" target="_blank">在线视频日韩精品</a>| <a href="http://sxhrdyb.com" target="_blank">亚洲国产精品久久久久婷婷老年 </a>| <a href="http://86311ib.com" target="_blank">亚洲美女视频网</a>| <a href="http://taoseav8.com" target="_blank">欧美 日韩 国产一区二区在线视频 </a>| <a href="http://679776.com" target="_blank">麻豆精品视频在线观看视频</a>| <a href="http://395493.com" target="_blank">亚洲欧美日韩精品</a>| <a href="http://87ssyy.com" target="_blank">一区二区三区久久</a>| <a href="http://wwwnnnn.com" target="_blank">亚洲第一精品在线</a>| <a href="http://wwwlywbb.com" target="_blank">国产综合香蕉五月婷在线</a>| <a href="http://392294.com" target="_blank">欧美性开放视频</a>| <a href="http://wo6wo.com" target="_blank">欧美三区在线视频</a>| <a href="http://woniuminsu.com" target="_blank">欧美精品色综合</a>| <a href="http://www-69669.com" target="_blank">欧美xxxx在线观看</a>| <a href="http://javdb04.com" target="_blank">免费成人黄色av</a>| <a href="http://china391.com" target="_blank">久久久久久久精</a>| <a href="http://5566kan.com" target="_blank">欧美中文字幕在线</a>| <a href="http://345fz.com " target="_blank">欧美一级二区</a>| <a href="http://111491.com" target="_blank">西瓜成人精品人成网站</a>| <a href="http://tcgo903.com" target="_blank">亚洲一区二区高清视频</a>| <a href="http://05511253.com" target="_blank">99re6热只有精品免费观看</a>| <a href="http://338pv.com" target="_blank">亚洲国产精品一区二区www</a>| <a href="http://xuanxuan88.com" target="_blank">免费成人黄色片</a>| <a href="http://fyfsds.com" target="_blank">欧美成人精品一区二区三区</a>| <a href="http://51duanxinmao.com" target="_blank">久久久人成影片一区二区三区</a>| <a href="http://jkllkg.com" target="_blank">欧美一区二区</a>| <a href="http://yahuake.com" target="_blank">久久成人精品无人区</a>| <a href="http://cnxwlm.com" target="_blank">久久99伊人</a>| <a href="http://373gg.com" target="_blank">久久视频在线视频</a>| <a href="http://868482.com" target="_blank">久久综合久久综合九色</a>| <a href="http://dadepaimai.com" target="_blank">久久综合色一综合色88</a>| <a href="http://226600b.com" target="_blank">狼狼综合久久久久综合网</a>| <a href="http://3bmmxyz.com" target="_blank">久色成人在线</a>| <a href="http://4006616309.com" target="_blank">亚洲精品一区二区网址</a>| <a href="http://448968.com" target="_blank">最新亚洲电影</a>| <a href="http://077229.com" target="_blank">一本色道久久综合亚洲91</a>| <a href="http://7770790.com" target="_blank">99精品欧美一区二区三区</a>| <a href="http://www-893333.com" target="_blank">一本色道久久精品</a>| <a href="http://227c7.com" target="_blank">一区二区激情</a>| <a href="http://961318.com" target="_blank">亚洲欧美日韩国产一区二区三区</a>| <a href="http://160160160.com" target="_blank">亚洲欧美激情一区</a>| <a href="http://www-733999.com" target="_blank">久久精品国产免费</a>| <a href="http://649929.com" target="_blank">女生裸体视频一区二区三区</a>| <a href="http://488089.com" target="_blank">亚洲第一福利在线观看</a>| <a href="http://1332233.com" target="_blank">欧美日韩在线一区二区三区</a>| <a href="http://avicpharm.com" target="_blank">欧美日韩亚洲高清</a>| <a href="http://xsjgxx.com" target="_blank">国产情人综合久久777777</a>| <a href="http://xajtyd.com" target="_blank">国产综合一区二区</a>| <a href="http://yy6024.com" target="_blank">亚洲人精品午夜</a>| <a href="http://492541.com" target="_blank">亚洲欧美电影院</a>| <a href="http://caoliu20.com" target="_blank">久久一日本道色综合久久</a>| <a href="http://www-4157.com" target="_blank">亚洲高清免费</a>| <a href="http://86311ib.com" target="_blank">亚洲午夜精品久久久久久app</a>| <a href="http://www218999.com" target="_blank">亚洲欧美日韩国产中文</a>| <a href="http://teqmeta.com" target="_blank">久久亚洲国产精品一区二区 </a>| <a href="http://iamsleekcn.com" target="_blank">欧美激情一区二区三区蜜桃视频 </a>| <a href="http://799858.com" target="_blank">免费观看成人www动漫视频</a>| <a href="http://www-tk3333.com" target="_blank">欧美h视频在线</a>| <a href="http://tom3958.com" target="_blank">国产精品久久夜</a>| <a href="http://4449992.com" target="_blank">亚洲大片免费看</a>| <a href="http://566805.com" target="_blank">亚洲尤物在线</a>| <a href="http://335848.com" target="_blank">欧美大片一区</a>| <a href="http://hsxinbao.com" target="_blank">亚洲自拍偷拍色片视频</a>| <a href="http://498626.com" target="_blank">久久中文在线</a>| <a href="http://sxxawef.com" target="_blank">国产精品乱码一区二区三区</a>| <a href="http://qqszdq.com" target="_blank">曰本成人黄色</a>| <a href="http://yqr55.com" target="_blank">亚洲欧美日韩国产精品</a>| <a href="http://xiaofan123.com" target="_blank">欧美成人精品一区二区</a>| <a href="http://17ang.com" target="_blank">亚洲影音一区</a>| <a href="http://bby99.com" target="_blank">欧美—级在线免费片</a>| <a href="http://sdluliang.com" target="_blank">国产伦精品一区二区三区高清版 </a>| <a href="http://cctbdy.com" target="_blank">亚洲高清一区二区三区</a>| <a href="http://ff9222.com" target="_blank">亚洲欧美在线x视频</a>| <a href="http://www497171a.com" target="_blank">另类人畜视频在线</a>| <a href="http://5566kan.com" target="_blank">亚洲一区二区网站</a>| <a href="http://4915w.com" target="_blank">欧美日韩成人综合在线一区二区 </a>| <a href="http://8842aa.com" target="_blank">欧美精品在线免费播放</a>| <a href="http://xilxx.com" target="_blank">国产一区99</a>| <a href="http://cpddddcc.com" target="_blank">亚洲永久字幕</a>| <a href="http://6567ya.com" target="_blank">亚洲精品乱码久久久久久</a>| <a href="http://my7877.com" target="_blank">久久九九99视频</a>| <a href="http://54zcr.com" target="_blank">国产精品有限公司</a>| <a href="http://oudaole.com" target="_blank">99精品视频免费</a>| <a href="http://497n.com" target="_blank">欧美国产视频在线</a>| <a href="http://www-216678.com" target="_blank">久久国内精品视频</a>| <a href="http://3b6f.com" target="_blank">国产精品一区二区久久</a>| <a href="http://337795.com" target="_blank">一区二区三区久久久</a>| <a href="http://988tz.com" target="_blank">亚洲夫妻自拍</a>| <a href="http://o74sokyoss.com" target="_blank">久久综合久久综合久久</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>