锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品国产96久久久香蕉,一区二区久久,女人色偷偷aa久久天堂http://m.shnenglu.com/vczh/zh-cnSat, 15 Nov 2025 21:16:49 GMTSat, 15 Nov 2025 21:16:49 GMT602014騫寸粓鎬葷粨http://m.shnenglu.com/vczh/archive/2015/01/09/209442.html闄堟鐎?vczh)闄堟鐎?vczh)Thu, 08 Jan 2015 22:58:00 GMThttp://m.shnenglu.com/vczh/archive/2015/01/09/209442.htmlhttp://m.shnenglu.com/vczh/comments/209442.htmlhttp://m.shnenglu.com/vczh/archive/2015/01/09/209442.html#Feedback14http://m.shnenglu.com/vczh/comments/commentRss/209442.htmlhttp://m.shnenglu.com/vczh/services/trackbacks/209442.html

]]>
闈犺氨鐨勪唬鐮佸拰DRYhttp://m.shnenglu.com/vczh/archive/2014/07/15/207658.html闄堟鐎?vczh)闄堟鐎?vczh)Tue, 15 Jul 2014 14:44:00 GMThttp://m.shnenglu.com/vczh/archive/2014/07/15/207658.htmlhttp://m.shnenglu.com/vczh/comments/207658.htmlhttp://m.shnenglu.com/vczh/archive/2014/07/15/207658.html#Feedback9http://m.shnenglu.com/vczh/comments/commentRss/207658.htmlhttp://m.shnenglu.com/vczh/services/trackbacks/207658.html

涓婃鏈変漢鏉ヨ姹傛垜鍐欎竴綃囨枃绔犺皥璋堜粈涔堜唬鐮佹墠鏄ソ浠g爜錛屾槸璋佹垜宸茬粡蹇樿浜嗭紝濂藉儚鏄疉utoHotkey榪樻槸鍟ョ殑涓撴爮鐨勪綔鑰呫傛拠寮閭d簺濂囨殑鏉℃涓嶈皥錛岄潬璋辯殑 浠g爜鏈変竴涓叡鍚岀殑鐗圭偣錛屽氨鏄疍RY銆侱RY灝辨槸Don't Repeat Yourself錛屽叾瀹炲凡緇忚浜鴻皥浜嗗ソ澶氬勾浜嗭紝浣嗘槸鍑犱箮鎵鏈変漢閮戒細蹇樿銆?/p>

浠涔堟槸DRY錛圖on't Repeat Yourself錛?

DRY 騫朵笉鏄寚浣犱笉鑳藉鍒朵唬鐮佽繖涔堢畝鍗曠殑銆備笉鑳絩epeat鐨勫叾瀹炴槸淇℃伅錛屼笉鏄唬鐮併傝鍒嗘瀽涓孌典唬鐮侀噷闈㈢殑浠涔堜笢瑗挎椂淇℃伅錛屽氨璺熺粰鐗╃悊棰樺仛鍙楀姏鍒嗘瀽涓鏍鳳紝鎯蟲瘡嬈?閮藉仛瀵瑰叾瀹炰笉澶鏄撱備絾鏄竴浠戒唬鐮佹繪槸瑕佷笉鏂殑淇ˉ鐨勶紝鎵浠ュ湪榪欎箣鍓嶅ぇ瀹惰鍏堝仛濂絋DD錛屼篃灝辨槸Test Driven Development銆傝繖閲屾垜瀵硅嚜宸辯殑瑕佹眰鏄鐩栫巼瑕侀珮杈?5%錛屼笉綆$敤浠涔堟墜孌碉紝鎬諱箣95%鐨勪唬鐮佺殑杈撳嚭閮借鍙楀埌媯楠屻傚綋鏈変簡瓚沖澶氱殑嫻嬭瘯鍋氬悗鐩劇殑鏃?鍊欙紝涓嶇浣犱互鍚庡彂鐢熶簡浠涔堬紝璀璇翠綘鍙戠幇浣燫epeat浜嗕粈涔堜笢瑗胯鏀癸紝浣犳墠鑳芥斁蹇冨ぇ鑳嗙殑鍘繪敼銆傝屼笖浠庨暱榪滅殑瑙掑害鏉ョ湅錛屽仛濂絋DD鍙互灝嗗紑鍙戝嚭鐩稿悓璐ㄩ噺鐨勪唬鐮佺殑鏃墮棿緙╃煭鍒?0%宸﹀彸錛堣繖鏄垜鑷繁鐨勭粡楠屽鹼級 銆?/p>

浠涔堟槸淇℃伅

淇℃伅榪欎釜璇嶄笉澶ソ鐢ㄨ璦涓嬪畾涔夛紝涓嶈繃鎴戝彲浠ヤ婦涓緥瀛愩傝濡傝浣犺鎶婁竴涓厤緗枃浠墮噷闈㈢殑瀛楃涓叉寜鐓у垎闅旂鍒嗚В鎴愬嚑涓瓧絎︿覆錛屼綘澶ф灝變細鍐欏嚭榪欐牱鐨勪唬鐮侊細

// name;parent;description
void ReadConfig(const wchar_t* config)
{
    auto p 
= wcschr(config, L';');                            // 1
    if(!p) throw ArgumentException(L"Illegal config string"); // 2
    DoName(wstring(config, p));                               // 3
    auto q = wcschr(p + 1, L';');                             // 4
    if(!q) throw ArgumentException(L"Illegal config string"); // 5
    DoParent(wstring(p + 1, q);                               // 6
    auto r = wcschr(q + 1, L';');                             // 7
    if(r) throw ArgumentException(L"Illegal config string");  // 8
    DoDescription(q + 1);                                     // 9
}

榪欐鐭煭鐨勪唬鐮侀噸澶嶄簡澶氬皯淇℃伅錛?/p>

  • 鍒嗛殧絎︾敤鐨勬槸鍒嗗彿錛?銆?銆?錛?/li>
  • 絎簩/涓変釜鐗囨鐨勭涓涓瓧絎︿綅浜庣涓/浜屼釜鍒嗗彿鐨勫悗闈紙4銆?銆?銆?錛?/li>
  • 鏍煎紡媯鏌ワ紙2銆?銆?錛?
  • 寮傚父鍐呭錛?銆?銆?錛?br />

闄や簡DRY浠ュ榪樻湁涓涓棶棰橈紝灝辨槸澶勭悊description鐨勬柟娉曡窡name鍜宲arent涓嶄竴鏍鳳紝鍥犱負浠栧悗闈㈠啀涔熸病鏈夊垎鍙蜂簡銆?/p>

閭h繖孌典唬鐮佽鎬庝箞鏀瑰憿錛熸湁浜涗漢鍙兘浼氭兂鍒幫紝閭f妸閲嶅鐨勪唬鐮佹娊鍙栧嚭涓涓嚱鏁板氨濂戒簡錛?/p>

wstring Parse(const wchar_t& config, bool end)
{
    auto next 
= wcschr(config, L';');
    ArgumentException up(L
"Illegal config string");
    
if (next)
    {
        
if (end) throw up;
        wstring result(config, next);
        config 
= next + 1;
        
return result;
    }
    
else
    {
        
if (!end) throw up;
        wstring result(config);
        config 
+= result.size();
        
return result;
    }
}

// name;parent;description
void ReadConfig(const wchar_t* config)
{
    DoName(Parse(config, 
false));
    DoParent(Parse(config, 
false));
    DoDescription(Parse(config, 
true));
}

鏄笉鏄湅璧鋒潵榪樺緢鍒壄錛屽ソ鍍忔妸浠g爜淇敼浜嗕箣鍚庡彧鎶婁簨鎯呮悶寰楁洿涔變簡錛岃屼笖灝辯畻config瀵逛簡鎴戜滑涔熶細鍒涘緩閭d釜up鍙橀噺錛屽氨浠呬粎鏄負浜嗕笉 閲嶅浠g爜銆傝屼笖榪欎喚浠g爜榪樻暎鍙戝嚭浜嗕竴浜涗笉濂界殑鍛抽亾錛屽洜涓哄浜嶯ame銆丳arent鍜孌escription鐨勫鐞嗘柟娉曡繕鏄笉鑳界粺涓錛孭arse閲岄潰閽堝 end鍙橀噺鐨勫鐞嗙湅璧鋒潵涔熸槸寰堥噸澶嶏紝浣嗗疄闄呬笂榪欐槸鏃犳硶鍦ㄨ繖鏍瘋璁$殑鍓嶆彁涓嬫秷闄ょ殑銆傛墍浠ヨ繖涓唬鐮佷篃鏄笉濂界殑錛屽厖鍏墮噺鍙槸姣旂涓浠戒唬鐮佸己涓鐐圭偣銆?br />

瀹?闄呬笂錛屼唬鐮佷箣鎵浠ヨ鍐欑殑濂斤紝涔嬫墍浠ヤ笉鑳絩epeat涓滆タ錛屾槸鍥犱負浜у搧鐙楁繪槸瑕佹敼闇姹傦紝涓嶆敼浠g爜浣犲氨瑕佹錛屾敼浠g爜浣犲氨瑕佸姞鐝紝鎵浠ヤ負浜嗗噺灝戜慨鏀逛唬鐮佺殑鐥涜嫤錛?鎴戜滑涓嶈兘repeat浠諱綍淇℃伅銆備婦涓緥瀛愶紝鏈変竴澶╀駭鍝佺嫍璇達紝瑕佹妸鍒嗛殧絎︿粠鍒嗗彿鏀規垚絀烘牸錛佷竴涓嬪瓙灝辮鏀逛袱涓湴鏂逛簡銆俤escription鍚庨潰瑕佸姞tag錛?榪欐牱浣犲鐞哾escription鐨勬柟娉曞張瑕佹敼浜嗗洜涓轟粬鏄互絀烘牸緇撳熬涓嶆槸0緇撳熬銆?/p>

鍥犳閽堝榪欎釜鐗囨錛屾垜浠渶瑕佹妸瀹冩敼鎴愯繖鏍鳳細

vector<wstring> SplitString(const wchar_t* config, wchar_t delimiter)
{
    vector
<wstring> fragments;
    
while(auto next = wcschr(config, delimiter))
    {
        fragments.push_back(wstring(config, next));
        config 
= next + 1;
    }
    fragments.push_back(wstring(config));
    
return fragments; // C++11灝辨槸濂斤紒
}

void ReadConfig(const wchar_t* config)
{
    auto fragments 
= SplitString(config, L';');
    
if(fragments.size() != 3)
    {
        
throw ArgumentException(L"Illegal config string");
    }
    DoName(fragments[
0]);
    DoParent(fragments[
1]);
    DoDescription(fragments[
2]);
}

鎴戜滑鍙互鍙戠幇錛屽垎鍙鳳紙L';'錛夊湪榪欓噷鍙嚭鐜頒簡涓嬈★紝寮傚父鍐呭涔熷彧鍑虹幇浜嗕竴嬈★紝鑰屼笖澶勭悊name銆乸arent鍜?description鐨勪唬鐮佷篃娌℃湁浠涔堝尯鍒簡錛屾鏌ラ敊璇篃鏇寸畝鍗曚簡銆備綘鍦ㄨ繖閲岃繕緇欎綘鐨凩ibrary澧炲姞浜嗕竴涓猄plitString鍑芥暟錛岃涓嶅畾鍦ㄤ互 鍚庝粈涔堝湴鏂瑰氨鐢ㄤ笂浜嗭紝姣擯arse榪欑涓撻棬鐨勫嚱鏁拌寮哄緢澶氬嶃?br />

澶у鍙互鍙戠幇錛屽湪榪欓噷閲嶅鐨勪笢瑗垮茍涓嶄粎浠呮槸澶嶅埗浜嗕唬鐮侊紝鑰屾槸鐢變簬浣犳妸 鍚屼竴涓俊鎭暎鎾湪浜嗕唬鐮佺殑鍚勪釜閮ㄥ垎瀵艱嚧浜嗘湁寰堝鐩歌繎鐨勪唬鐮佷篃鏁f挱鍦ㄥ悇涓湴鏂癸紝鑰屼笖榪樹笉鏄偅涔堝ソ閫氳繃鎶芥垚鍑芥暟鐨勬柟娉曟潵瑙e喅銆傚洜涓哄湪榪欑鎯呭喌涓嬶紝灝辯畻浣犳妸閲嶅 鐨勪唬鐮佹娊鎴愪簡Parse鍑芥暟錛屼綘鎶婂嚱鏁拌皟鐢ㄤ簡鍑犳瀹為檯涓婁篃絳変簬閲嶅浜嗕俊鎭傚洜姝ゆ紜殑鏂規硶灝辨槸鎶婂仛浜嬫儏鐨勬柟娉曞彉涓涓嬶紝鍐欐垚SplitString銆傝繖涓?SplitString鍑芥暟騫朵笉鏄氳繃鎶婇噸澶嶇殑浠g爜綆鍗曠殑鎶藉彇鎴愬嚱鏁拌屽仛鍑烘潵鐨勩?u>鍘繪帀閲嶅鐨勪俊鎭細璁╀綘鐨勪唬鐮佺殑緇撴瀯鍙戠敓鏈川鐨勫彉鍖?/strong>銆?/p>

榪欎釜闂鍏跺疄涔熸湁寰堝鍙樹綋錛?/p>

  • 涓嶈兘鏈塎agic Number銆侺';'鍑虹幇浜嗗緢澶氶亶錛屽叾瀹炲氨鏄釜Magic Number銆傛墍浠ユ垜浠緇欎粬涓悕瀛楋紝璀璇磀elimiter銆?/li>
  • 涓嶈澶嶅埗浠g爜銆傝繖涓簲璇ヤ笉鐢ㄦ垜璁蹭簡銆?
  • 瑙h﹁鍋氭垚姝d氦鐨勩係plitString铏界劧涓嶆槸鐩存帴鍐茬潃璇籧onfig鏉ュ啓鐨勶紝浣嗘槸瀹冨弽鏄犱簡涓涓湪鍏跺畠鍦版柟涔熶細閬囧埌鐨勫父瑙佺殑闂銆傚鏋滅敤Parse鐨勯偅涓増鏈紝鏄劇劧鍙槸鐪嬭搗鏉ヨВ鍐充簡闂鑰屽凡錛屽茍娌℃湁緇欎綘甯︽潵浠諱綍棰濆鐨勬晥鐩娿?/li>

淇℃伅涓鏃﹁浣爎epeat浜嗭紝浣犵殑浠g爜灝變細涓嶅悓紼嬪害鐨勫嚭鐜板悇縐嶈厫鐑傛垨鑰呯牬紿楋紝涓婇潰閭d笁鏉″叾瀹炲彧鏄垜鑳芥兂鍒扮殑姣旇緝甯歌鐨勮〃鐜板艦寮忋傝繖浠朵簨鎯呬篃鍛婅瘔鎴戜滑錛屽綋楂樻墜鍛婅瘔浣犱粈涔堜粈涔堜笉鑳藉仛鐨勬椂鍊欙紝寰楁兂涓鎯寵儗鍚庣殑鍘熷洜錛屼笉鐒惰窡灝佸緩榪蜂俊鏈変粈涔堝尯鍒?/p>

]]>
瑕佸杞︽殏鍋滄洿鏂板嚑涓槦鏈?http://m.shnenglu.com/vczh/archive/2014/04/30/206776.html闄堟鐎?vczh)闄堟鐎?vczh)Wed, 30 Apr 2014 07:33:00 GMThttp://m.shnenglu.com/vczh/archive/2014/04/30/206776.htmlhttp://m.shnenglu.com/vczh/comments/206776.htmlhttp://m.shnenglu.com/vczh/archive/2014/04/30/206776.html#Feedback5http://m.shnenglu.com/vczh/comments/commentRss/206776.htmlhttp://m.shnenglu.com/vczh/services/trackbacks/206776.html

]]>
璺焩czh鐪嬪疄渚嬪緙栬瘧鍘熺悊鈥斺斾笁錛歍inymoe涓庢棤姝т箟璇硶鍒嗘瀽http://m.shnenglu.com/vczh/archive/2014/03/23/206298.html闄堟鐎?vczh)闄堟鐎?vczh)Sun, 23 Mar 2014 08:51:00 GMThttp://m.shnenglu.com/vczh/archive/2014/03/23/206298.htmlhttp://m.shnenglu.com/vczh/comments/206298.htmlhttp://m.shnenglu.com/vczh/archive/2014/03/23/206298.html#Feedback2http://m.shnenglu.com/vczh/comments/commentRss/206298.htmlhttp://m.shnenglu.com/vczh/services/trackbacks/206298.html鏂囩珷涓紩鐢ㄧ殑浠g爜鍧囨潵鑷?a >https://github.com/vczh/tinymoe銆?

鐪嬩簡鍓嶉潰鐨勪笁綃囨枃绔狅紝澶у搴旇鍩烘湰瀵筎inymoe鐨勪唬鐮佹湁涓涓垵姝ョ殑鎰熻浜嗐傚湪姝g‘鍒嗘瀽"print sum from 1 to 100"涔嬪墠錛屾垜浠鍏堝緱鍒嗘瀽"phrase sum from (lower bound) to (upper bound)"榪欐牱鐨勫0鏄庛俆inymoe鐨勫嚱鏁板0鏄庡張寰堝鍏充簬block鍜宻entence鐨勯厤緗紝涓嶈繃榪欓噷騫朵笉鎵撶畻灝嗘墍鏈夌粏鑺傦紝鎴戜細灝嗛噸鐐規斁鍦ㄥ浣曞啓涓涓拡瀵規棤姝т箟璇硶鐨勯掑綊涓嬮檷璇硶鍒嗘瀽鍣ㄤ笂銆傛墍浠ユ垜浠繖閲屼笉浼氭秹鍙妔entence鍜宐lock鐨勪粈涔坈ategory鍜宑ps鐨勯厤緗?

铏界劧"print sum from 1 to 100"鏃犳硶鐢ㄦ棤姝т箟鐨勮娉曞垎鏋愮殑鏂規硶鍋氬嚭鏉ワ紝浣嗘槸鎴戜滑鍙互鍊熺敤瀵?phrase sum from (lower bound) to (upper bound)"鐨勮娉曞垎鏋愮殑緇撴灉錛屽姩鎬佹瀯閫犺兘澶熷垎鏋?print sum from 1 to 100"鐨勮娉曞垎鏋愬櫒銆傝繖縐嶈娉曠湅璧鋒潵濂藉儚寰堥珮澶т笂錛屼絾鏄叾瀹炲茍娌℃湁浠涔堢壒鍒毦鐨勬妧宸с傚叧浜?鏋勯?鐨勯棶棰樻垜灝嗗湪涓嬩竴綃囨枃绔犮婅窡vczh鐪嬪疄渚嬪緙栬瘧鍘熺悊鈥斺斾笁錛歍inymoe涓庢湁姝т箟璇硶鍒嗘瀽銆嬭緇嗕粙緇嶃?

鍦ㄦ垜涔嬪墠鐨勫崥瀹㈤噷鎴戞浘緇忓啓榪囥?a href="http://m.shnenglu.com/vczh/archive/2008/06/15/53373.html">濡備綍鎵嬪啓璇硶鍒嗘瀽鍣?/a>銆嬶紝榪欑瘒鏂囩珷璁蹭簡涓浜涚畝鍗曠殑鍐欓掑綊涓嬮檷璇硶鍒嗘瀽鍣ㄧ殑瑙勫垯錛屽敖綆″緢澶氫漢鏉ヤ俊璇磋繖綃囨枃绔犲府浠栦滑瑙e喅浜嗗緢澶氶棶棰橈紝浣嗗疄闄呬笂緇嗚妭榪樹笉澶熶赴瀵岋紝鐢ㄦ潵瀵圭紪紼嬭璦鍋氳娉曞垎鏋愮殑璇濓紝榪樻槸浼氳寰楀鏉傛уお楂樸傝繖綃囨枃绔犱篃鍚屾椂浣滀負銆?a href="http://m.shnenglu.com/vczh/archive/2008/06/15/53373.html">濡備綍鎵嬪啓璇硶鍒嗘瀽鍣?/a>銆嬬殑琛ュ厖銆傚ソ浜嗭紝鎴戜滑寮濮嬭繘鍏ユ棤姝т箟璇硶鍒嗘瀽鐨勪富棰樺惂銆?

鎴戜滑闇瑕佺殑絎竴涓嚱鏁版槸鐢ㄦ潵璇籺oken騫跺垽鏂叾鍐呭鏄笉鏄垜浠笇鏈涚湅鍒扮殑涓滆タ銆傝繖涓嚱鏁版瘮杈冪壒鍒紝鎵浠ュ崟鐙嬁鍑烘潵璁層傚湪璇嶆硶鍒嗘瀽閲岄潰鎴戜滑宸茬粡鎶婃枃浠跺垎琛岋紝姣忎竴琛屼竴涓狢odeToken鐨勫垪琛ㄣ備絾鏄敱浜庝竴涓嚱鏁板0鏄庣嫭鍗犱竴琛岋紝鍥犳鍦ㄨ繖閲屾垜浠彧闇瑕佸姣忎竴琛岃繘琛屽垎鏋愩傛垜浠垽鏂繖涓琛屾槸鍚︿互cps銆乧ategory銆乻ymbol銆乼ype銆乸hrase銆乻entence鎴朾lock寮澶達紝濡傛灉鏄偅Tinymoe灝辮涓鴻繖涓瀹氭槸涓涓0鏄庯紝鍚﹀垯灝辨槸鏅氱殑浠g爜銆傛墍浠ヨ繖閲屽亣璁炬垜浠壘鍒頒簡涓琛屼唬鐮佷互涓婇潰鐨勮繖浜泃oken浣滀負寮澶達紝浜庢槸鎴戜滑灝辮榪涘叆璇硶鍒嗘瀽鐨勭幆鑺傘備綔涓烘暣涓垎鏋愬櫒鐨勫熀紜錛屾垜浠渶瑕佷竴涓狢onsumeToken鐨勫嚱鏁幫細

浣滀負涓涓函綺圭殑C++11鐨勯」鐩紝鎴戜滑搴旇浣跨敤STL鐨勮凱浠e櫒銆傚叾瀹炲湪鍐欒娉曞垎鏋愬櫒鐨勬椂鍊欙紝鍩轟簬榪唬鍣ㄧ殑浠g爜涔熸瘮鍩轟簬"token鍦ㄦ暟緇勯噷鐨勪笅琛?鐨勪唬鐮佽綆鍗曞緱澶氥傝繖涓嚱鏁版墍鍋氱殑鍐呭鏄繖鏍風殑錛屽畠鏌ョ湅it鎸囧悜鐨勯偅涓猼oken錛屽鏋渢oken鐨勭被鍨嬭窡tokenType鎻忚堪鐨勪竴鏍鳳紝浠栧氨it++鐒跺悗榪斿洖true錛涘惁鍒欏氨鏄敤content鍜宱wnerToken鏉ヤ駭鐢熶竴涓敊璇俊鎭姞鍏rrors鍒楄〃閲岋紝鐒跺悗榪斿洖false銆傚綋鐒訛紝濡傛灉浼犺繘鍘葷殑鍙傛暟it鏈韓灝辯瓑浜巈nd錛岄偅鑷劧瑕佷駭鐢熶竴涓敊璇傝嚜鐒訛紝鍑芥暟浣撲篃鍗佸垎綆鍗曪細

閭e浜庢爣璇嗙鍜屾暟瀛楁庝箞鍔炲憿錛熸槑鐪間漢鑲畾涓鐪煎氨鐪嬪嚭鏉ワ紝榪欐槸緇欐鏌ョ鍙風敤鐨勶紝璀宸︽嫭鍙楓佸彸鎷彿銆佸啋鍙峰拰鍏抽敭瀛楃瓑銆傚湪澹版槑閲岄潰鎴戜滑鏄笉闇瑕佸お澶嶆潅鐨勪笢瑗跨殑錛屽洜姝ゆ垜浠繕闇瑕佷袱澶栦竴涓嚱鏁版潵杈撳叆鏍囪瘑絎︺俆inymoe浜嬪疄涓婃湁涓や釜閽堝鏍囪瘑絎︾殑璇硶鍒嗘瀽鍑芥暟錛岀涓涓槸璇誨叆鏍囪瘑絎︼紝絎簩涓笉浠呰璇誨叆鏍囪瘑絎﹁繕瑕佸垽鏂槸鍚﹀埌浜嗚鏈惁鍒欐姤閿欙細

鍦ㄨ繖閲屾垜闇瑕佸己璋冧竴涓噸鐐癸紝鍦ㄥ啓璇硶鍒嗘瀽鍣ㄧ殑鏃跺欙紝鍑芥暟鐨勫悇寮忎竴瀹氳鏁撮綈鍒掍竴銆俆inymoe鐨勮娉曞垎鏋愬嚱鏁版湁涓や釜鏍煎紡錛屽垎鍒槸閽堝parse涓琛岀殑涓涓儴鍒嗭紝鍜宲arse涓涓枃浠剁殑涓浜涜鐨勩侾arseToEnd鍜孭arseToFarest灝卞睘浜巔arse涓琛岀殑涓涓儴鍒嗙殑鍑芥暟銆傝繖縐嶅嚱鏁扮殑鏍煎紡濡備笅錛?

  1. 榪斿洖鍊間竴瀹氭槸璇硶鏍戠殑涓涓妭鐐廣傚湪榪欓噷鎴戜滑浠hare_ptr<SymbolName>浣滀負鏍囪瘑絎︾殑鑺傜偣銆備竴涓爣璇嗙鍙互鍚湁澶氫釜鏍囪瘑絎oken錛岃濡傝the Chinese people銆乼he real Tinymoe programmer浠涔堢殑銆傚洜姝ゆ垜浠彲浠ョ畝鍗曞湴鎺ㄦ祴SymbolName閲岄潰鏈変竴涓獀ector<CodeToken>銆傝繖涓畾涔夊彲浠ュ湪TinymoeLexicalAnalyzer.h鐨勬渶鍚庝竴閮ㄥ垎鎵懼埌銆?
  2. 鍓嶄袱涓弬鏁板垎鍒槸iterator&鍜屾寚鍚戞湯灝劇殑iterator銆傛湯灝鵑氬父鎸?浠庤繖閲屽紑濮嬫垜浠笉甯屾湜榪欎釜parser鍑芥暟鏉ヨ"錛屽綋鐒惰繖閫氬父灝辨剰鍛崇潃琛屾湯銆傛垜浠妸"鏈熬"榪欎釜姒傚康鎶藉彇鍑烘潵錛屽湪鏌愪簺鎯呭喌涓嬪彲浠ュ緱鍒版瀬澶х殑濂藉銆?
  3. 鏈鍚庝竴涓猼oken涓瀹氭槸vector<CodeError>&錛岀敤鏉ュ瓨鏀捐繃紼嬩腑閬囧埌鐨勯敊璇?

闄や簡鍑芥暟鏍煎紡浠ュ錛屾垜浠繕闇瑕佹墍鏈夌殑鍑芥暟閮介伒寰煇浜涘墠緗潯浠跺拰鍚庣疆鏉′歡銆傚湪璇硶鍒嗘瀽閲岋紝濡傛灉浣犺瘯鍥懼垎鏋愪竴涓粨鏋勪絾鏄笉騫稿嚭鐜頒簡閿欒錛岃繖涓椂鍊欙紝浣犳湁鍙兘鍙互榪斿洖涓涓娉曟爲鐨勮妭鐐癸紝浣犱篃鏈夊彲鑳戒粈涔堥兘榪斿洖涓嶄簡銆備簬鏄繖閲屽氨鏈変袱縐嶆儏鍐碉細

  1. 浣犲彲浠ヨ繑鍥烇紝閭e氨璇佹槑铏界劧杈撳叆鐨勪唬鐮佹湁閿欒錛屼絾鏄綘鎴愬姛鐨勮繘琛屼簡閿欒鎭㈠鈥斺斿疄闄呬笂灝辨槸璇達紝浣犺寰椾綘鑷繁鍙互鐚滄祴榪欎喚浠g爜鐨勪綔鑰呭疄闄呮槸瑕佽〃杈句粈涔堟剰鎬濃斺斾簬鏄綘瑕佺Щ鍔ㄧ涓涓猧terator錛岃浠栨寚鍚戜綘絎竴涓繕娌¤鍒扮殑token錛屼互渚垮悗緇殑璇硶鍒嗘瀽榪囩▼緇х畫榪涜涓嬪幓銆?
  2. 浣犱笉鑳借繑鍥烇紝閭e氨璇佹槑浣犳仮澶嶄笉浜嗭紝鍥犳絎竴涓猧terator涓嶈兘鍔ㄣ傚洜涓鴻繖涓嚱鏁版湁鍙兘鍙槸涓轟簡嫻嬭瘯涓涓嬪綋鍓嶇殑杈撳叆鏄惁婊¤凍涓涓粈涔堢粨鏋勩傛棦鐒朵粬涓嶆槸錛岃屼笖浣犳仮澶嶄笉鍑烘潵鈥斺斾篃灝辨槸浣犵寽嫻嬩綔鑰呮湰鏉ヤ篃涓嶆墦綆楀湪榪欓噷鍐欐煇涓粨鏋勨斺斿洜姝terator涓嶈兘鍔紝琛ㄧず浣犱粈涔堥兘娌℃湁璇匯?

褰撲綘鏍規嵁榪欐牱鐨勬牸寮忓啓浜嗗緢澶氳娉曞垎鏋愬嚱鏁頒箣鍚庯紝浣犱細鍙戠幇浣犲彲浠ュ緢瀹規槗鐢ㄧ畝鍗曠粨鏋勭殑璇硶鍒嗘瀽鍑芥暟錛屾嫾鍑戝嚭涓涓鏉傜殑璇硶鍒嗘瀽鍑芥暟銆備絾鏄敱浜嶵inymoe鐨勫0鏄庡茍娌℃湁涓涓紪紼嬭璦閭d箞澶嶆潅錛屾墍浠ヨ繖縐嶅祵濂楃粨鏋勫嚭鐜扮殑嬈℃暟騫朵笉澶氾紝浜庢槸鎴戜滑榪欓噷鍏堣煩榪囧叧浜庡祵濂楃殑璁ㄨ錛岀瓑鍒板悗闈㈠叿浣撳垎鏋?鍑芥暟鎸囬拡綾誨瀷鐨勫弬鏁?鐨勬椂鍊欒嚜鐒朵細娑夊強鍒般?

璇翠簡榪欎箞澶氾紝鎴戣寰椾篃搴旇涓奝arseToEnd鍜孭arseToFarest鐨勪唬鐮佷簡銆傞鍏堟槸ParseToEnd錛?

鎴戜滑寰堝揩灝卞彲浠ュ彂鐜幫紝鍏跺疄璇硶鍒嗘瀽鍣ㄩ噷闈㈢粷澶у鏁扮瘒騫呯殑浠g爜閮芥槸鍏充簬閿欒澶勭悊鐨勶紝鐪熸澶勭悊姝g‘浠g爜鐨勯儴鍒嗗叾瀹炲緢灝戙侾arseToEnd鍋氱殑浜嬫儏涓嶅錛屼粬灝辨槸浠巌t寮濮嬩竴鐩磋鍒癳nd鐨勪綅緗紝鎶婃墍鏈変笉鏄爣璇嗙鐨則oken閮芥墧鎺夛紝鐒跺悗鎶婃墍鏈夐亣鍒扮殑鏍囪瘑絎oken閮借繛璧鋒潵浣滀負涓涓畬鏁寸殑鏍囪瘑絎︺備篃灝辨槸璇達紝ParseToEnd閬囧埌綾諱技"the real 100 Tinymoe programmer"鐨勬椂鍊欙紝浠栦細榪斿洖"the real Tinymoe programmer"錛岀劧鍚庡湪"100"鐨勫湴鏂規姤涓涓敊璇?

ParseToFarest鐨勯昏緫宸笉澶氾細

鍙槸褰撹繖涓嚱鏁伴亣鍒?the real 100 Tinymoe programmer"鐨勬椂鍊欙紝浼氳繑鍥?the real"錛岀劧鍚庢妸鍏夋爣縐誨姩鍒?100"錛屼絾鏄病鏈夋姤閿欍?

鐪嬩簡榪欏嚑涓熀鏈殑鍑芥暟涔嬪悗錛屾垜浠彲浠ヨ繘鍏ユ棰樹簡銆傚仛璇硶鍒嗘瀽鍣紝褰撶劧榪樻槸浠庢枃娉曞紑濮嬨傝窡涓婁竴綃囨枃绔犱竴鏍鳳紝鎴戜滑鏉ュ皾璇曠洿鎺ユ瀯閫犱竴涓嬫枃娉曘備絾鏄娉曞垎鏋愬櫒璺熻瘝娉曞垎鏋愬櫒鐨勬枃娉曠殑鍖哄埆鏄紝璇嶆硶鍒嗘瀽鍏剁殑鏂囨硶鍙互 "瀹氫箟鍑芥暟"鍜?璋冪敤鍑芥暟"銆?

棣栧厛錛屾垜浠潵鐪媠ymbol鐨勬枃娉曪細

SymbolName ::= <identifier> { <identifier> }

Symbol ::= "symbol" SymbolName

鍏舵錛屽氨鏄痶ype鐨勫0鏄庛倀ype鏄琛岀殑錛屼笉榪囨垜浠繖閲屽彧鍏沖績寮澶寸殑涓鏍鳳細

Type ::= "type" SymbolName [ ":" SymbolName ]

鍦ㄨ繖閲岋紝涓嫭鍙蜂唬琛ㄥ彲鏈夊彲鏃狅紝澶ф嫭鍙蜂唬琛ㄩ噸澶?嬈℃垨浠ヤ笂銆傜幇鍦ㄨ鎴戜滑鏉ョ湅鍑芥暟鐨勫0鏄庛傚嚱鏁扮殑鐢熷懡鐣ヤ負澶嶆潅錛?

Function ::= ("phrase" | "sentence" | "block") { SymbolName | "(" Argument ")" } [ ":" SymbolName ]

Argument ::= ["list" | "expression" | "argument" | "assignable"] SymbolName

Argument ::= SymbolName

Argument ::= Function

Declaration ::= Symbol | Type | Function

鍦ㄨ繖閲屾垜浠湅鍒癋unction閫掑綊浜嗚嚜宸憋紝榪欐槸鍥犱負鍑芥暟鐨勫弬鏁板彲浠ユ槸鍙︿竴涓嚱鏁般備負浜嗚榪欎釜鍙傛暟璋冪敤璧鋒潵鏇村姞婕備寒涓鐐癸紝浣犲彲浠ユ妸鍙傛暟鍐欐垚鍑芥暟鐨勫艦寮忥紝璀璇達細

pharse (the number) is odd : odd numbers

聽聽聽聽return the number % 2 == 1

end

print all (phrase (the number) is wanted) in (numbers)

聽聽聽聽repeat with the number in all numbers

聽聽聽聽聽聽聽聽if the number is wanted

聽聽聽聽聽聽聽聽聽聽聽聽print the number

聽聽聽聽聽聽聽聽end

聽聽聽聽end

end

print main

聽聽聽聽print all odd numbers in array of (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

end

鎴戜滑緇?(the number) is odd"榪欎釜鍒ゆ柇涓涓暟瀛楁槸涓嶆槸濂囨暟鐨勫嚱鏁幫紝璧蜂簡涓涓埆鍚嶅彨"odd numbers"錛岃繖涓埆鍚嶄笉鑳借璋冪敤錛屼絾鏄粬絳変環浜庝竴涓彧璇葷殑鍙橀噺淇濆瓨鐫濂囨暟鍑芥暟鐨勫嚱鏁版寚閽堛備簬鏄垜浠氨鍙互鎶婂畠浼犻掔粰"print all (鈥? in (鈥?"榪欎釜鍑芥暟鐨勭涓涓弬鏁頒簡銆傜涓涓弬鏁板0鏄庢垚鍑芥暟錛屾墍浠ユ垜浠彲浠ュ湪print鍑芥暟鍐呯洿鎺ヨ皟鐢ㄨ繖涓弬鏁版寚鍚戠殑odd numbers鍑芥暟銆?

浜嬪疄涓奣inymoe鐨凷ymbolName鏄彲浠ュ寘鍚叧閿瓧鐨勶紝浣嗘槸鎴戜負浜嗕笉璁╁畠鍐欑殑澶暱錛屼簬鏄垜灝辯畝鍗曠殑鍐欐垚浜嗕笂闈㈢殑閭f潯寮忓瓙銆傞偅Argument鏄惁鍙互鍖呭惈鍏抽敭瀛楀憿錛熺瓟妗堝綋鐒舵槸鍙互鐨勶紝鍙槸褰撳畠浠ist銆乪xpression銆乤rgument銆乤ssignable銆乸hrase銆乻entence銆乥lock寮濮嬬殑鏃跺欙紝鎴戜滑寮鴻璁や負浠栨湁棰濆鐨勬剰涔夈?

鐜板湪涓涓猅inymoe鐨勫0鏄庣殑絎竴琛岄兘鐢盌eclaration鏉ュ畾涔夈傚綋鎴戜滑璇嗗埆鍑轟竴涓紜殑Declaration涔嬪悗錛屾垜浠氨鍙互鏍規嵁鍒嗘瀽鐨勭粨鏋滄潵瀵瑰悗闈㈢殑琛岃繘琛屽垎鏋愩傝濡傝symbol鍚庨潰娌℃湁涓滆タ錛屼簬鏄氨榪欎箞瀹屼簡銆倀ype鍚庨潰閮芥槸鎴愬憳鍑芥暟錛屾墍浠ユ垜浠竴鐩存壘鍒?end"涓烘銆傚嚱鏁扮殑鍑芥暟浣撳氨鏇村鏉備簡錛屾墍浠ユ垜浠細鐩存帴璺沖埌涓嬩竴涓湅璧鋒潵鍍廌eclaration鐨勪笢瑗庫斺斾篃灝辨槸浠ymbol銆乼ype銆乸hrase銆乻entence銆乥lock銆乧ps銆乧ategory寮濮嬬殑琛屻傝繖浜涙楠ら兘寰堢畝鍗曪紝鎵浠ラ棶棰樼殑閲嶇偣灝辨槸錛?strong>濡備綍鏍規嵁Declaration鐨勬枃娉曟潵澶勭悊杈撳叆鐨勫瓧絎︿覆銆?

涓轟簡璁╂枃娉曞彲浠ョ湡姝g殑榪愯錛屾垜浠渶瑕佹妸瀹冨仛鎴愮姸鎬佹満銆傛牴鎹箣鍓嶇殑鎻忚堪錛岃繖涓姸鎬佸強浠嶇劧闇瑕佹湁"瀹氫箟鍑芥暟"鍜?鎵ц鍑芥暟"鐨勮兘鍔涖傛垜浠彲浠ュ厛鍋囪浠栦滑鏄鍒欒〃杈懼紡錛岀劧鍚庢妸鏁翠釜鐘舵佹満鐢誨嚭鏉ャ傝繖涓椂鍊欙紝"鍑芥暟"鏈韓鎴戜滑鎶婂畠鐪嬫垚鏄竴涓窡鏍囪瘑絎︽棤鍏崇殑杈撳叆錛岀劧鍚庡氨鍙互寰楀埌涓嬮潰鐨勭姸鎬佹満錛?

榪欐牱鎴戜滑鐨勭姸鎬佹満灝辨殏鏃跺畬鎴愪簡銆備絾鏄幇鍦ㄨ繕涓嶈兘鐩存帴鎶婂畠杞崲鎴愪唬鐮侊紝鍥犱負褰撴垜浠亣鍒頒竴涓緭鍏ワ紝鑰屾垜浠彲浠ラ夋嫨璋冪敤鍑芥暟錛岃屼笖鍙互鐢ㄧ殑鍑芥暟榪樹笉姝竴涓殑鏃跺欙紝閭e簲璇ユ庝箞鍔炲憿錛熺瓟妗堝氨鏄媯鏌ユ垜浠殑鏂囨硶鏄笉鏄湁姝т箟銆?

鏂囨硶鐨勬涔夋槸涓涓緢鏈夋剰鎬濈殑闂銆傚湪鎴戜滑鐪熺殑瀹炶返涓涓紪璇戝櫒鐨勬椂鍊欙紝鎴戜滑浼氶亣鍒頒笁縐嶆涔夛細

  1. 鏂囨硶鏈韓灝辨槸鏈夋涔夌殑錛岃濡傝C++钁楀悕鐨凙* B;鐨勯棶棰樸傚綋A鏄竴涓彉閲忕殑鏃跺欙紝榪欐槸涓涓箻娉曡〃杈懼紡銆傚綋A鏄竴涓被鍨嬬殑鏃跺欙紝榪欐槸涓涓彉閲忓0鏄庤鍙ャ傚鏋滄垜浠湪璇硶鍒嗘瀽鐨勬椂鍊欎笉鐭ラ亾A鍒板簳鎸囧悜鐨勬槸浠涔堜笢瑗匡紝閭f垜浠牴鏈棤浠庡緱鐭ヨ繖涓鍙ヨ瘽鍒板簳瑕佸彇浠涔堟剰鎬濓紝浜庢槸瑕佷箞榪斿洖閿欒錛岃涔堜袱涓粨鏋滀竴璧瘋繑鍥炪傝繖灝辨槸闂硶鏈韓鍥烘湁鐨勬涔夈?
  2. 鏂囨硶鏈韓娌℃湁姝т箟錛屼絾鏄湪鍒嗘瀽鐨勮繃紼嬩腑鍗存棤娉曞湪璧版瘡涓姝ョ殑鏃跺欓兘鑳藉綆楀嚭鍞竴鐨?涓嬩竴涓姸鎬?銆傝濡傝C#钁楀悕鐨凙<B>C;闂銆傚綋A鏄竴涓彉閲忕殑鏃跺欙紝榪欎釜璇彞鏄笉鎴愮珛鐨勶紝鍥犱負C#鐨勪竴涓鍙ョ殑鏍硅妭鐐逛笉鑳芥槸涓涓搷浣滅錛堣繖閲屾槸">"錛夈傚綋A鏄竴涓被鍨嬬殑鏃跺欙紝榪欐槸涓涓彉閲忓0鏄庤鍙ャ備粠緇撴灉鏉ョ湅錛岃繖騫舵病鏈夋涔夛紝浣嗘槸褰撴垜浠瀹孉<B>鐨勬椂鍊欎粛鐒朵笉鐭ラ亾榪欎釜璇彞鐨勭粨鏋勫埌搴曟槸鍙栧摢涓縐嶃傚疄闄呬笂B浣滀負綾誨瀷鍙傛暟錛屼粬涔熷彲浠ユ湁B<C>榪欐牱鐨勭粨鏋勶紝鍥犳榪欎釜B鍙互鏄換鎰忛暱鐨勩備篃灝辨槸璇存垜浠彧鏈夊湪">"緇撴潫涔嬪悗鍐嶅璇誨嚑涓瓧絎︽墠鑳藉緱鍒版紜殑鍒ゆ柇銆傝濡傝C鏄?(1)"錛岄偅鎴戜滑鐭ラ亾A搴旇鏄竴涓ā鏉垮嚱鏁般傚鏋淐鏄竴涓悕瀛楋紝A澶氬崐搴旇鏄竴涓被鍨嬨傚洜姝ゆ垜浠湪鍋氳娉曞垎鏋愮殑鏃跺欙紝鍙兘涓ょ鎯呭喌涓璧瘋冭檻錛屽茍琛屽鐞嗐傛渶鍚庡鏋滃摢涓涓儏鍐靛垎鏋愪笉涓嬪幓浜嗭紝灝辯畝鍗曠殑鎵旀帀錛屽墿涓嬬殑灝辨槸鎴戜滑鎵闇瑕佺殑銆?
  3. 鏂囨硶鏈韓娌℃湁姝т箟錛岃屼笖鍒嗘瀽鐨勮繃紼嬩腑鍙浣犳瘡涓姝ラ兘寰鍚庡鐪嬫渶澶歂涓猼oken錛岄厭鍙互綆楀嚭鍞竴鐨?涓嬩竴涓姸鎬?鍒板簳鏄粈涔堛傝繖涓兂蹇呭ぇ瀹墮兘寰堢啛鎮夛紝鍥犱負榪欎釜N灝辨槸LookAhead銆傛墍璋撶殑LL(1)銆丼LR(1)銆丩R(1)銆丩ALR(1)浠涔堢殑錛岃繖涓?鍏跺疄灝辨槸N=1鐨勬儏鍐點侼褰撶劧涓嶄竴瀹氭槸1錛屼粬涔熷彲浠ユ槸涓涓緢澶х殑鏁板瓧錛岃濡傝8銆備竴涓枃娉曠殑LookAhead鏄灝戯紝榪欐槸鏂囨硶鏈韓鍥烘湁鐨勫睘鎬с備竴涓狶R(2)鐨勭姸鎬佹満浣犻潪瑕佸湪璇硶鍒嗘瀽鐨勬椂鍊欏彧LookAhead涓涓猼oken錛岄偅涔熶細閬囧埌絎簩縐嶆涔夌殑鎯呭喌銆傚鏋淐璇█娌℃湁typedef鐨勮瘽錛岄偅浠栧氨鏄竴涓甫鏈塋ookAhead鐨勬病鏈夋涔夌殑璇█浜嗐?

鐪嬩竴鐪兼垜浠垰鎵嶅啓鍑烘潵鐨勬枃娉曪紝鏄庢樉灝辨槸LookAhead=0鐨勬儏鍐碉紝鑰屼笖榪炲乏閫掑綊閮芥病鏈夛紝鍐欒搗鏉ヨ偗瀹氬緢瀹規槗銆傞偅鎺ヤ笅鏉ユ垜浠鍋氱殑灝辨槸緇?鍑芥暟"綆梖irst set銆備竴涓嚱鏁扮殑first set錛岄【鍚嶆濅箟灝辨槸錛屼粬鐨勭涓涓猼oken閮藉彲浠ユ槸浠涔堛係ymbolName銆丼ymbol銆乀ype銆丗unction閮戒笉鐢ㄧ湅浜嗭紝鍥犱負浠栦滑鐨勬枃娉曠涓涓緭鍏ラ兘鏄痶oken錛岄偅灝辨槸浠栦滑鐨刦irst set銆傛渶鍚庡氨鍓╀笅Argument銆侫rgument鐨勭涓涓猼oken闄や簡list銆乪xpression銆乤rgument鍜宎ssignable浠ュ錛岃繕鏈塅unction銆傚洜姝rgument鐨刦irst set灝辨槸榪欎簺token鍔犱笂Function鐨刦irst set銆傚鏋滄枃娉曟湁宸﹂掑綊鐨勮瘽錛屼篃鍙互鐢ㄧ被浼肩殑鏂規硶鍋氾紝鍙鎴戜滑鍦ㄥ嚱鏁癆->B->C->鈥?>A鐨勬椂鍊欙紝鐭ラ亾A姝e湪璁$畻浜庢槸榪斿洖絀洪泦灝卞彲浠ヤ簡銆傚綋鐒訛紝鍙湁宸﹂掑綊鎵嶄細閬囧埌榪欑鎯呭喌銆?

鐒跺悗鎴戜滑媯鏌ヤ竴涓嬫瘡涓涓姸鎬侊紝鍙互鍙戠幇錛屼換浣曚竴涓姸鎬佸嚭鍘葷殑鎵鏈夎竟錛屼粬鎺ュ彈鐨則oken鎴栬呭嚱鏁扮殑first set閮芥槸娌℃湁浜ら泦鐨勩傝濡侫rgument鐨?鐘舵侊紝絎竴鏉¤竟鎺ュ彈鐨則oken銆佺浜屾潯杈規帴鍙楃殑SymbolName鐨刦irst set錛屽拰絎笁鏉¤竟鎺ュ彈鐨凢unction鐨刦irst set錛屾槸娌℃湁浜ら泦鐨勶紝鎵浠ユ垜浠氨鍙互鏂畾錛岃繖涓枃娉曚竴瀹氭病鏈夋涔夈傛寜鐓т笂嬈$姸鎬佹満鍒頒唬鐮佺殑鍐欐硶錛屾垜浠彲浠ユ満姊扮殑鍐欏嚭浠g爜浜嗐傚啓浠g爜鐨勬椂鍊欙紝鎴戜滑鎶婃瘡涓涓枃娉曠殑鍑芥暟錛岄兘鍐欐垚涓涓狢++鐨勫嚱鏁般傛瘡鍒頒竴涓姸鎬佺殑鏃跺欙紝鎴戜滑鐪嬩竴涓嬪綋鍓嶇殑token鏄粈涔堬紝鐒跺悗鍐嶅喅瀹氳蛋鍝潯杈廣傚鏋滈変腑鐨勮竟鏄痶oken杈癸紝閭f垜浠氨璺寵繃涓涓猼oken銆傚鏋滈変腑鐨勮竟鏄嚱鏁拌竟錛岄偅鎴戜滑涓嶈煩榪噒oken錛岃漿鑰岃皟鐢ㄩ偅涓嚱鏁幫紝璁╁嚱鏁拌嚜宸卞幓璺硉oken銆傘?a href="http://m.shnenglu.com/vczh/archive/2008/06/15/53373.html">濡備綍鎵嬪啓璇硶鍒嗘瀽鍣?/a>銆嬬敤鐨勪篃鏄竴鏍風殑鏂規硶錛屽鏋滃榪欎釜榪囩▼涓嶆竻妤氱殑錛屽彲浠ュ啀鐪嬩竴閬嶈繖涓枃绔犮?

浜庢槸鎴戜滑鍒頒簡瀹氫箟璇硶鏍戠殑鏃跺欎簡銆傚垢榪愮殑鏄紝鎴戜滑鍙互鐩存帴浠庢枃娉曚笂鐪嬪埌璇硶鏍戠殑褰㈢姸錛岀劧鍚庣◢寰仛涓鐐瑰井璋冨氨鍙互浜嗐傛垜浠妸姣忎竴涓嚱鏁伴兘鐪嬫垚涓涓被錛岀劧鍚庝嬌鐢ㄤ笅闈㈢殑瑙勫垯錛?

  1. 瀵逛簬A銆丄 B銆丄 B C絳夌殑鎯呭喌錛屾垜浠漿鎹㈡垚class閲岄潰鏈夎嫢騫蹭釜鎴愬憳鍙橀噺銆?
  2. 瀵逛簬A | B鐨勬儏鍐碉紝鎴戜滑鎶婂畠鍋氭垚緇ф壙錛孉鐨勮娉曟爲鍜孊鐨勮娉曟爲緇ф壙鑷竴涓熀綾伙紝鐒跺悗榪欎釜鍩虹被鐨勬寚閽堝氨鏀懼湪class閲岄潰鍋氭垚鍛樺彉閲忋?
  3. 瀵逛簬{ A }錛屾垨鑰匒 { A }鐨勬儏鍐碉紝閭d釜鎴愬憳鍙橀噺灝辨槸涓涓獀ector銆?
  4. 瀵逛簬[ A ]鐨勬儏鍐碉紝鎴戜滑灝卞綋A鐪嬶紝鍖哄埆鍙槸錛岃繖涓垚鍛樺彉閲忓彲浠ュ~nullptr銆?

瀵逛簬姣忎竴涓嚱鏁幫紝瑕佷笉瑕佺敤shared_ptr鏉ヨ鍒欒浠佽鏅恒備簬鏄垜浠彲浠ョ洿鎺ラ氳繃涓婇潰鐨勬枃娉曞緱鍒版垜浠墍闇瑕佺殑璇硶鏍戯細

棣栧厛鏄疭ymbolName錛?

鍏舵鏄疭ymbol錛?

鐒跺悗鏄疶ype錛?

鎺ヤ笅鏉ユ槸Argument錛?

鏈鍚庢槸Function錛?

澶у鍙互鐪嬪埌錛屽湪Argument閭i噷錛屽悓鏃跺嚭鍘葷殑涓夋潯杈瑰氨緇勬垚浜嗕笁涓瓙綾伙紝閮界戶鎵胯嚜FunctionFragment銆傚浘涓孩鑹茬殑閮ㄥ垎灝辨槸Tinymoe婧愪唬鐮侀噷鍦ㄤ笂榪扮殑鏂囨硶閲屽嚭鐜扮殑閭i儴鍒嗐傝嚦浜庝負浠涔堣繕鏈夊鍑烘潵鐨勯儴鍒嗭紝鍏跺疄鏄洜涓鴻繖閲岀殑鏂囨硶鏄負浜嗗彊榪版柟渚跨畝鍖栬繃鐨勩傝嚦浜嶵inymoe鍏充簬鍑芥暟澹版槑鐨勬墍鏈夎娉曞彲浠ュ垎鍒湅涓嬮潰鐨勫洓涓猤ithub鐨剋iki page錛?

https://github.com/vczh/tinymoe/wiki/Phrases,-Sentences-and-Blocks

https://github.com/vczh/tinymoe/wiki/Manipulating-Functions

https://github.com/vczh/tinymoe/wiki/Category

https://github.com/vczh/tinymoe/wiki/State-and-Continuation

鍦ㄦ湰绔犵殑鏈熬錛屾垜灝嗗悜澶у灞曠ずTinymoe鍏充簬鍑芥暟澹版槑鐨勯偅涓涓狿arse鍑芥暟銆傛枃绔犲凡緇忔妸鎵鏈夊叧閿殑鐭ヨ瘑鐐歸兘璁蹭簡錛屽叿浣撴庝箞鍋氬ぇ瀹跺彲浠ヤ笂https://github.com/vczh/tinymoe 闃呰婧愪唬鐮佹潵瀛︿範銆?

棣栧厛鏄垜浠殑鍑芥暟澶達細

鍥炴兂涓涓嬫垜浠箣鍓嶈鍒扮殑鍏充簬璇硶鍒嗘瀽鍑芥暟鐨勬牸寮忥細

  1. 榪斿洖鍊間竴瀹氭槸璇硶鏍戠殑涓涓妭鐐廣傚湪榪欓噷鎴戜滑浠hare_ptr<SymbolName>浣滀負鏍囪瘑絎︾殑鑺傜偣銆備竴涓爣璇嗙鍙互鍚湁澶氫釜鏍囪瘑絎oken錛岃濡傝the Chinese people銆乼he real Tinymoe programmer浠涔堢殑銆傚洜姝ゆ垜浠彲浠ョ畝鍗曞湴鎺ㄦ祴SymbolName閲岄潰鏈変竴涓獀ector<CodeToken>銆傝繖涓畾涔夊彲浠ュ湪TinymoeLexicalAnalyzer.h鐨勬渶鍚庝竴閮ㄥ垎鎵懼埌銆?
  2. 鍓嶄袱涓弬鏁板垎鍒槸iterator&鍜屾寚鍚戞湯灝劇殑iterator銆傛湯灝鵑氬父鎸?浠庤繖閲屽紑濮嬫垜浠笉甯屾湜榪欎釜parser鍑芥暟鏉ヨ"錛屽綋鐒惰繖閫氬父灝辨剰鍛崇潃琛屾湯銆傛垜浠妸"鏈熬"榪欎釜姒傚康鎶藉彇鍑烘潵錛屽湪鏌愪簺鎯呭喌涓嬪彲浠ュ緱鍒版瀬澶х殑濂藉銆?
  3. 鏈鍚庝竴涓猼oken涓瀹氭槸vector<CodeError>&錛岀敤鏉ュ瓨鏀捐繃紼嬩腑閬囧埌鐨勯敊璇?

鎴戜滑鍙互娓呮鍦扮湅鍒拌繖涓嚱鏁版弧瓚充笂鏂囨彁鍑烘潵鐨勪笁涓姹傘傚墿涓嬫潵鐨勫弬鏁版湁涓や釜錛岀涓涓槸decl錛屽鏋滀笉涓虹┖閭d唬琛ㄨ皟鐢ㄥ嚱鏁扮殑浜哄凡緇忓府浣犲惂璇硶鏍戠粰new鍑烘潵浜嗭紝浣犲簲璇ョ洿鎺ヤ嬌鐢ㄥ畠銆傞涓涓弬鏁皁wnerToken鍒欐槸涓轟簡浜х敓璇硶閿欒浣跨敤鐨勩傜劧鍚庢垜浠湅浠g爜錛?

絎竴姝ワ紝鎴戜滑鍒ゆ柇杈撳叆鏄惁涓虹┖錛岀劧鍚庢牴鎹渶瑕佹姤閿欙細

絎簩姝ワ紝鏍規嵁絎竴涓猼oken鏉ョ‘瀹氬嚱鏁扮殑褰㈠紡鏄痯hrase銆乻entence榪樻槸block錛屽茍璁板綍鍦ㄦ垚鍛樺彉閲弔ype閲岋細

絎笁姝ユ槸涓涓驚鐜紝鎴戜滑鏍規嵁褰撳墠鐨則oken錛堣繕璁頒笉璁板緱涔嬪墠璇磋繃錛岃鍏堢湅涓涓媡oken鏄粈涔堬紝鐒跺悗鍐嶅喅瀹氳蛋鍝潯杈癸紵錛夋潵鍐沖畾鎴戜滑鎺ヤ笅鏉ヨ鍒嗘瀽鐨勶紝鏄疉rgumentFragment鐨勪袱涓瓙綾伙紙鍒嗗埆鏄疺ariableArgumentFragment鍜孎unctionArgumentFragment錛夛紝榪樻槸鏅氱殑鍑芥暟鍚嶇殑涓閮ㄥ垎錛岃繕鏄鍑芥暟宸茬粡緇撴潫浜嗭紝閬囧埌浜嗕竴涓啋鍙鳳紝鍥犳寮濮嬪垎鏋愬埆鍚嶏細

鏈鍚庡氨涓嶈創浜嗭紝鏄鏌ユ牸寮忔槸鍚︽弧瓚寵涔夌殑涓浜涗唬鐮侊紝璀璇碽lock鐨勫嚱鏁板悕蹇呴』鐢卞弬鏁板紑濮嬪暒錛屾垨鑰卲hrase鐨勫弬鏁頒笉鑳芥槸argument鍜宎ssignable絳夈?

榪欑瘒鏂囩珷灝卞埌姝ょ粨鏉熶簡錛屽笇鏈涘ぇ瀹跺湪鐪嬩簡榪欑墖鏂囩珷涔嬪悗錛岄厤鍚坵iki鍏充簬璇硶鐨勫叏闈㈡弿榪幫紝宸茬粡鐭ラ亾濡備綍瀵筎inymoe鐨勫0鏄庨儴鍒嗚繘琛岃娉曞垎鏋愩傜揣鎺ョ潃灝辨槸涓嬩竴綃囨枃绔犫斺擳inymoe涓庡甫姝т箟璇硶鍒嗘瀽浜嗭紝浼氳澶у鏄庣櫧錛屾兂瀵硅濡?print sum from 1 to 100"榪欐牱鐨勪唬鐮佸仛璇硶鍒嗘瀽錛屼篃涓嶉渶瑕佸澶嶆潅鐨勬墜孌靛氨鍙互鍋氬嚭鏉ャ?/p>

闄堟鐎?vczh) 2014-03-23 16:51 鍙戣〃璇勮
]]>
璺焩czh鐪嬪疄渚嬪緙栬瘧鍘熺悊鈥斺斾簩錛氬疄鐜癟inymoe鐨勮瘝娉曞垎鏋?/title><link>http://m.shnenglu.com/vczh/archive/2014/03/02/206014.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Sun, 02 Mar 2014 15:44:00 GMT</pubDate><guid>http://m.shnenglu.com/vczh/archive/2014/03/02/206014.html</guid><wfw:comment>http://m.shnenglu.com/vczh/comments/206014.html</wfw:comment><comments>http://m.shnenglu.com/vczh/archive/2014/03/02/206014.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://m.shnenglu.com/vczh/comments/commentRss/206014.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/vczh/services/trackbacks/206014.html</trackback:ping><description><![CDATA[<p>鏂囩珷涓紩鐢ㄧ殑浠g爜鍧囨潵鑷?a >https://github.com/vczh/tinymoe</a>銆? </p><p> 聽</p><p>瀹炵幇Tinymoe鐨勭涓姝ヨ嚜鐒舵槸涓涓瘝娉曞垎鏋愬櫒銆傝瘝娉曞垎鏋愬叾鎵浣滅殑浜嬫儏寰堢畝鍗曪紝灝辨槸鎶婁竴浠戒唬鐮佸垎鍓叉垚鑻ュ共涓猼oken錛岃褰曚笅浠栦滑鎵鍦ㄦ枃浠剁殑浣嶇疆錛屼互鍙婁涪鎺変笉蹇呰鐨勪俊鎭備絾鏄疶inymoe鏄竴涓寜琛屽垎鍓茬殑璇█錛岃嚜鐒秚oken鍒楄〃涔熷氨鏄簩緇寸殑錛岀涓緇存槸琛岋紝絎簩緇存槸姣忎竴琛岀殑token銆傚湪緇х畫璁茶瘝娉曞垎鏋愬櫒涔嬪墠錛屽厛鐪嬬湅Tinymoe鍖呭惈澶氬皯token錛? </p><ul><li><div style="text-align: justify"><span style="font-size:10pt">絎﹀彿錛?銆?銆?銆?銆?amp;銆?銆?銆?銆?銆乗銆?銆?lt;銆?gt;銆?lt;=銆?gt;=銆?銆?lt;> </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">鍏抽敭瀛楋細module銆乽sing銆乸hrase銆乻entence銆乥lock銆乻ymbol銆乼ype銆乧ps銆乧ategory銆乪xpression銆乤rgument銆乤ssignable銆乴ist銆乪nd銆乤nd銆乷r銆乶ot </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">鏁板瓧錛?23銆?56.789 </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">瀛楃涓詫細"abc\r\ndef" </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">鏍囪瘑絎︼細tinymoe </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">娉ㄩ噴錛?- this is a comment </span></div></li></ul><p> 聽</p><p>Tinymoe瀵逛簬token鏈変竴涓壒孌婄殑瑙勫畾錛屽氨鏄瓧絎︿覆鍜屾敞閲婇兘鏄崟琛岀殑銆傚洜姝ゅ鏋滀竴涓瓧絎︿覆鍦ㄦ病鏈夌粨鏉熶箣鍓嶅氨閬囧埌浜嗘崲琛岋紝閭d箞榪欑鍐欐硶瀹氫箟涓轟綘閬囧埌浜嗕竴涓病鏈夊彸鍙屽紩鍙風殑瀛楃涓詫紝闇瑕佹姤涓敊錛岀劧鍚庝笅涓琛屽氨涓嶆槸榪欎釜瀛楃涓茬殑鍐呭浜嗐? </p><p> 聽</p><p>涓涓瘝娉曞垎鏋愬櫒鎵闇瑕佸仛鐨勪簨鎯咃紝灝辨槸鎶婁竴涓瓧絎︿覆鍒嗚В鎴愭弿榪版娉曠殑鏁版嵁緇撴瀯銆傛棦鐒朵笂闈㈠凡緇忚鍒癟inymoe鐨則oken鍒楄〃鏄簩緇寸殑錛屽洜姝ゆ暟鎹粨鏋勮偗瀹氫細浣撶幇榪欎釜瑙傜偣銆俆inymoe鐨勮瘝娉曞垎鏋愬櫒浠g爜鍙互鍦ㄨ繖閲屾壘鍒幫細<a >https://github.com/vczh/tinymoe/blob/master/Development/Source/Compiler/TinymoeLexicalAnalyzer.h</a>銆? </p><p> 聽</p><p>棣栧厛鏄痶oken錛? </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh1.png" alt=""/> </p><p>CodeTokenType鏄竴涓灇涓劇被鍨嬶紝鏍囪涓涓猼oken鐨勭被鍨嬨傝繖涓被鍨嬫瘮杈冪粏鍖栵紝姣忎竴涓叧閿瓧鏈夎嚜宸辯殑綾誨瀷錛屾瘡涓涓鍙蜂篃鏈夎嚜宸辯殑綾誨瀷錛屽墿涓嬬殑鎸夌綾繪潵鍒嗐傛垜浠彲浠ョ湅鍒皌oken闇瑕佽褰曠殑鏈鍏抽敭鐨勪笢瑗垮彧鏈変笁涓細綾誨瀷銆佸唴瀹瑰拰浠g爜浣嶇疆銆傚湪token璁板綍浠g爜浣嶇疆鏄崄鍒嗛噸瑕佺殑錛屾紜湴璁板綍浠g爜浣嶇疆鍙互璁╀綘鑳藉鎶ュ憡甯︿綅緗殑閿欒銆佷粠璇硶鏍戠殑鑺傜偣榪樺師鎴愪唬鐮佷綅緗佺敋鑷沖湪璋冭瘯鐨勬椂鍊欏彲浠ユ妸鎸囦護涔熸崲鎴愪綅緗? </p><p> 聽</p><p>榪欓噷闇瑕佹彁鍒扮殑鏄紝string_t鏄竴涓猼ypedef錛屽叿浣撶殑澹版槑鍙互鍦ㄨ繖閲岀湅鍒幫細<a >https://github.com/vczh/tinymoe/blob/master/Development/Source/TinymoeSTL.h</a>銆俆inymoe鏄畬鍏ㄧ敱鏍囧噯鐨凜++11鍜孲TL鍐欐垚鐨勶紝浣嗘槸涓轟簡閫傚簲涓嶅悓鎯呭喌鐨勯渶瑕侊紝Tinymoe鍒嗕負渚濊禆code page鐨勭増鏈拰Unicode鐗堟湰銆傚鏋滅紪璇慣inymoe浠g爜鐨勬椂鍊欏0鏄庝簡鍏ㄥ眬鐨勫畯UNICODE_TINYMOE鐨勮瘽錛岄偅Tinymoe鎵鏈夌殑瀛楃澶勭悊灝嗕嬌鐢╳char_t錛屽惁鍒欎嬌鐢╟har銆俢har鐨勭被鍨嬪拰Tinymoe緙栬瘧鍣ㄥ湪榪愯鐨勬椂鍊欐搷浣滅郴緇熷綋鍓嶇殑code page鏄粦瀹氱殑銆傛墍浠ヨ繖閲屼細鏈夌被浼約tring_t鍟娿乮fstream_t鍟娿乧har_t絳夌被鍨嬶紝浼氬湪涓嶅悓鐨勭紪璇戦夐」鐨勫獎鍝嶄笅鎸囧悜涓嶅悓鐨凷TL綾誨瀷鎴栬呭師鐢熺殑C++綾誨瀷銆俫ithub涓婄殑VC++2013宸ョ▼浣跨敤鐨勬槸wchar_t鐨勭増鏈紝鎵浠tring_t灝辨槸std::wstring銆? </p><p> 聽</p><p>Tinymoe鐨勮瘝娉曞垎鏋愬櫒闄や簡token鐨勭被鍨嬩互澶栵紝鑲畾榪橀渶瑕佸畾涔夋暣涓枃浠剁粨鏋勫湪璇嶆硶鍒嗘瀽鍚庣殑緇撴灉錛? </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh2.png" alt=""/> </p><p>榪欎釜鏁版嵁緇撴瀯浣撶幇浜?Tinymoe鐨則oken鍒楄〃鏄簩緇寸殑"鐨勮繖涓鐐廣備竴涓枃浠朵細琚瘝娉曞垎鏋愬櫒澶勭悊鎴愪竴涓猻hared_ptr<CodeFIle>瀵硅薄錛孋odeFile::lines璁板綍浜嗘墍鏈夐潪絀虹殑琛岋紝CodeLine::tokens璁板綍浜嗚琛岀殑鎵鏈塼oken銆? </p><p> 聽</p><p>鐜板湪璁╂垜浠潵鐪嬭瘝娉曞垎鏋愮殑鍏蜂綋榪囩▼銆傚叧浜庡浣曚粠姝e垯琛ㄨ揪寮忔瀯閫犺瘝娉曞垎鏋愬櫒鍙互鍦ㄨ繖閲岋紙<a href="http://m.shnenglu.com/vczh/archive/2008/05/22/50763.html">http://m.shnenglu.com/vczh/archive/2008/05/22/50763.html</a>錛夌湅鍒幫紝涓嶈繃鎴戜滑浠婂ぉ瑕佽涓璁插浣曚漢鑲夋瀯閫犺瘝娉曞垎鏋愬櫒銆傛柟娉曞叾瀹炴槸涓鏍風殑錛岄鍏堜漢鑲夋瀯閫犵姸鎬佹満錛岀劧鍚庢妸鐢ㄧ姸鎬佹満鍒嗘瀽杈撳叆鐨勫瓧絎︿覆鐨勪唬鐮佹妱榪囨潵灝卞彲浠ヤ簡銆備絾鏄緢灝戞湁浜轟細瑙h﹀緱閭d箞寮錛屽洜涓鴻繖鏍峰啓寰堝鏄撶湅涓嶆噦錛屽叾嬈℃湁鍙兘浼氶亣鍒頒竴浜涙瀬绔儏鍐墊槸浣犳棤娉曠敤綰補鐨勬鍒欒〃杈懼紡鏉ュ垎璇嶇殑錛岃濡傝C++鐨剅aw string literal錛歊"tinymoe(榪欓噷鐨勫瓧絎︿覆娌℃湁杞箟)tinymoe"銆備竴涓敤銆怰"<涓浜涘瓧絎?gt;(銆戝紑濮嬬殑瀛楃涓插彧鑳界敱銆?<鍚屾牱鐨勫瓧絎?gt;"銆戞潵緇撴潫錛岃欏哄埄鍒嗘瀽榪欑鎯呭喌錛屽彧鑳介氳繃鍦ㄧ姸鎬佹満閲岄潰鍋歨ack鎵嶈兘瑙e喅銆傝繖灝辨槸涓轟粈涔堟垜浠漢鑲夋瀯閫犺瘝娉曞垎鏋愬櫒鐨勬椂鍊欙紝浼氭妸鐘舵佸拰鍔ㄤ綔閮芥販鍦ㄤ竴璧峰啓錛屽洜涓鴻繖鏍蜂究浜庡鐞嗙壒孌婃儏鍐點? </p><p> 聽</p><p>涓嶈繃騫稿ソ鐨勬槸錛孴inymoe騫舵病鏈夎繖縐嶆儏鍐靛彂鐢熴傛墍浠ユ垜浠彲浠ョ洿鎺ヤ粠鐘舵佹満鍏ユ墜銆備負浜嗙畝鍗曡搗瑙侊紝鎴戝湪涓嬮潰鐨勭姸鎬佹満涓幓鎺夋墍鏈変笉鏄?鍜?鐨勭鍙楓傞鍏堬紝鎴戜滑闇瑕佷竴涓搗濮嬬姸鎬佸拰涓涓粨鏉熺姸鎬侊細 </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh3.png" alt=""/> </p><p> 聽</p><p>棣栧厛鎴戜滑娣誨姞鏁存暟鍜屾爣璇嗙榪涘幓錛? </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh4.png" alt=""/> </p><p> 聽</p><p>鍏舵鏄姞鍑忓拰嫻偣錛? </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh5.png" alt=""/> </p><p> 聽</p><p>鏈鍚庢妸瀛楃涓插拰娉ㄩ噴琛ュ叏錛? </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh6.png" alt=""/> </p><p> 聽</p><p>榪欐牱鐘舵佹満灝卞凡緇忓畬鎴愪簡銆傝榪囩紪璇戝師鐞嗙殑鍙兘浼氶棶錛屼負浠涔堢粓緇撶姸鎬侀兘鏄敱铏氱嚎鑰屼笉鏄甫鏈夎緭鍏ョ殑瀹炵幇鎸囧悜鐨勶紵鍥犱負铏氱嚎鍦ㄨ繖閲屾湁鐗規畩鐨勬剰涔夛紝涔熷氨鏄瀹冧笉鑳界Щ鍔ㄨ緭鍏ョ殑瀛楃涓茬殑鎸囬拡錛岃屼笖浠栬繕瑕佽礋璐f坊鍔犱竴涓猼oken銆傚綋鐘舵佽煩鍒癊nd涔嬪悗錛岄偅浠栧氨浼氬彉鎴怱tart錛屾墍浠?strong>瀹為檯涓奡tart鍜孍nd鏄悓涓涓姸鎬?/strong>銆傝繖涓姸鎬佹満涔熶笉鏄緭鍏ヤ粈涔堝瓧絎﹂兘鑳借煩杞埌涓嬩竴涓姸鎬佺殑銆傛墍浠?strong>褰撲綘鍙戠幇杈撳叆鐨勫瓧絎﹁浣犳棤璺彲璧扮殑鏃跺欙紝浣犲氨鏄亣鍒頒簡涓涓瘝娉曢敊璇?/strong>銆? </p><p> 聽</p><p>榪欐牱鎴戜滑鐨勮璁″氨綆楀畬鎴愪簡錛屾帴涓嬫潵灝辨槸濡備綍鐢–++鏉ュ疄鐜板畠浜嗐備負浜嗚浠g爜鏇村鏄撻槄璇伙紝鎴戜滑搴旇緇橲tart鍜?-9榪欎箞澶氱姸鎬佽搗鍚嶅瓧錛屽仛娉曞涓嬶細 </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh7.png" alt=""/> </p><p>鍦ㄨ繖閲岀被浼肩姸鎬?榪欐牱鐨勭姸鎬佽鎴戠渷鐣ユ帀浜嗭紝鍥犱負榪欎釜鐘舵佸敮涓鐨勫嚭璺氨鏄櫄綰匡紝鎵浠ヨ煩鍒拌繖涓姸鎬佹剰鍛崇潃浣犺绔嬪埢鎵ц铏氱嚎錛屼篃灝辨槸璇翠綘涓嶉渶瑕佸仛"璺沖埌榪欎釜鐘舵?榪欎釜鍔ㄤ綔銆傚洜姝ゅ畠涓嶉渶瑕佹湁涓涓悕瀛椼? </p><p> 聽</p><p>鐒跺悗浣犲彧瑕佹寜鐓т笅闈㈢殑鍋氭硶緲昏瘧榪欎釜鐘舵佹満灝卞彲浠ヤ簡錛? </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh8.png" alt=""/> </p><p> 聽</p><p>鍙鍐欏埌榪欓噷錛岄偅涔堟垜浠氨鍒濇瀹屾垚浜嗚瘝娉曞垎鏋愬櫒浜嗐傚叾瀹炰換浣曠郴緇熺殑涓昏鍔熻兘閮芥槸鐩稿瀹規槗瀹炵幇鐨勶紝寰寰鏄瑕佺殑鍔熻兘鎵嶉渶瑕佽姳璐瑰ぇ閲忕殑綺懼姏鏉ュ畬鎴愶紝鑰屼笖榪樺緢瀹規槗鍑洪敊銆傚湪榪欓噷"嬈¤鐨勫姛鑳?灝辨槸鈥斺旇褰晅oken鐨勮鍒楀彿錛岃繕鏈夌淮鎶odeFile::lines閬垮厤絀鴻鐨勫嚭鐜幫紒 </p><p> 聽</p><p>灝界鎴戝凡緇忓仛榪囦簡閭d箞澶氭璇嶆硶鍒嗘瀽鍣紝浣嗘槸鎴戜粛鐒舵棤娉曚竴姘斿懙鎴愬啓瀵癸紝浠嶇劧浼氬嚭涓浜沚ug銆傞潰瀵圭紪璇戝櫒榪欑綰綆楃▼搴忥紝debug鐨勬渶濂芥柟娉曞氨鏄啓鍗曞厓嫻嬭瘯銆備笉榪囧浜庝笉鐔熸倝鍗曞厓嫻嬭瘯鐨勪漢鏉ヨ鍙兘寰堥毦涓涓嬪瓙鎯沖埌瑕佸仛浠涔堟祴璇曪紝鍦ㄨ繖閲屾垜鍙互鎶婃垜緇橳inymoe璋㈢殑涓閮ㄥ垎鍗曞厓嫻嬭瘯鍦ㄨ繖閲岃創涓涓嬨? </p><p> 聽</p><p>絎竴涓紝褰撶劧鏄紶璇翠腑鐨?Hello, world!"嫻嬭瘯浜嗭細 </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh9.png" alt=""/> </p><p> 聽</p><p>TEST_CASE鍜孴EST_ASSERT錛堣繖閲屾殏鏃舵病鏈夌洿鎺ョ敤鍒癟EST_ASSERT錛夋槸鎴戜負浜嗗紑鍙慣inymoe闅忔墜鎾哥殑涓涓畯錛屽彲浠ュ湪Tinymoe鐨勪唬鐮侀噷鐪嬪埌銆備負浜嗘鏌ユ垜浠湁娌℃湁綺楀績澶ф剰錛屾垜浠湁蹇呰媯鏌ヨ瘝娉曞垎鏋愬櫒鐨勪換浣曚竴涓緭鍑虹殑鏁版嵁錛岃濡傛瘡涓琛屾湁澶氬皯token錛岃濡傛瘡涓涓猼oken鐨勮鍙峰垪濂藉唴瀹瑰拰綾誨瀷銆傛垜涓轟簡璁╄繖浜涙灟鐕ョ殑嫻嬭瘯鐢ㄤ緥瀹規槗鐪嬫噦錛屽湪榪欎釜鏂囦歡錛?a 銆? </p><p> 聽</p><p>絎簩涓祴璇曠敤渚嬮拡瀵圭殑鏄暣鏁板拰嫻偣鐨勮緭鍑哄拰鎶ラ敊涓婏紝閲嶇偣鍦ㄤ簬媯鏌ユ瘡涓涓猼oken鐨勫垪鍙鋒槸涓嶆槸姝g‘鐨勮綆椾簡鍑烘潵錛? </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh10.png" alt=""/> </p><p> 聽</p><p>絎笁涓祴璇曠敤渚嬬殑閲嶇偣涓昏鏄?絎﹀彿鍜屸旀敞閲婄殑鍒嗘瀽錛? </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh11.png" alt=""/> </p><p> 聽</p><p>絎洓涓祴璇曠敤渚嬪垯鏄祴璇曞瓧絎︿覆鐨別scaping鍜屽湪闈㈠鎹㈣鐨勬椂鍊欐槸鍚︽紜殑澶勭悊錛堜箣鍓嶆彁鍒板瓧絎︿覆涓嶈兘鎹㈣錛岄亣鍒頒竴涓獊鐒剁殑鎹㈣灝嗕細琚湅鎴愮己灝戝弻寮曞彿錛夛細 </p><p><img src="http://m.shnenglu.com/images/cppblog_com/vczh/030214_1544_vczh12.png" alt=""/> </p><p> 聽</p><p>閴翠簬璇嶆硶鍒嗘瀽鏈潵鍐呭涔熶笉澶氾紝鎵浠ヨ繖綃囨枃绔犱篃涓嶄細澶暱銆傜浉淇℃湁鍓嶉旂殑紼嬪簭鍛樹篃浼氬湪榪欓噷寰楀埌涓浜涚紪璇戝師鐞嗕互澶栫殑鐭ヨ瘑銆備笅涓綃囨枃绔犲皢浼氭弿榪癟inymoe鐨勫嚱鏁板ご鐨勮娉曞垎鏋愰儴鍒嗭紝灝嗕細鎻忚堪涓涓紪璇戝櫒鐨勪笉甯︽涔夌殑璇硶鍒嗘瀽鏄浣曚漢鑲夊嚭鏉ョ殑銆傛暚璇鋒湡寰呫?/p><img src ="http://m.shnenglu.com/vczh/aggbug/206014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2014-03-02 23:44 <a href="http://m.shnenglu.com/vczh/archive/2014/03/02/206014.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>闅忔墜鎾鎬簡涓涓彲浠ュ啓閫掑綊lambda鐨刌鍑芥暟http://m.shnenglu.com/vczh/archive/2014/03/01/205998.html闄堟鐎?vczh)闄堟鐎?vczh)Fri, 28 Feb 2014 16:34:00 GMThttp://m.shnenglu.com/vczh/archive/2014/03/01/205998.htmlhttp://m.shnenglu.com/vczh/comments/205998.htmlhttp://m.shnenglu.com/vczh/archive/2014/03/01/205998.html#Feedback3http://m.shnenglu.com/vczh/comments/commentRss/205998.htmlhttp://m.shnenglu.com/vczh/services/trackbacks/205998.html鏈榪戝涔燙++11鐨剉ariadic template argument錛岀粓浜庡彲浠ユ憜鑴辯敤fpmacro妯℃澘鏉ュ鍒朵竴澶у爢浠g爜鐨勫仛娉曚簡錛屽ソ寮蹇冦傝繖涓緥瀛愮殑main鍑芥暟鐢╨ambda鍐欎簡涓涓枑娉㈤偅濂戞暟鍒楃殑閫掑綊璁$畻鍑芥暟銆傝窡浠ュ線涓嶅悓鐨勬槸錛屽湪Y鍑芥暟鐨勫府鍔╀笅錛岃繖涓猯ambda琛ㄨ揪鏄彲浠ユ垚鍔熺湅鍒拌嚜宸憋紝鐒跺悗閫掑綊璋冪敤銆傚綋鐒惰繖浠嶇劧闇瑕佺敤鏅氱殑C++閫掑綊鏉ュ疄鐜幫紝騫朵笉鏄?calculus閭d釜楂樺ぇ涓婄殑Y Combinator銆?

#include <functional>

#include <memory>

#include <iostream>

#include <string>

using namespace std;

template<typename TResult, typename ...TArgs>

class YBuilder

{

private:

聽聽聽聽function<TResult(function<TResult(TArgs...)>, TArgs...)> partialLambda;

public:

聽聽聽聽YBuilder(function<TResult(function<TResult(TArgs...)>, TArgs...)> _partialLambda)

聽聽聽聽聽聽聽聽:partialLambda(_partialLambda)

聽聽聽聽{

聽聽聽聽}

聽聽聽聽TResult operator()(TArgs ...args)const

聽聽聽聽{

聽聽聽聽聽聽聽聽return partialLambda(

聽聽聽聽聽聽聽聽聽聽聽聽[this](TArgs ...args)

聽聽聽聽聽聽聽聽聽聽聽聽{

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return this->operator()(args...);

聽聽聽聽聽聽聽聽聽聽聽聽}, args...);

聽聽聽聽}

};

template<typename TMethod>

struct PartialLambdaTypeRetriver

{

聽聽聽聽typedef void FunctionType;

聽聽聽聽typedef void LambdaType;

聽聽聽聽typedef void YBuilderType;

};

template<typename TClass, typename TResult, typename ...TArgs>

struct PartialLambdaTypeRetriver<TResult(__thiscall TClass::*)(function<TResult(TArgs...)>, TArgs...)>

{

聽聽聽聽typedef TResult FunctionType(TArgs...);

聽聽聽聽typedef TResult LambdaType(function<TResult(TArgs...)>, TArgs...);

聽聽聽聽typedef YBuilder<TResult, TArgs...> YBuilderType;

};

template<typename TClass, typename TResult, typename ...TArgs>

struct PartialLambdaTypeRetriver<TResult(__thiscall TClass::*)(function<TResult(TArgs...)>, TArgs...)const>

{

聽聽聽聽typedef TResult FunctionType(TArgs...);

聽聽聽聽typedef TResult LambdaType(function<TResult(TArgs...)>, TArgs...);

聽聽聽聽typedef YBuilder<TResult, TArgs...> YBuilderType;

};

template<typename TLambda>

function<typename PartialLambdaTypeRetriver<decltype(&TLambda::operator())>::FunctionType> Y(TLambda partialLambda)

{

聽聽聽聽return typename PartialLambdaTypeRetriver<decltype(&TLambda::operator())>::YBuilderType(partialLambda);

}

int _tmain(int argc, _TCHAR* argv[])

{

聽聽聽聽auto fib = Y([](function<int(int)> self, int index)

聽聽聽聽{

聽聽聽聽聽聽聽聽return index<2

聽聽聽聽聽聽聽聽聽聽聽聽?1

聽聽聽聽聽聽聽聽聽聽聽聽:self(index-1)+self(index-2);

聽聽聽聽});

聽聽聽聽for (int i = 0; i < 10; i++)

聽聽聽聽{

聽聽聽聽聽聽聽聽cout << fib(i) << " ";

聽聽聽聽}

聽聽聽聽cout << endl;

}



闄堟鐎?vczh) 2014-03-01 00:34 鍙戣〃璇勮
]]>
璺焩czh鐪嬪疄渚嬪緙栬瘧鍘熺悊鈥斺斾竴錛歍inymoe鐨勮璁″摬瀛?/title><link>http://m.shnenglu.com/vczh/archive/2014/02/11/205702.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Tue, 11 Feb 2014 04:53:00 GMT</pubDate><guid>http://m.shnenglu.com/vczh/archive/2014/02/11/205702.html</guid><wfw:comment>http://m.shnenglu.com/vczh/comments/205702.html</wfw:comment><comments>http://m.shnenglu.com/vczh/archive/2014/02/11/205702.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://m.shnenglu.com/vczh/comments/commentRss/205702.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/vczh/services/trackbacks/205702.html</trackback:ping><description><![CDATA[<p>鑷粠銆婂簭銆嬭儭鎵簡蹇竴涓湀涔嬪悗錛岀粓浜庤繋鏉ヤ簡姝g墖銆備箣鎵浠ョ郴鍒楁枃绔犲彨銆婄湅瀹炰緥瀛︾紪璇戝師鐞嗐嬶紝鏄洜涓烘暣涓郴鍒椾細閫氳繃甯﹀ぇ瀹朵竴姝ヤ竴姝ュ疄鐜癟inymoe鐨勮繃紼嬶紝鏉ヤ粙緇嶇紪璇戝師鐞嗙殑涓浜涚煡璇嗙偣銆? </p><p>  </p><p>浣嗘槸絎竴涓郴鍒楄繕娌″埌寮濮嬪鐞員inymoe婧愪唬鐮佺殑鏃跺欙紝棣栧厛鐨勮窡澶у璁蹭竴璁叉垜璁捐Tinymoe鐨勬晠浜嬨備負浠涔堣繖縐嶄笢瑗胯絳夊埌鐜板湪鎵嶈鍛紝鍥犱負涔嬪墠娌℃湁鏂囨。錛屽皢浜嗕篃鏄櫧璁插晩銆俆inymoe鍦╣ithub鐨剋iki鍒嗕負涓ら儴鍒嗭紝涓閮ㄥ垎鏄粙緇嶈娉曠殑錛屽彟涓閮ㄥ垎鏄粙緇嶄竴涓渶灝忕殑鏍囧噯搴撴槸濡備綍瀹炵幇鍑烘潵鐨勶紝鍦板潃鍦?<a >https://github.com/vczh/tinymoe/wiki</a> 涓嶅甫闂彿鐨勯偅浜涢兘鏄啓瀹屼簡鐨勩? </p><p style="text-align: justify"><h2>緋誨垪鏂囩珷鐨勭洰鏍? </h2></p><p>鍦ㄤ粙緇峊inymoe涔嬪墠錛屽厛璇翠竴涓嬭繖涓郴鍒楁枃绔犵殑鐩爣銆侷deally錛屽彧瑕佷竴涓漢鐪嬪畬浜嗚繖涓郴鍒楋紝浠栧氨鍙互鍦ㄤ笅闈㈣繖浜涘湴鏂瑰緱鍒?strong>鍏ラ棬</strong>錛? </p><ul><li><div style="text-align: justify"><span style="font-size:10pt">璇嶆硶鍒嗘瀽 </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">姝т箟涓庝笉姝т箟鐨勮娉曞垎鏋? </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">璇箟鍒嗘瀽 </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">絎﹀彿琛? </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">鍏ㄦ枃CPS鍙樻崲 </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">緙栬瘧鐢熸垚楂樻晥鐨勫叾浠栬璦鐨勪唬鐮? </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">緙栬瘧鐢熸垚鑷繁鐨勬寚浠ら泦 </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">甯C鐨勮櫄鎷熸満 </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">綾誨瀷鎺ㄥ錛坕ntersection type錛寀nion type錛宑oncept mapping錛? </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt">璺ㄨ繃紼嬪垎鏋愶紙inter-procedural analyzing錛? </span></div></li></ul><p>  </p><p>褰撶劧錛岃繖騫朵笉鑳借浣犳垚涓轟竴涓ぇ鐗涳紝浣嗘槸鑷沖皯鑷繁鍋氬仛瀹為獙錛屾悶涓鐐歸珮澶т笂鐨勪笢瑗塊獥甯堝浠槸娌℃湁闂浜嗐? </p><p style="text-align: justify"><h2>Tinymoe璁捐鐨勭洰鏍? </h2></p><p>铏界劧鎯蟲硶寰堝騫村墠灝卞凡緇忔湁浜嗭紝浣嗘槸榪欐鎴戞兂鎶婂畠瀹炵幇鍑烘潵錛屾槸涓轟簡瀹屾垚銆婂浣曡璁′竴闂ㄨ璦銆嬬殑鍚庣畫銆傚厜璁插ぇ閬撶悊鏄病鏈夋剰涔夌殑錛岃嚦灝戝緱鏈変竴涓緥瀛愶紝璁╁ぇ瀹剁煡閬撹繖浜涗簨鎯呭埌搴曟槸浠涔堟牱瀛愮殑銆傚洜姝inymoe鏈変竴鐐規暀瀛︾殑鎰忎箟錛屼笉綆℃槸浣跨敤瀹冭繕鏄疄鐜板畠銆? </p><p>  </p><p>棣栧厛錛?strong>澶勭悊Tinymoe闇瑕佺殑鐭ヨ瘑鐐瑰錛岀敤浜庣紪璇戝師鐞嗘暀瀛?/strong>銆傛棦鐒舵槸涓轟簡灞曠ず緙栬瘧鍘熺悊鐨勫熀紜鐭ヨ瘑錛屽洜姝よ璦鏈韓涓嶅彲鑳芥槸閭g鐑傚ぇ琛楃殑C緋誨垪鐨勪笢瑗褲傚綋鐒墮櫎浜嗙煡璇嗙偣浠ュ錛岃繕浼氳澶у娣卞埢鐨勭悊瑙e埌錛?strong>闅懼疄鐜板拰闅劇敤錛屾槸瀹屽叏娌℃湁鍏崇郴鐨?/strong>錛乀inymoe鐢ㄨ搗鏉ュ彲鐖戒簡錛屽晩鍝堝搱鍝堝搱鍝堛? </p><p>  </p><p>鍏舵錛?strong>Tinymoe瀹規槗宓屽叆鍏朵粬璇█鐨勭▼搴忥紝浣滀負DSL浣跨敤錛屽彲浠ヨ皟鐢ㄥ涓葷▼搴忔彁渚涚殑鍔熻兘</strong>銆傝繖涓ユ牸鐨勬潵璁蹭笉綆楄璦鏈韓鐨勫姛鑳斤紝鑰屾槸瀹炵幇鏈韓鐨勫姛鑳姐傚氨綆楁槸C++涔熷彲浠ヨ璁′負宓屽叆寮忥紝lua涔熷彲浠ヨ璁捐涓虹紪璇戞垚exe鐨勩備竴涓璦鏈韓鐨勮璁″茍涓嶄細瀵瑰浣曚嬌鐢ㄥ畠鏈夊澶х殑闄愬埗銆備負浜嗚澶у鐪嬩簡榪欎釜緋誨垪涔嬪悗錛屽彲浠ュ啓鍑鴻嚦灝戝彲鐢ㄧ殑涓滆タ錛岃屼笉浠呬粎鏄啓鐜╁叿錛屽洜姝よ繖涔熸槸璁捐鐨勭洰鏍囦箣涓銆? </p><p>  </p><p>絎笁錛?strong>Tinymoe璇硶浼樺寲浜庢弿榪板鏉傜殑閫昏緫</strong>錛岃屼笉鏄紭鍖栦笌澶嶆潅鐨勬暟鎹粨鏋勫拰綆楁硶錛堣櫧鐒朵篃鍙互錛夈俆inymoe鏈韓鏄笉瀛樺湪浠諱綍緇嗙矑搴︽帶鍒跺唴瀛樼殑鑳藉姏鐨勶紝鑰屼笖铏界劧鍙互瀹炵幇澶嶆潅鐨勬暟鎹粨鏋勫拰綆楁硶錛屼絾鏄湰韜弿榪拌繖浜涗笢瑗挎渶澶氫篃灝辮窡JavaScript涓鏍峰鏄撯斺斿叾瀹炲氨鏄笉瀹規槗銆備絾鏄疶inymoe璁捐鐨勬椂鍊欙紝鏄負浜嗚澶у鎶奣inymoe褰撴垚鏄竴闂ㄥ彲浠ヨ璁SL鐨勮璦錛屽洜姝ゅ澶嶆潅閫昏緫鐨勬弿榪拌兘鍔涚壒鍒己銆傚敮涓鐨勫墠鎻愬氨鏄紝浣犳噦寰楀浣曠粰Tinymoe鍐欏簱銆傚緢濂界殑浣跨敤鍜屽緢濂藉湴瀹炵幇涓涓笢瑗挎槸鐩歌緟鐩告垚鐨勩傛垜鍦ㄨ璁inymoe涔嬪垵錛屽緢澶歱attern鎴戜篃涓嶇煡閬擄紝鍙槸鍥犱負璁捐Tinymoe閬靛驚浜嗙瀛︾殑鏂規硶錛屽洜姝ゆ渶鍚庢垜鍙戠幇Tinymoe绔熺劧鍏鋒湁濡傛寮哄ぇ鐨勬弿榪拌兘鍔涖傚綋鐒跺浜庤鑰呬滑鏈韓錛屼篃浼氬湪闃呰緋誨垪鏂囩珷鐨勬湁綾諱技鐨勬劅瑙夈? </p><p>  </p><p>鏈鍚庯紝<strong>Tinymoe鏄竴涓姩鎬佺被鍨嬭璦</strong>銆傝繖綰補鏄垜鐨勪釜浜虹埍濂戒簡銆傚涓闂ㄥ姩鎬佺被鍨嬭璦鍋氶潤鎬佸垎鏋愰偅璇ュ鏈夎叮鍟婏紝鍟婂搱鍝堝搱鍝堝搱鍝堛? </p><p style="text-align: justify"><h2>Tinymoe鐨勮璁″摬瀛? </h2></p><p>褰撶劧鎴戝茍涓嶄細涓轟簡鍐欐枃绔犲氨鏃犵嚎鎻愰珮Tinymoe鐨勫疄鐜伴毦搴︾殑銆備負浜嗘妸浠栨帶鍒跺湪涓涓甯告按騫籌紝鍥犳璁捐Tinymoe鐨勭涓鏉″氨鏄細 </p><p>  </p><p><strong>涓銆佸皬瑙勬ā鐨勮璦鏍稿績+澶ц妯$殑鏍囧噯搴? </strong></p><p>  </p><p>鍏跺疄榪欒窡C++宸笉澶氥備絾鏄疌++鐢變簬鎯沖仛鐨勪簨鎯呭疄鍦ㄦ槸澶浜嗭紝璀璇磋鍥懼寘娑墊墍鏈夎寖寮忕瓑絳夛紝鍥犳灝辯畻榪欎箞鍋氾紝浠嶇劧璁〤++鏈韓鍖呭惈鐨勪笢瑗胯繃浜庡法澶э紙鍏跺疄鎴戣繕鏄寰桟++涓嶉毦鎬庝箞鍔烇級銆? </p><p>  </p><p>璇█鏍稿績灝忥紝瀹炵幇璧鋒潵褰撶劧瀹規槗銆?strong>浣嗘槸浣犲茍涓嶈兘涓轟簡璁╄璦鏍稿績灝忓氨鐗虹壊浠涔堝姛鑳?/strong>銆傚洜姝ょ簿蹇冭璁′竴涓牳蹇冩槸蹇呴』鐨勶紝鍥犱負鎵鏈変綘鎯寵浣嗘槸涓嶆兂鍔犲叆璇█鐨勫姛鑳斤紝浠庢灝卞彲浠ョ敤搴撴潵瀹炵幇浜嗐? </p><p>  </p><p>璀璇達紝Tinymoe閫氳繃鏈夋潯浠跺湴鏆撮湶continuation錛岃姹傜紪璇戝櫒鍦ㄧ紪璇慣inymoe鐨勬椂鍊欏仛涓嬈″叏鏂嘋PS鍙樻崲銆傝繖涓笢瑗胯瀹規槗涔熶笉鏄偅涔堝鏄擄紝浣嗘槸鑷沖皯姣斾綘鍋氬垎鏀驚鐜紓甯稿鐞嗕粈涔堢殑鍏ㄩ儴鍔犺搗鏉ヨ綆鍗曞浜嗗惂銆傛墍浠ユ垜鍙彁渚沜ontinuation錛屽墿涓嬬殑鎺у埗嫻佸叏閮ㄧ敤搴撴潵鍋氥傝繖鏍鋒湁涓変釜濂藉錛? </p><ol><li><div style="text-align: justify"><span style="font-size:10pt"><strong>璇█綆鍗曪紝瀹炵幇闅懼害闄嶄綆</strong>銆? </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt"><strong>涓轟簡璁╁簱鍙互鍙戞尌搴旀湁鐨勪綔鐢紝璇█鐨勫姛鑳界殑閫夋嫨鍗佸垎鐨勬浜ゅ寲</strong>銆備笉榪囪繖浠嶇劧鍦ㄤ竴瀹氱殑紼嬪害涓婃彁楂樹簡瀛︿範鐨勯毦搴︺備絾鏄茍涓嶆槸鎵鏈変漢閮介渶瑕佸啓搴撳鍚э紝寰堝浜哄彧闇瑕佷細鐢ㄥ簱灝卞浜嗐傞氳繃涓鐐圭偣鐨勭壓鐗詫紝姝d氦鍖栧彲浠ュ厖鍒嗗彂鎸ョ▼搴忓憳鐨勬兂璞¤兘鍔涖傝繖瀵逛簬浠SL涓虹洰鐨勭殑璇█鏉ヨ鏄笉鍙垨緙虹殑銆? </span></div></li><li><div style="text-align: justify"><span style="font-size:10pt"><strong>鏍囧噯搴撴湰韜彲浠ヤ綔涓虹紪璇戝櫒鐨勬祴璇曠敤渚?/strong>銆備綘鍙渶瑕佸噯澶囪凍澶熷鐨勬祴璇曠敤渚嬫潵榪愯鏍囧噯搴擄紝閭d箞浣犲彧瑕佺敤C++錛堝亣璁句綘鐢–++鏉ュ疄鐜癟inymoe錛夋潵璺戜粬浠紝閭f墍鏈夌殑鏍囧噯搴撻兘浼氬緱鍒拌繍琛屻傝繍琛岀粨鏋滃鏋滃錛岄偅浣犲緙栬瘧鍣ㄧ殑瀹炵幇涔熷氨鏈変俊蹇冧簡銆備負浠涔堝憿錛屽洜涓烘爣鍑嗗簱澶ч噺鐨勪嬌鐢ㄤ簡璇█鐨勫悇縐嶅姛鑳斤紝鑰屼笖鏄棤鑺傛搷鐨勪嬌鐢ㄣ傚鏋滆繖鏍烽兘鑳借繃錛岄偅鏅氱殑紼嬪簭灝辨洿鑳借繃浜嗐? </span></div></li></ol><p>  </p><p>璇翠簡榪欎箞澶氾紝閭e埌搴曚粈涔堟槸灝忚妯$殑璇█鏍稿績鍛紵榪欏湪Tinymoe涓婃湁涓ょ偣浣撶幇銆? </p><p>  </p><p>絎竴鐐癸紝灝辨槸<strong>Tinymoe鐨勮娉曞厓绱犲皯</strong>銆備竴涓猅inymoe琛ㄨ揪寮忔棤闈炲氨鍙湁涓夌被錛氬嚱鏁拌皟鐢ㄣ佸瓧闈㈤噺鍜屽彉閲忋佹搷浣滅銆傚瓧闈㈤噺灝辨槸閭d簺鏁板瓧瀛楃涓蹭粈涔堢殑銆傚綋Tinymoe鐨勫嚱鏁扮殑鏌愪竴涓弬鏁版寚瀹氫負涓嶅畾涓暟鐨勬椂鍊欎綘榪樺緱鎻愪緵涓涓猼uple銆傚鎵橈紙鍦ㄨ繖閲屾槸鍑芥暟鎸囬拡鍜岄棴鍖呯殑緇熺О錛夊拰鏁扮粍铏界劧涔熸槸Tinymoe鐨勫師鐢熷姛鑳戒箣涓錛屼絾鏄浠栦滑鐨勬搷浣滈兘鏄氳繃鍑芥暟璋冪敤鏉ュ疄鐜扮殑錛屾病鏈夌壒孌婄殑璇硶銆? </p><p>  </p><p>綆鍗曞湴璁詫紝灝辨槸闄や簡涓嬮潰榪欎簺涓滆タ浠ュ浣犱笉浼氳鍒板埆鐨勭綾葷殑琛ㄨ揪寮忎簡錛? </p><p style="text-align: justify"><span style="font-size:10pt">1 </span></p><p style="text-align: justify"><span style="font-size:10pt">"text" </span></p><p style="text-align: justify"><span style="font-size:10pt">sum from 1 to 100 </span></p><p style="text-align: justify"><span style="font-size:10pt">sum of (1, 2, 3, 4, 5) </span></p><p style="text-align: justify"><span style="font-size:10pt">(1+2)*(3+4) </span></p><p style="text-align: justify"><span style="font-size:10pt">true </span></p><p>  </p><p>涓涓猅inymoe璇彞鐨勭綾誨氨鏇村皯浜嗭紝瑕佷箞鏄竴涓嚱鏁拌皟鐢紝瑕佷箞鏄痓lock錛岃涔堟槸榪炲湪涓璧風殑鍑犱釜block錛? </p><p style="text-align: justify"><span style="font-size:10pt">do something bad </span></p><p style="text-align: justify">  </p><p style="text-align: justify"><span style="font-size:10pt">repeat with x from 1 to 100 </span></p><p style="text-align: justify"><span style="font-size:10pt">    do something bad with x </span></p><p style="text-align: justify"><span style="font-size:10pt">end </span></p><p style="text-align: justify">  </p><p style="text-align: justify"><span style="font-size:10pt">try </span></p><p style="text-align: justify"><span style="font-size:10pt">    do something bad </span></p><p style="text-align: justify"><span style="font-size:10pt">catch exception </span></p><p style="text-align: justify"><span style="font-size:10pt">    do something worse </span></p><p style="text-align: justify"><span style="font-size:10pt">end </span></p><p>  </p><p>鏈変漢鍙兘浼氳錛岄偅repeat鍜宼ry-catch灝變笉鏄娉曞厓绱犲悧錛熻繖涓湡涓嶆槸錛屼粬浠槸鏍囧噯搴撳畾涔夊ソ鐨勫嚱鏁幫紝璺熶綘鑷繁澹版槑鐨勫嚱鏁版病鏈変換浣曠壒孌婄殑鍦版柟銆? </p><p>  </p><p>榪欓噷鍏跺疄榪樻湁涓涓湁鎰忔濈殑鍦版柟錛?repeat with x from 1 to 100"鐨剎鍏跺疄鏄驚鐜綋鐨勫弬鏁般俆inymoe鏄浣曠粰浣犺嚜瀹氫箟鐨刡lock寮媧炵殑鍛紵涓嶄粎濡傛錛孴inymoe鐨勫嚱鏁拌繕鍙互澹版槑"寮曠敤鍙傛暟"錛屼篃灝辨槸璇磋皟鐢ㄨ繖涓嚱鏁扮殑鏃跺欎綘鍙兘鎶婁竴涓彉閲忔斁榪涘幓錛屽嚱鏁伴噷闈㈠彲浠ヨ鍐欒繖涓彉閲忋傝繖浜涢兘鏄庝箞瀹炵幇鐨勫憿錛熷涓嬪幓灝辯煡閬撲簡錛屽晩鍝堝搱鍝堝搱銆? </p><p>  </p><p>Tinymoe鐨勫0鏄庝篃鍙湁涓ょ錛岀涓縐嶆槸鍑芥暟錛岀浜岀鏄鍙楓傚嚱鏁扮殑澹版槑鍙兘浼氱暐寰鏉備竴鐐癸紝涓嶈繃闄や簡鍑芥暟澶翠互澶栵紝鍏朵粬鐨勯兘鏄被浼奸厤緗竴鏍風殑涓滆タ錛屽嚑涔庨兘鏄敤鏉ュ畾涔?catch鍑芥暟鍦ㄤ嬌鐢ㄧ殑鏃跺欏繀欏繪槸榪炲湪try鍑芥暟鍚庨潰"鍟婏紝"break鍙兘鍦╮epeat閲岄潰鐢?鍟婏紝璇稿姝ょ被鐨勪俊鎭? </p><p>  </p><p>Tinymoe鐨勭鍙峰崄鍒嗙畝鍗曪紝璀璇翠綘瑕佸畾涔変竴騫村洓瀛g殑絎﹀彿錛屽彧闇瑕佽繖涔堝啓錛? </p><p style="text-align: justify"><span style="font-size:10pt">symbol spring </span></p><p style="text-align: justify"><span style="font-size:10pt">symbol summer </span></p><p style="text-align: justify"><span style="font-size:10pt">symbol autumn </span></p><p style="text-align: justify"><span style="font-size:10pt">symbol winter </span></p><p>  </p><p>symbol鏄竴涓?涓庝紬涓嶅悓鐨勫?錛屼篃灝辨槸璇翠綘鍦ㄤ袱涓猰odule涓嬮潰瀹氫箟鍚屽悕鐨剆ymbol浠栦滑涔熸槸涓嶄竴鏍風殑銆傛墍鏈塻ymbol涔嬮棿閮芥槸涓嶄竴鏍風殑錛屽彲浠ョ敤=鍜?lt;>鏉ュ垽鏂俿ymbol灝辨槸闈?涓嶄竴鏍?鏉ュ畾涔夊叾鑷韓鐨勩? </p><p>  </p><p>鑷充簬璇達紝閭d負浠涔堜笉鐢╡num鍛紵鍥犱負Tinymoe鏄姩鎬佺被鍨嬭璦錛宔num鐨勭被鍨嬫湰韜槸鏍規湰娌℃湁鐢ㄦ涔嬪湴鐨勶紝鎵浠ュ共鑴嗗氨璁捐鎴愪簡symbol銆? </p><p>  </p><p>絎簩鐐癸紝<strong>Tinymoe闄や簡continuation鍜宻elect-case浠ュ錛屾病鏈夊叾浠栧師鐢熺殑鎺у埗嫻佹敮鎸?/strong>銆? </p><p>  </p><p>榪欏熀鏈笂褰掑姛浜庡厛杈堝彂鏄巆ontinuation passing style transformation鐨勫姛鍔籌紝緇嗚妭鍦ㄤ互鍚庣殑緋誨垪閲岄潰浼氳銆傚績鎬ョ殑浜哄彲浠ュ厛鐪?<a >https://github.com/vczh/tinymoe/blob/master/Development/Library/StandardLibrary.txt</a> 銆傝繖涓枃浠舵殏鏃跺寘鍚簡Tinymoe鐨勬暣涓爣鍑嗗簱錛岄噷闈㈠畾涔変簡寰堝if-else/repeat/try-catch-finally絳夋帶鍒舵祦錛岀敋鑷寵繛coroutine閮藉彲浠ョ敤continuation銆乻elect-case鍜岄掑綊鏉ュ仛銆? </p><p>  </p><p>榪欎篃鏄?strong>灝忚妯$殑璇█鏍稿績+澶ц妯$殑鏍囧噯搴?/strong>鎵瑕佽〃杈劇殑鎰忔濄傚鏋滃彲浠ユ彁渚涗竴涓猣eature A錛岄氳繃浠栨潵瀹屾垚鍏朵粬蹇呰鐨刦eature B0, B1, B2…鐨勫悓鏃訛紝灝嗘潵璇翠笉瀹氳繕鏈変漢鍙互鍑轟簬鑷繁鐨勯渶姹傦紝寮鍙慏SL鐨勬椂鍊欏畾涔塮eature C錛岄偅涔堝彧鏈堿闇瑕佷繚鐣欎笅鏉ワ紝鎵鏈夌殑B鍜孋閮藉皢浣跨敤搴撶殑鏂規硶鏉ュ疄鐜般? </p><p>  </p><p>榪欎箞鍋氬茍涓嶆槸瀹屽叏鏈夌泭鏃犲鐨勶紝鍙槸鍧忓寰堝皬錛屽湪"Tinymoe鐨勫疄鐜伴毦鐐?閲岄潰浼氳緇嗚鏄庛?strong> </strong></p><p>  </p><p><strong>浜屻佹墿灞曞悗鐨勪笢瑗胯窡鍘熺敓鐨勪笢瑗垮瑙備竴鑷? </strong></p><p>  </p><p>榪欐槸寰堥噸瑕佺殑銆傚鏋滄墿灞曞嚭鏉ョ殑涓滆タ璺熷師鐢熺殑涓滆タ闀垮緱涓嶄竴鏍鳳紝鐢ㄨ搗鏉ュ氨瑙夊緱寰堝偦閫箋侸ava鐨剆tring涓嶈兘鐢?=鏉ュ垽鏂唴瀹瑰氨鏄繖鏍風殑涓涓緥瀛愩傝櫧鐒朵粬浠湁鐨勬槸鐞嗙敱璇佹槑==鐨勫弽鐩磋璁捐鏄鐨勨斺斾絾鏄弽鐩磋灝辨槸鍙嶇洿瑙夛紝灝辨槸涓涓ぇ鍧戙? </p><p>  </p><p>榪欑渚嬪瓙榪樻湁寰堝錛岃濡傝go鐨勬暟緇勫拰琛ㄧ殑綾誨瀷鍟︼紝go鏈韓濡傛灉涓嶈鏁扮粍鍜岃〃鐨勮瘽錛屾槸鍐欎笉鍑洪暱寰楄窡鍘熺敓鏁扮粍鍜岃〃涓鏍風殑鏁扮粍鍜岃〃鐨勩傚叾瀹炶繖涔熶笉鏄竴涓ぇ闂錛岄棶棰樻槸go緇欐暟緇勫拰琛ㄧ殑鏍峰瓙鎼炵壒孌婂寲錛岃繕鏈夐偅涓弽鐩磋鐨剆lice鐨勮祴鍊奸棶棰橈紙浼氬悎娉曟孩鍑猴紒錛夛紝綾諱技鐨勪笢瑗垮疄鍦ㄦ槸澶浜嗐備竴涓笢瑗跨壒渚嬪お澶氾紝鍧戝氨鏃犳硶閬垮厤銆傛墍浠ュ叾瀹炲湪鎴戠湅鏉ワ紝go榪樹笉濡傜粰C璇█鍔犱笂erlang鐨刟ctor鍔熻兘浜嗕簨銆? </p><p>  </p><p>鍙嶈孋++鍦ㄨ繖浠朵簨鎯呬笂灝卞仛寰楀緢濂姐傚鏋滀綘瀵笴++涓嶇啛鎮夌殑璇濓紝鏈夋椂鍊欐牴鏈垎涓嶆竻浠涔堟槸緙栬瘧鍣ㄥ共鐨勶紝浠涔堟槸鏍囧噯搴撳共鐨勩傝濡傝static_cast鍜宒ynamic_cast闀垮緱鍍忎竴涓ā鏉垮嚱鏁幫紝鍥犳boost灝卞彲浠ョ敤綾諱技鐨勬墜娉曞姞鍏exical_cast鍜岄拡瀵箂hared_ptr鐨剆tatic_pointer_cast鍜宒ynamic_pointer_cast錛屾暣涓爣鍑嗗簱鍜岃璦鏈韓嫻戠劧涓浣撱傝繖鏍峰瓙鍋氱殑濂藉鏄紝褰撲綘鍦ㄥ煿鍏誨璇█鏈韓鐨勭洿瑙夌殑鏃跺欙紝浣犱篃鍦ㄥ煿鍏誨鏍囧噯搴撶殑鐩磋錛屽煿鍏葷洿瑙夎繖浠朵簨鎯呬綘涓嶇敤鍋氫袱嬈°備綘瀵逛竴涓笢瑗跨殑鐩磋瓚婂噯錛屽涔犳柊涓滆タ鐨勯熷害灝辮秺蹇傛墍浠++鐨勮璁″垰濂藉彲浠ヨ浣犲湪鐔繃絎竴涓樁孌電殑瀛︿範涔嬪悗錛屽悗闈㈤兘瑙夊緱鏃犳瘮鐨勮交鏉俱? </p><p>  </p><p>涓嶈繃鍏蜂綋鍒癟inymoe錛屽洜涓篢inymoe鏈韓鐨勮娉曞厓绱犲お灝戜簡錛屾墍浠ヨ繖涓仛娉曞湪Tinymoe韜笂浣撶幇寰椾笉鏄庢樉銆? </p><p style="text-align: justify"><h2>Tinymoe鐨勫疄鐜伴毦鐐? </h2></p><p>棣栧厛錛?strong>璇硶鍒嗘瀽闇瑕佸Tinymoe紼嬪簭澶勭悊涓夐亶</strong>銆俆inymoe瀵逛簬璇彞璁捐浣垮緱瀵逛竴涓猅inymoe紼嬪簭鍋氳娉曞垎鏋愪笉鏄偅涔堢洿鎺ワ紙铏界劧姣擟++浠涔堢殑榪樻槸瀹規槗澶氫簡錛夈備婦涓緥瀛愶細 </p><p style="text-align: justify"><span style="font-size:10pt">module hello world </span></p><p style="text-align: justify">  </p><p style="text-align: justify"><span style="font-size:10pt">phrase sum from (lower bound) to (upper bound) </span></p><p style="text-align: justify"><span style="font-size:10pt">… </span></p><p style="text-align: justify"><span style="font-size:10pt">end </span></p><p style="text-align: justify">  </p><p style="text-align: justify"><span style="font-size:10pt">sentence print (message) </span></p><p style="text-align: justify"><span style="font-size:10pt">… </span></p><p style="text-align: justify"><span style="font-size:10pt">end </span></p><p style="text-align: justify">  </p><p style="text-align: justify"><span style="font-size:10pt">phrase main </span></p><p style="text-align: justify"><span style="font-size:10pt">    print sum from 1 to 100 </span></p><p style="text-align: justify"><span style="font-size:10pt">end </span></p><p>  </p><p>絎竴閬嶅垎鏋愭槸璇嶆硶鍒嗘瀽錛岃繖涓椂鍊欏緱鎶婃瘡涓涓猼oken鐨勮鍙瘋浣忋傜浜岄亶鍒嗘瀽鏄笉甯︽涔夌殑璇硶鍒嗘瀽錛岀洰鏍囨槸鎶婃墍鏈夌殑鍑芥暟澶存娊鍙栧嚭鏉ワ紝鐒跺悗緇勬垚涓涓叏灞絎﹀彿琛ㄣ傜涓夐亶鍒嗘瀽灝辨槸瀵瑰嚱鏁頒綋閲岄潰鐨勮鍙ュ仛甯︽涔夌殑璇硶鍒嗘瀽浜嗐傚洜涓篢inymoe鍏佽浣犲畾涔夊彉閲忥紝鎵浠ョ鍙瘋〃鑲畾鏄竴杈瑰垎鏋愪竴杈逛慨鏀圭殑銆備簬鏄浜?print sum from 1 to 100"榪欎竴鍙ワ紝濡傛灉浣犳病鏈夊彂鐜?phrase sum from (lower bound) to (upper bound)"鍜?sentence print (message)"錛岄偅鏍規湰鏃犱粠涓嬫墜銆? </p><p>  </p><p>榪樻湁鍙︿竴涓緥瀛愶細 </p><p style="text-align: justify"><span style="font-size:10pt">module exception handling </span></p><p style="text-align: justify">  </p><p style="text-align: justify"><span style="font-size:10pt">… </span></p><p style="text-align: justify">  </p><p style="text-align: justify"><span style="font-size:10pt">phrase main </span></p><p style="text-align: justify"><span style="font-size:10pt">    try </span></p><p style="text-align: justify"><span style="font-size:10pt">        do something bad </span></p><p style="text-align: justify"><span style="font-size:10pt">    catch </span></p><p style="text-align: justify"><span style="font-size:10pt">        print "bad thing happened" </span></p><p style="text-align: justify"><span style="font-size:10pt">    end </span></p><p style="text-align: justify"><span style="font-size:10pt">end </span></p><p>  </p><p>褰撹娉曞垎鏋愬仛鍒?try"鐨勬椂鍊欙紝鍥犱負鍙戠幇瀛樺湪<strong>try鍑芥暟鐨勫畾涔?/strong>錛屾墍浠inymoe鐭ラ亾鎺ヤ笅鏉ョ殑"do something bad"灞炰簬璋冪敤try榪欎釜鍧楀嚱鏁版墍闇鎻愪緵鐨勪唬鐮佸潡閲岄潰鐨勪唬鐮併傛帴涓嬫潵鏄?catch"錛孴inymoe鎬庝箞鐭ラ亾catch鏄帴鍦╰ry鍚庨潰錛岃屼笉鏄斁鍦╰ry閲岄潰鐨勫憿錛熻繖浠嶇劧鏄敱浜?strong>catch鍑芥暟鐨勫畾涔?/strong>鍛婅瘔鎴戜滑鐨勩傚叧浜庤繖鏂歸潰鐨勮娉曠煡璇嗗彲浠?a >鐐瑰嚮榪欓噷鏌ョ湅</a>銆? </p><p>  </p><p>姝e洜涓哄姝わ紝鎴戜滑闇瑕侀鍏堢煡閬撳嚱鏁扮殑瀹氫箟錛岀劧鍚庢墠鑳藉垎鏋愬嚱鏁頒綋閲岄潰鐨勪唬鐮併傝櫧鐒惰繖鍦ㄤ竴瀹氱▼搴︿笂閫犳垚浜員inymoe鐨勮娉曞垎鏋愬鏉傚害鐨勬彁鍗囷紝浣嗘槸鍏跺鏉傚害鏈韓騫朵笉楂樸傛瘮C++綆鍗曞氨涓嶈浜嗭紝灝辯畻鏄疌銆丆#鍜孞ava錛岀敱浜庡叾璇硶鍏冪礌澶錛屽鑷?strong>涓嶉渶瑕佸嬈″垎鏋?/strong>鎵闄嶄綆鐨勫鏉傚害琚畬鍏ㄧ殑鎶墊秷錛岀粨鏋滆窡瀹炵幇Tinymoe鐨勮娉曞垎鏋愬櫒鐨勯毦搴︿笉鐩鎬笂涓嬨? </p><p>  </p><p>鍏舵錛?strong>CPS鍙樻崲鍚庣殑浠g爜闇瑕佺壒孌婂鐞嗭紝鍚﹀垯鐩存帴鎵ц瀹規槗瀵艱嚧call stack縐瘡鐨勬病鐢ㄧ殑涓滆タ榪囧</strong>銆傚洜涓篢inymoe鍙互鑷畾涔夋搷浣滅錛屾墍浠ユ搷浣滅璺烠++涓鏍峰湪緙栬瘧鐨勬椂鍊欒杞崲鎴愪簡鍑芥暟璋冪敤銆傛瘡涓涓嚱鏁拌皟鐢ㄩ兘鏄細琚獵PS鍙樻崲鐨勩傚敖綆℃瘡涓琛岀殑鍑芥暟璋冪敤嬈℃暟涓嶅錛屼絾鏄鏋滀綘鐨勭▼搴忔補寰幆錛?strong>寰幆鏄氳繃閫掑綊鏉ユ弿榪?/strong>錛堣屼笉鏄疄鐜幫紝鐢變簬CPS鍙樻崲鍚嶵inymoe鍋氫簡浼樺寲錛屾墍浠ヤ笉瀛樺湪瀹為檯涓婄殑閫掑綊錛夌殑錛屽鏋滅洿鎺ユ墽琛孋PS鍙樻崲鍚庣殑浠g爜錛岀畻涓涓?鍔犲埌1000閮戒細瀵艱嚧stack overflow銆傚彲瑙佸叾call stack閲岄潰鍫嗙Н鐨刢losure鏁伴噺涔嬪法澶с? </p><p>  </p><p>鎴戝湪鍋歍inymoe浠g爜鐢熸垚鐨勫疄楠岀殑鏃跺欙紝涓轟簡綆鍗曟垜鍦ㄥ崟鍏冩祴璇曢噷闈㈢洿鎺ヤ駭鐢熶簡瀵瑰簲鐨凜#浠g爜銆備竴寮濮嬫病鏈夊鐞咰PS鑰岀洿鎺ヨ皟鐢紝紼嬪簭涓嶄粎鎱紝鑰屼笖瀹規槗stack overflow銆備絾鏄垜浠煡閬擄紙鍏跺疄浣犱滑浠ュ悗鎵嶄細鐭ラ亾錛夛紝CPS鍙樻崲鍚庣殑浠g爜閲岄潰鍑犱箮鎵鏈夌殑call stack欏歸兘鏄氮璐圭殑錛屽洜姝ゆ垜鎶婃暣涓湪鐢熸垚C#浠g爜鐨勬椂鍊欎慨鏀規垚錛屽鏋滈渶瑕佽皟鐢╟ontinuation錛屽氨榪斿洖<strong>璋冪敤continuation鐨勮鍙ョ粍鎴愮殑lambda琛ㄨ揪寮?/strong>錛屽湪鏈澶栧眰鐢ㄤ竴涓驚鐜幓椹卞姩浠栫洿鍒拌繑鍥瀗ull涓烘銆傝繖鏍峰仛浜嗕箣鍚庯紝灝辯畻Tinymoe鐨勪唬鐮佹湁閫掑綊錛宑all stack閲岄潰涔熶笉浼氬洜涓洪掑綊鑰岀Н绱痗all stack item浜嗐備簬鏄敓鎴愮殑C#浠g爜鎵ц椋炲揩錛岃屼笖鏃犺浣犳庝箞閫掑綊涔熸案榪滀笉浼氶犳垚stack overflow浜嗐傝繖涓編濡欑殑鐗規у嚑涔庢墍鏈夎璦閮藉仛涓嶅埌錛屽晩鍝堝搱鍝堝搱鍝堛? </p><p>  </p><p>褰撶劧榪欎篃鏄湁浠d環鐨勶紝鍥犱負鏈川涓婃垜鍙槸鎶婁繚瀛樺湪stack涓婄殑context杞Щ鍒癶eap涓娿備笉榪囧浜忎簡.net 4.0鐨勫己澶х殑background GC錛岃繖鏍峰仛涓濇娌℃湁澶氫綑鐨勬ц兘涓婄殑鎹熻椼傚綋鐒惰繖涔熸剰鍛崇潃錛屼竴涓珮鎬ц兘鐨凾inymoe铏氭嫙鏈猴紝闇瑕佷竴涓墰閫肩殑鍨冨溇鏀墮泦鍣ㄤ綔涓洪潬灞便俢ontext浜х敓鐨刢losure鍦ㄥ嚱鏁頒綋鐪熺殑琚墽琛屽畬涔嬪悗灝變細琚緢蹇湴鏀墮泦錛屾墍浠PS鍔犱笂榪欑鍋氭硶騫朵笉浼氬GC浜х敓棰濆鐨勫帇鍔涳紝鎵鏈夌殑鍘嬪姏浠嶇劧鏉ユ簮浜庝綘鑷繁鎵鍒涘緩鐨勬暟鎹粨鏋勩? </p><p>  </p><p>絎笁錛?strong>Tinymoe闇瑕佸姩鎬佺被鍨嬭璦鐨勭被鍨嬫帹瀵?/strong>銆傚綋鐒朵綘涓嶈繖涔堝仛鑰屾妸Tinymoe鐨勭▼搴忓綋JavaScript閭f牱鐨勭▼搴忓鐞嗕篃娌℃湁闂銆備絾鏄垜浠煡閬擄紝姝f槸鍥犱負V8瀵笿avaScript鐨勪唬鐮佽繘琛屼簡綾誨瀷鎺ㄥ錛屾墠浜х敓浜嗛偅涔堜紭寮傜殑鎬ц兘銆傚洜姝よ繖綆楁槸涓涓紭鍖栦笂鐨勬帾鏂姐? </p><p>  </p><p>鏈鍚庯紝<strong>Tinymoe榪橀渶瑕佽法榪囩▼鍒嗘瀽鍜屽紼嬪簭鐨勬帶鍒舵祦鐨勫寲綆</strong>錛堣濡俢ontinuation杞姸鎬佹満絳夛級銆傜洰鍓嶅叿浣撴庝箞鍋氭垜榪樺湪瀛︿範褰撲腑銆備笉榪囨垜浠兂錛屾棦鐒秗epeat鍑芥暟鏄氳繃閫掑綊鏉ユ弿榪扮殑錛岄偅鎴戜滑鑳戒笉鑳介氳繃瀵規墍鏈変唬鐮佽繘琛宨nter-procedural analyzing錛屼粠鑰屽彂鐜拌濡? </p><p style="text-align: justify"><span style="font-size:10pt">repeat 3 times </span></p><p style="text-align: justify"><span style="font-size:10pt">    do something good </span></p><p style="text-align: justify"><span style="font-size:10pt">end </span></p><p>灝辨槸涓涓驚鐜紝浠庤岀敓鎴愮敤鐪熸鐨勫驚鐜寚浠わ紙璀璇磄oto錛夊憿錛熻繖涓棶棰樻槸涓緢鏈夋剰鎬濈殑闂錛屾垜瑙夊緱鎴戝鏋滃彲浠ラ氳繃瀛︿範闈欐佸垎鏋愪粠鑰岃В鍐沖畠錛屼笉榪涙垜鐨勮兘鍔涗細寰楀埌鎻愬崌錛屾垜瀵逛綘浠殑縐戞櫘涔熶細鍋氬緱鏇村ソ銆? </p><p style="text-align: justify"><h2>鍚庤 </h2></p><p>铏界劧榪樹笉鍒頒簲鍗冨瓧錛屼絾鏄昏寰楀啓浜嗗ソ澶氱殑鏍峰瓙銆傛諱箣鎴戝笇鏈涜鑰呭湪鐪嬪畬銆婇浂銆嬪拰銆婁竴銆嬩箣鍚庯紝瀵規帴涓嬫潵闇瑕佸涔犵殑涓滆タ鏈変竴涓緝涓烘竻鏅扮殑璁よ瘑銆?/p> <img src ="http://m.shnenglu.com/vczh/aggbug/205702.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2014-02-11 12:53 <a href="http://m.shnenglu.com/vczh/archive/2014/02/11/205702.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>璺焩czh鐪嬪疄渚嬪緙栬瘧鍘熺悊鈥斺旈浂錛氬簭璦http://m.shnenglu.com/vczh/archive/2014/01/19/205468.html闄堟鐎?vczh)闄堟鐎?vczh)Sat, 18 Jan 2014 17:21:00 GMThttp://m.shnenglu.com/vczh/archive/2014/01/19/205468.htmlhttp://m.shnenglu.com/vczh/comments/205468.htmlhttp://m.shnenglu.com/vczh/archive/2014/01/19/205468.html#Feedback4http://m.shnenglu.com/vczh/comments/commentRss/205468.htmlhttp://m.shnenglu.com/vczh/services/trackbacks/205468.html鍦ㄣ婂浣曡璁′竴闂ㄨ璦銆嬮噷闈紝鎴戣浜嗕竴浜涜璦鏂歸潰鐨勪笢瑗匡紝榪樻湁鐥涘揩鐨勫柗浜嗕竴浜沊X綺変粈涔堢殑銆備笉榪囧崟綰榪欎釜涔熸槸寰堟棤鑱婄殑錛屾墍浠ユ垜寮浜嗚繖涓婅窡vczh鐪嬪疄渚嬪緙栬瘧鍘熺悊銆嬬郴鍒楋紝鎰忓湪縐戞櫘涓浜涚紪璇戝師鐞嗙殑鐭ヨ瘑錛屽敖閲忚澶у鍙互鍦ㄥ垱閫犺璦涔嬪悗錛岃嚜宸卞啓涓涓師鍨嬨傚湪榪欓噷鎴戞嬁鎴戝垱閫犵殑涓闂ㄥ緢鏈夎叮鐨勮璦 https://github.com/vczh/tinymoe/ 浣滀負瀹炰緥銆?

 

鍟嗕笟緙栬瘧鍣ㄥ鍔熻兘鍜岃川閲忕殑瑕佹眰閮芥槸寰堥珮鐨勶紝閲岄潰澶ч噺鐨勪笢瑗垮叾瀹為兘璺熺紪璇戝師鐞嗘病鍏崇郴銆備竴涓吀鍨嬬殑緙栬瘧鍘熺悊鐨勫師鍨嬫湁浠涔堢壒寰佸憿錛?

  1. 鎬ц兘浣?
  2. 閿欒淇℃伅闅劇湅
  3. 娌℃湁媯鏌ユ墍鏈夋儏鍐靛氨鐢熸垚浠g爜
  4. 浼樺寲鍋氬緱鐑?
  5. 鍑犱箮娌℃湁緙栬瘧閫夐」

 

絳夌瓑銆俆inymoe灝辨弧瓚充簡涓婇潰鐨?縐嶆儏鍐碉紝鍥犱負鎴戠殑鐩爣涔熷彧鏄兂鍋氫竴涓師鍨嬶紝鍚戝ぇ瀹朵粙緇嶇紪璇戝師鐞嗙殑鍩虹鐭ヨ瘑銆傚綋鐒訛紝鎴戝璇硶鐨勮璁¤繕鏄敖閲忛潬榪戝伐涓氳川閲忕殑錛屽彧鏄疄鐜版病鏈夎姳澶蹇冩濄?

 

涓轟粈涔堟垜瑕佺敤Tinymoe鏉ヤ綔涓哄疄渚嬪憿錛熷洜涓篢inymoe鏄皯鏈夌殑涓縐嶇敤璧鋒潵綆鍗曪紝鑰屼笖搴撳彲浠ユ湁澶氬鏉傚啓澶氬鏉傜殑璇█錛屽氨璺烠++涓鏍楓侰++11棰濇爣鍑嗗簱鍦ㄤ竴璧風敤綆鐩存槸鎰夊揩鍟婏紝Tinymoe鐨勪唬鐮佷篃鏄繖涔堝啓鐨勩備絾鏄繖騫朵笉濡ㄧ浣犲彲浠ュ湪鍐機++搴撶殑鏃跺欏彂鎸ヤ綘鐨勬兂璞″姏銆俆inymoe涔熸槸涓鏍風殑銆備負浠涔堝憿錛屾垜鏉ヤ婦涓緥瀛愩?

 

Hello, world!

Tinymoe鐨刪ello world紼嬪簭鏄緢綆鍗曠殑錛?

 

module hello world

using standard library

 

sentence print (message)

    redirect to "printf"

end

 

phrase main

    print "Hello, world!"

end

 

module鎸囩殑鏄ā鍧楃殑鍚嶅瓧錛屾櫘閫氱殑紼嬪簭涔熸槸涓涓ā鍧椼倁sing鎸囩殑鏄綘瑕佸紩鐢ㄧ殑妯″潡鈥斺攕tandard library灝辨槸Tinymoe鐨凷TL浜嗏斺斿綋鐒惰繖涓▼搴忓茍娌℃湁鐢ㄥ埌浠諱綍standard library鐨勪笢瑗褲傝鍒拌繖閲屽ぇ瀹跺彲鑳芥剰璇嗗埌浜嗭紝Tinymoe鐨勫悕瀛楀彲浠ユ槸涓嶅畾闀跨殑token緇勬垚鐨勶紒娌¢敊錛屽悗闈㈠ぇ瀹朵細鎱㈡參鎰忚瘑鍒拌繖縐嶅仛娉曟湁澶氫箞鐨勫己澶с?

 

鍚庨潰鏄痯rint鍑芥暟鍜宮ain鍑芥暟銆俆inymoe鏄弗鏍煎尯鍒嗚鍙ュ拰琛ㄨ揪寮忕殑錛屽彧鏈塻entence鍜宐lock寮澶寸殑鍑芥暟鎵嶈兘浣滀負璇彞錛岃屼笖鍚屾椂鍙湁phrase寮澶寸殑鍑芥暟鎵嶈兘浣滀負琛ㄨ揪寮忋傛墍浠ヤ笅闈㈢殑紼嬪簭鏄笉鍚堟硶鐨勶細

 

phrase main

    (print "Hello, world!") + 1

end

 

鍘熷洜灝辨槸錛宲rint鏄痵entence錛屼笉鑳戒綔涓鴻〃杈懼紡浣跨敤錛屽洜姝や粬涓嶈兘琚?1銆?

 

Tinymoe鐨勫嚱鏁板弬鏁伴兘琚啓鍦ㄦ嫭鍙烽噷闈紝涓涓弬鏁伴渶瑕佷竴涓嫭鍙楓傚埌浜嗚繖閲屽ぇ瀹跺彲鑳戒細瑙夊緱寰堝鎬紝涓嶈繃寰堝揩灝變細鏈夎В絳斾簡銆備負浠涔堣榪欎箞鍋氾紝涓嬩竴涓緥瀛愬氨浼氬憡璇夋垜浠?

 

print鍑芥暟鐢ㄧ殑redirect to鏄疶inymoe澹版槑FFI錛團oreign Function Interface錛夌殑鏂規硶錛屼篃灝辨槸璇達紝褰撲綘榪愯浜唒rint錛屼粬灝變細鍘籬ost閲岄潰鎵句竴涓彨鍋歱rintf鐨勫嚱鏁版潵榪愯銆備笉榪囧ぇ瀹朵笉瑕佽浼氾紝Tinymoe騫舵病鏈夎璁捐鎴愬彲浠ョ洿鎺ヨ皟鐢–鍑芥暟錛屾墍浠ヨ繖涓悕瀛楀叾瀹炴槸闅忎究鍐欑殑錛屽彧瑕乭ost鎻愪緵浜嗕竴涓彨鍋歱rintf鐨勫嚱鏁板畬鎴恜rintf璇ュ仛鐨勪簨鎯呭氨琛屼簡銆俶ain鍑芥暟灝變笉鐢ㄨВ閲婁簡錛屽緢鐩寸櫧銆?

1鍔犲埌100絳変簬5050

榪欎釜渚嬪瓙鍙互鍦═inymoe鐨勪富欏碉紙https://github.com/vczh/tinymoe/錛変笂闈㈢湅鍒幫細

 

module hello world

using standard library

 

sentence print (message)

redirect to "printf"

end

 

phrase sum from (start) to (end)

set the result to 0

repeat with the current number from start to end

add the current number to the result

end

end

 

phrase main

print "1+ ... +100 = " & sum from 1 to 100

end

 

涓轟粈涔堝悕瀛楀彲浠ユ槸澶氫釜token錛熶負浠涔堟瘡涓涓弬鏁伴兘瑕佷竴涓嫭鍙鳳紵鐪嬪姞綺楃殑閮ㄥ垎灝辯煡閬撲簡錛佹鏄洜涓篢inymoe鎯寵姣忎竴琛屼唬鐮侀兘鍙互琚康鍑烘潵錛屾墍浠ユ墠榪欎箞璁捐鐨勩傚綋鐒訛紝澶у鑲畾閮界煡閬撴庝箞綆梥tart + (start+1) + … + (end-1) + end浜嗭紝鎵浠ュ簲璇ュ緢瀹規槗灝卞彲浠ョ湅鎳傝繖涓嚱鏁伴噷闈㈢殑浠g爜鍏蜂綋鏄粈涔堟剰鎬濄?

 

鍦ㄨ繖閲屽彲浠ョ◢寰鍋氫竴涓嬭В閲娿倀he result鏄竴涓瀹氫箟鐨勫彉閲忥紝浠h〃鍑芥暟鐨勮繑鍥炲箋傚彧瑕佷綘寰the result閲岄潰鍐欎笢瑗匡紝鍙鍑芥暟涓緇撴潫錛屼粬灝卞彉鎴愬嚱鏁扮殑榪斿洖鍊間簡銆俆inymoe鐨勬嫭鍙鋒病鏈変粈涔堢壒孌婃剰鎬濓紝灝辨槸鏀瑰彉浼樺厛綰э紝鎵浠ラ偅涓鍙ュ驚鐜垯鍙互閫氳繃娣誨姞鎷彿鐨勬柟娉曞啓鎴愯繖鏍鳳細

 

repeat with (the current number) from (start) to (end)

 

澶у鍙兘浼氭兂錛宺epeat with鏄笉鏄叧閿瓧錛熷綋鐒朵笉鏄紒repeat with鏄痵tandard library閲岄潰瀹氫箟鐨勪竴涓猙lock鍑芥暟銆傚ぇ瀹剁煡閬揵lock鍑芥暟鐨勬剰鎬濅簡鍚э紝灝辨槸榪欎釜鍑芥暟鍙互甯︿竴涓猙lock銆俠lock鏈変竴浜涚壒鎬у彲浠ヨ浣犲啓鍑虹被浼紅ry-catch閭f牱鐨勫嚑涓猙lock榪炲湪涓璧風殑澶lock錛岀壒鍒傚悎鍐欏簱銆?

 

鍒頒簡榪欓噷澶у蹇冧腑鍙兘浼氭湁鐤戦棶錛屽驚鐜負浠涔堝彲浠ュ仛鎴愬簱鍛紵榪樻湁鏇村姞浠や漢闇囨儕鐨勬槸錛宐reak鍜宑ontinue涔熶笉鏄叧閿瓧錛屾槸sentence錛佸洜涓簉epeat with鏄湁浠g爜鐨勶細

 

category

    start REPEAT

    closable

block (sentence deal with (item)) repeat with (argument item) from (lower bound) to (upper bound)

    set the current number to lower bound

    repeat while the current number <= upper bound

        deal with the current number

        add 1 to the current number

    end

end

 

鍓嶉潰鐨刢ategory鏄敤鏉ュ畾涔変竴浜沚lock鐨勯『搴忓拰鍖呭洿緇撴瀯浠涔堢殑銆俽epeat with鏄睘浜嶳EPEAT鐨勶紝鑰宐reak鍜宑ontinue澹版槑浜嗚嚜宸卞彧鑳界洿鎺ユ垨鑰呴棿鎺ユ柟鍦≧EPEAT閲岄潰錛屽洜姝ゅ鏋滀綘鍦ㄤ竴涓病鏈夊驚鐜殑鍦版柟璋冪敤break鎴栬卌ontinue錛岀紪璇戝櫒灝變細鎶ラ敊浜嗐傝繖鏄竴涓姳杈瑰姛鑳斤紝鐢ㄦ潵闃叉鎵嬭鐨勩?

 

澶у鍙兘浼氭敞鎰忓埌涓涓柊涓滆タ錛?argument item)銆俛rgument鐨勬剰鎬濇寚鐨勬槸錛屽悗闈㈢殑item鏄痓lock閲岄潰鐨勪唬鐮佺殑涓涓弬鏁幫紝瀵逛簬repeat with鍑芥暟鏈韓浠栦笉鏄竴涓弬鏁般傝繖灝遍氳繃涓涓緢鑷劧鐨勬柟娉曠粰block娣誨姞鍙傛暟浜嗐傚鏋滀綘鐢╮uby鐨勮瘽灝卞緱鍐欐垚榪欎釜鎮插偓鐨勬牱瀛愶細

 

repeat_with(1, 10) do |item|

    xxxx

end

 

鑰岀敤C++鍐欒搗鏉ュ氨鏇存偛鍌簡錛?

 

repeat_with(1, 10, [](int item)

{

    xxxx

});

 

block鐨勭涓涓弬鏁皊entence deal with (item)灝辨槸涓涓紩鐢ㄤ簡block涓棿鐨勪唬鐮佺殑濮旀墭銆傛墍浠ヤ綘浼氱湅鍒頒唬鐮侀噷闈細璋冪敤瀹冦?

 

濂戒簡錛岄偅repeat while鎬繪槸鍏抽敭瀛椾簡鍚р斺斾笉鏄紒鍚庨潰澶у榪樹細鐭ラ亾錛屽氨榪?

 

if xxx

    yyy

else if zzz

    www

else if aaa

    bbb

else

    ccc

end

 

涔熷彧鏄綘璋冪敤浜唅f銆乪lse if鍜宔lse鐨勪竴緋誨垪鍑芥暟鐒跺悗璁╀粬浠覆璧鋒潵鑰屽凡銆?

 

閭inymoe鍒板簳鎻愪緵浜嗕粈涔堝熀紜璁炬柦鍛紵鍏跺疄鍙湁select-case鍜岄掑綊銆傜敤榪欎袱涓笢瑗匡紝鍔犱笂鍐呯疆鐨勬暟緇勶紝灝卞浘鐏靛畬澶囦簡銆傚浘鐏靛畬澶囧氨鏄繖涔堝鏄撳晩銆?

 

澶氶噸鍒嗘淳錛圡ultiple Dispatch錛?

璁插埌榪欓噷錛屾垜涓嶅緱涓嶈錛孴inymoe涔熷彲浠ュ啓綾伙紝涔熷彲浠ョ戶鎵匡紝涓嶈繃浠栬窡浼犵粺鐨勮璦涓嶄竴鏍風殑錛岀被鏄病鏈夋瀯閫犲嚱鏁般佹瀽鏋勫嚱鏁板拰鍏朵粬鎴愬憳鍑芥暟鐨勩俆inymoe鎵鏈夌殑鍑芥暟閮芥槸鍏ㄥ眬鍑芥暟錛屼絾鏄綘鍙互浣跨敤澶氶噸鍒嗘淳鏉?鎸戦?綾誨瀷銆傝繖灝遍渶瑕佺涓変釜渚嬪瓙浜嗭紙涔熷彲浠ュ湪涓婚〉涓婃壘鍒幫級錛?

 

module geometry

using standard library

 

phrase square root of (number)

    redirect to "Sqrt"

end

 

sentence print (message)

    redirect to "Print"

end

 

type rectangle

    width

    height

end

 

type triangle

    a

    b

    c

end

 

type circle

    radius

end

 

phrase area of (shape)

    raise "This is not a shape."

end

 

phrase area of (shape : rectangle)

    set the result to field width of shape * field height of shape

end

 

phrase area of (shape : triangle)

    set a to field a of shape

    set b to field b of shape

    set c to field c of shape

    set p to (a + b + c) / 2

    set the result to square root of (p * (p - a) * (p - b) * (p - c))

end

 

phrase area of (shape : circle)

    set r to field radius of shape

    set the result to r * r * 3.14

end

 

phrase (a) and (b) are the same shape

    set the result to false

end

 

phrase (a : rectangle) and (b : rectangle) are the same shape

    set the result to true

end

 

phrase (a : triangle) and (b : triangle) are the same shape

    set the result to true

end

 

phrase (a : circle) and (b : circle) are the same shape

    set the result to true

end

 

phrase main

    set shape one to new triangle of (2, 3, 4)

    set shape two to new rectangle of (1, 2)

    if shape one and shape two are the same shape

        print "This world is mad!"

    else

        print "Triangle and rectangle are not the same shape!"

    end

end

 

榪欎釜渚嬪瓙紼嶅井闀夸簡涓鐐圭偣錛屼笉榪囧ぇ瀹跺彲浠ュ緢娓呮鐨勭湅鍒版垜鏄浣曞畾涔変竴涓被鍨嬨佸垱寤轟粬浠拰璁塊棶鎴愬憳鍙橀噺鐨勩俛rea of鍑芥暟鍙互璁$畻涓涓鉤闈㈠嚑浣曞浘褰㈢殑闈㈢Н錛岃屼笖浼氭牴鎹綘浼犵粰浠栫殑涓嶅悓鐨勫嚑浣曞浘褰㈣屼嬌鐢ㄤ笉鍚岀殑鍏紡銆傚綋鎵鏈夌殑綾誨瀷鍒ゆ柇閮藉け璐ョ殑鏃跺欙紝灝變細鎺夎繘閭d釜娌℃湁浠諱綍綾誨瀷澹版槑鐨勫嚱鏁幫紝浠庤屽紩鍙戜竴鍦恒傚棷錛屽叾瀹瀟ry/catch/finally/raise閮芥槸鍑芥暟鏉ョ殑鈥斺擳inymoe瀵規帶鍒舵祦鐨勬帶鍒跺氨鏄姝ゅ己澶э紝鍟婂搱鍝堝搱鍝堛傚氨榪瀝eturn閮藉彲浠ヨ嚜宸卞仛錛屾墍浠inymoe涔熶笉鎻愪緵棰勫畾涔夌殑return銆?

 

閭hrase (a) and (b) are the same shape鎬庝箞鍔炲憿錛熸病闂錛孴inymoe鍙互鍚屾椂鎸囧畾澶氫釜鍙傛暟鐨勭被鍨嬨傝屼笖Tinymoe鐨勫疄鐜板叿鏈夎窡C++铏氬嚱鏁頒竴鏍風殑鎬ц川鈥斺旀棤璁轟綘鏈夊灝戜釜鍙傛暟鏍囪浜嗙被鍨嬶紝鎴戦兘鍙互O(n)璺寵漿鍒頒竴涓綘闇瑕佺殑鍑芥暟銆傝繖閲岀殑n鎸囩殑鏄爣璁頒簡綾誨瀷鐨勫弬鏁扮殑涓暟錛岃屼笉鏄嚱鏁板疄渚嬬殑涓暟錛屾墍浠ヨ窡C++鐨勬儏鍐墊槸涓鏍風殑鈥斺斿洜涓簍his鍙兘鏈変竴涓紝鎵浠ュ氨鏄疧(1)銆傝嚦浜嶵inymoe鍒板簳鏄庝箞瀹炵幇鐨勶紝鍙渶瑕佺湅銆婂浣曡璁′竴闂ㄨ璦銆嬬浜旂瘒錛?a href="http://m.shnenglu.com/vczh/archive/2013/05/25/200580.html">http://m.shnenglu.com/vczh/archive/2013/05/25/200580.html錛夊氨鏈夌瓟妗堜簡銆?

Continuation Passing Style

涓轟粈涔圱inymoe鐨勬帶鍒舵祦閮藉彲浠ヨ嚜宸卞仛鍛紵鍥犱負Tinymoe鐨勫嚱鏁伴兘鏄啓鎴愪簡CPS榪欑椋庢牸鐨勩傚叾瀹濩PS澶у閮藉緢鐔熸倝錛屽綋浣犵敤jquery鍋氬姩鐢伙紝鐢╪ode.js鍋欼O鐨勬椂鍊欙紝閭d簺宓屽鐨勪竴涓竴涓殑lambda琛ㄨ揪寮忥紝灝辨湁鐐笴PS鐨勫懗閬撱備笉榪囧湪榪欓噷鎴戜滑騫舵病鏈夌湅鍒板祵濂楃殑lambda錛岃繖鏄洜涓篢inymoe鎻愪緵鐨勮娉曪紝璁㏕inymoe鐨勭紪璇戝櫒鍙互鎶婂悓涓涓眰嬈$殑浠g爜錛岃漿鎴愬祵濂楃殑lambda閭f牱鐨勪唬鐮併傝繖涓繃紼嬪氨鍙獵PS鍙樻崲銆俆inymoe铏界劧鐢ㄤ簡寰堝鍑芥暟寮忕紪紼嬬殑鎵嬫錛屼絾鏄粬騫朵笉鏄竴闂ㄥ嚱鏁版槸璇█錛屽彧鏄竴闂ㄦ櫘閫氱殑榪囩▼寮忚璦銆備絾鏄繖璺烠璇█涓嶄竴鏍鳳紝鍥犱負瀹冭繛C#鐨剏ield return閮藉彲浠ュ啓鎴愬嚱鏁幫紒榪欎釜渚嬪瓙灝辨洿闀夸簡錛屽ぇ瀹跺彲浠ュ埌Tinymoe鐨勪富欏典笂鐪嬨傛垜榪欓噷鍙創涓灝忔浠g爜錛?

 

module enumerable

using standard library

 

symbol yielding return

symbol yielding break

 

type enumerable collection

    body

end

 

type collection enumerator

    current yielding result

    body

    continuation

end

 

鐣ワ紙榪欓噷瀹炵幇浜嗚窡enumerable鐩稿叧鐨勫嚱鏁幫紝鍖呮嫭yield return錛?

 

block (sentence deal with (item)) repeat with (argument item) in (items : enumerable collection)

    set enumerator to new enumerator from items

    repeat

        move enumerator to the next

        deal with current value of enumerator

    end

end

 

sentence print (message)

    redirect to "Print"

end

 

phrase main

    create enumerable to numbers

        repeat with i from 1 to 10

            print "Enumerating " & i

            yield return i

        end

    end

 

    repeat with number in numbers

        if number >= 5

            break

        end

        print "Printing " & number

    end

end

 

浠涔堝彨妯℃嫙C#鐨剏ield return鍛紵灝辨槸榪炴儼鎬ц綆椾篃涓璧鋒ā鎷燂紒鍦╩ain鍑芥暟鐨勭涓閮ㄥ垎錛屾垜鍒涘緩浜嗕竴涓猠numerable錛坕terator錛夛紝鍖呭惈1鍒?0鍗佷釜鏁板瓧錛岃屼笖姣忎駭鐢熶竴涓暟瀛楄繕浼氭墦鍗板嚭涓鍙ヨ瘽銆備絾鏄帴涓嬫潵鎴戝湪寰幆閲岄潰鍙彇鍓?涓紝鎵撳嵃鍓?涓紝鍥犳鎵ц緇撴灉灝辨槸

褰擄紒

 

CPS椋庢牸鐨勫嚱鏁扮殑濞佸姏鍦ㄤ簬錛屾瘡涓涓嚱鏁伴兘鍙互鎺у埗浠栧浣曟墽琛屽嚱鏁扮粨鏉熶箣鍚庡啓鍦ㄥ悗闈㈢殑浠g爜銆備篃灝辨槸璇達紝浣犲彲浠ユ牴鎹綘鐨勯渶瑕侊紝騫茶剢閫夋嫨淇濇姢鐜板満錛岀劧鍚庝互鍚庡啀鍥炲銆傛槸涓嶆槸鍚搗鏉ュ緢鍍弆ua鐨刢oroutine鍛紵鍦═inymoe錛宑oroutine涔熷彲浠ヨ嚜宸卞仛錛?

 

铏界劧鍑芥暟鏈鍚庤杞崲鎴愪簡CPS椋庢牸鐨刟st錛岃屼笖嫻嬭瘯鐢ㄧ殑鐢熸垚C#浠g爜鐨勭‘涔熸槸鍘熷皝涓嶅姩鐨勮緭鍑轟簡鍑烘潵錛屾墍浠ヨ繍琛岃繖涓▼搴忚楄垂浜嗗ぇ閲忕殑鍑芥暟璋冪敤銆備絾榪欏茍涓嶆剰鍛崇潃Tinymoe鐨勮櫄鎷熸満涔熻榪欎箞鍋氥傚ぇ瀹惰璁頒綇錛屼竴涓璦涔熷ソ錛岀被搴撲篃濂斤紝緇欎綘鐨勬帴鍙g殑姒傚康錛岃窡瀹炵幇鐨勬蹇碉紝鏈夊彲鑳藉畬鍏ㄤ笉鍚屻倅ield return鍐欏嚭鏉ョ殑紜鑺辮垂鐐瑰績鎬濓紝鎵浠ャ婂簭璦銆嬫垜涔熶笉璁茶繖涔堝浜嗭紝鍚庣畫鐨勬枃绔犱細璇︾粏浠嬬粛榪欐柟闈㈢殑鐭ヨ瘑錛屽綋鐒朵簡錛岃繕浼氬憡璇変綘鎬庝箞瀹炵幇鐨勩?

 

灝懼0

榪欓噷鎴戞寫閫変簡鍥涗釜渚嬪瓙鏉ュ睍紺篢inymoe鏈閲嶈鐨勪竴浜涙蹇點備竴闂ㄨ璦錛岃搴旂敤鐢ㄨ搗鏉ョ畝鍗曪紝搴撳啓璧鋒潵鍙互鍙戞尌鎯寵薄鍔涳紝鎵嶆槸鏈夊墠閫旂殑銆倅ield return渚嬪瓙閲岄潰鐨刴ain鍑芥暟涓鏍鳳紝鐢ㄧ殑鏃跺欏娓呯埥錛屾竻鐖藉埌璁╀綘瀹屽叏蹇樿yield return瀹炵幇鐨勬椂鍊欓噷闈㈢殑鍚勭楹葷儲鐨勭粏鑺傘?

 

鎵浠ヤ負浠涔堟垜瑕佹寫閫塗inymoe浣滀負瀹炰緥鏉ョ鏅紪璇戝師鐞嗗憿錛熸湁涓や釜鍘熷洜銆傜涓涓師鍥犳槸錛屾兂瑕佸疄鐜癟inymoe錛岄渶瑕佸ぇ閲忕殑鐭ヨ瘑銆傛墍浠ユ棦鐒惰繖涓郴鍒楁兂璁╁ぇ瀹惰兘澶熺湅瀹屽疄鐜頒竴涓猅inymoe鐨勪綆璐ㄩ噺鍘熷瀷錛屽綋鐒朵細璁插緢澶氱煡璇嗙殑銆傜浜屼釜鍘熷洜鏄紝鎴戞兂閫氳繃榪欎釜渚嬪瓙鍚戝ぇ瀹跺皢涓涓亾鐞嗭紝灝辨槸搴撳拰搴旂敤 銆佺紪璇戝櫒鍜岃娉曘佸疄鐜板拰鎺ュ彛錛屽畬鍏ㄥ彲浠ュ仛鍒伴殧紱誨鏉傦紝鍙暀緇欐渶緇堢敤鎴風畝鍗曠殑閮ㄥ垎銆?span style="font-size:14pt">浣犵湅鍒扮殑澶嶆潅鐨勬帴鍙o紝騫朵笉鎰忓懗鐫浠栫殑瀹炵幇鏄噧鑲跨殑銆備綘鐪嬪埌鐨勭畝鍗曠殑鎺ュ彛錛屼篃涓嶆剰鍛崇潃浠栫殑瀹炵幇灝卞緢綆媧?/strong>銆?

 

Tinymoe鐩墠宸茬粡鍙互杈撳嚭C#浠g爜鏉ユ墽琛屼簡銆傚悗闈㈡垜榪樹細緇橳inymoe鍔犱笂闈欐佸垎鏋愬拰綾誨瀷鎺ㄥ銆傚浜庤繖綾昏璦鍋氶潤鎬佸垎鏋愬拰綾誨瀷鎺ㄥ鍙堝緢澶氶夯鐑︼紝鎴戠幇鍦ㄨ繕娌℃湁瀹屽叏鎼炴槑鐧姐傝濡傝榪欑鍙互鑷繁鎺у埗continuation鐨勫嚱鏁拌鎬庝箞緙栬瘧鎴愮姸鎬佹満鎵嶈兘閬垮厤鎺夊ぇ閲忕殑鍑芥暟璋冪敤錛屽氨涓嶆槸涓涓鏄撶殑闂銆傛墍浠ュ湪緋誨垪涓杈瑰仛鐨勬椂鍊欙紝鎴戣繕浼氫竴杈圭爺絀惰繖涓簨鎯呫傚鏋滃埌鏃跺欑郴鍒楁妸緙栬瘧閮ㄥ垎鍐欏畬鐨勫悓鏃訛紝榪欎簺闂鎴戜篃鎼炴槑鐧界殑璇濓紝閭f垜灝變細璁╄繖涓郴鍒楁墿灞曞埌鍖呭惈闈欐佸垎鏋愬拰綾誨瀷鎺ㄥ錛岀戶緇線涓嬭銆?/p>

闄堟鐎?vczh) 2014-01-19 01:21 鍙戣〃璇勮
]]>
2013騫寸粓鎬葷粨http://m.shnenglu.com/vczh/archive/2014/01/04/205169.html闄堟鐎?vczh)闄堟鐎?vczh)Sat, 04 Jan 2014 13:52:00 GMThttp://m.shnenglu.com/vczh/archive/2014/01/04/205169.htmlhttp://m.shnenglu.com/vczh/comments/205169.htmlhttp://m.shnenglu.com/vczh/archive/2014/01/04/205169.html#Feedback9http://m.shnenglu.com/vczh/comments/commentRss/205169.htmlhttp://m.shnenglu.com/vczh/services/trackbacks/205169.html2013騫存垜灝卞共浜嗕袱浠朵簨鎯呫傜涓浠舵槸gaclib錛岀浜屼歡鏄?a >tinymoe銆?

 

Gaclib緇堜簬鍋氬埌瀹夊叏鐨勬敮鎸丆++鐨勫弽灝勩佷粠XML鍔犺澆紿楀彛鍜屾帶浠朵簡銆傜幇鍦ㄥ湪瀹炵幇鐨勪笢瑗垮垯鏄竴涓粰gaclib鐢ㄧ殑workflow灝忚剼鏈紝鐢ㄦ潵鍐欎竴浜涚畝鍗曠殑view鐨勯昏緫銆佸畾涔塿iewmodel鎺ュ彛錛岃繕鏈夎窡WPF宸笉澶氱殑data binding銆?

 

Tinymoe鏄垜澶т簩鐨勬椂鍊欏氨璁捐鍑烘潵鐨勪笢瑗匡紝鏃犲浠ュ墠瀵硅綆楁満鐨勭悊璁哄熀紜浜嗚В鐨勫お灝戯紝浠ヨ嚦浜庢病娉曞疄鐜幫紝鐩村埌鐜板湪鎵嶈兘鍋氬嚭鏉ャ傛葷殑鏉ヨtinymoe鏄竴涓ā浠胯嫳璇娉曠殑涓ヨ們鐨勭紪紼嬭璦鈥斺斾篃灝辨槸璇村畠鏄笉鍩轟簬NLP鐨勶紝璇硶鏄弗鏍肩殑錛屽啓閿欎竴涓崟璇嶄篃浼氱紪璇戜笉榪囥傚洜姝ゆ墍鏈夌殑鍑芥暟閮借鍐欐垚鐭錛屽寘鎷帶鍒舵祦璇彞涔熸槸銆傛墍浠ユ垜灝辨兂浜嗕竴鎯籌紝鑳戒笉鑳借鍒嗘敮銆佸驚鐜佸紓甯稿鐞嗗拰寮傛澶勭悊絳夌瓑鍏朵粬璇█鐨勫唴緗殑鍔熻兘鍦ㄦ垜榪欓噷閮藉彉鎴愬簱錛熻繖褰撶劧鏄彲浠ョ殑錛屽彧瑕佸仛鍏ㄦ枃鐨刢ps鍙樻崲錛岀劧鍚庤姹傝繖浜涙帶鍒舵祦鍑芥暟涔熷啓鎴恈ps鐨勯鏍煎氨鍙互浜嗐?

 

鐩墠鐨勭涓涓兂娉曟槸錛岀瓑鎼炲ソ浜嗕箣鍚庡厛鐢熸垚javascript鎴栬匔#鐨勪唬鐮侊紝涓嶅お鎯沖啓鑷繁鐨刅M浜嗭紝鐒跺悗灝卞嚭涓涓郴鍒楁枃绔犲彨鍋氥婄湅瀹炰緥璺熷ぇ鐗涘緙栬瘧鍘熺悊銆嬶紝灝變互榪欎釜tinymoe浣滀負渚嬪瓙錛屾潵鎶娿婂浣曡璁′竴闂ㄨ璦銆嬪歡緇笅鍘伙紝鍟婂搱鍝堝搱鍝堝搱銆?

 

鍐欏崥瀹㈡槸涓浠跺緢闅劇殑浜嬫儏銆傛垜澶т笁寮濮嬬粡钀ヨ繖涓猚ppblog/cnblogs鐨勫崥瀹㈢殑鏃跺欙紝涓澶╅兘鍙互鍐欎竴綃囷紝鍩烘湰涓婃槸鍦ㄨ褰曟垜瀛﹀埌鐨勪笢瑗垮拰鎴戦犵殑杞瓙銆傜幇鍦ㄩ兘姣旇緝鎳掍簡錛岃寰楁暣澶╄鑷繁鍦ㄥ紑鍙戜粈涔堜篃娌℃剰鎬濅簡錛屼簬鏄兂鍐欎竴浜涘埆鐨勶紝绔熺劧涓嶇煡濡備綍涓嬫墜錛屼簬鏄氨鍑轟簡鍚勭娌″~瀹岀殑緋誨垪銆?

 

鎴戣寰楁垜瀛︾紪紼嬭繖13騫存潵涔熸槸瀛﹀埌浜嗕笉灝戜笢瑗跨殑錛岄櫎浜嗙函綺圭殑api鍜岃璦鐨勭煡璇嗕互澶栵紝寰堝鏂規硶璁洪兘緇欐垜璧峰埌浜嗗崄鍒嗛噸瑕佺殑浣滅敤銆備竴寮濮嬫槸闈㈠悜瀵硅薄錛岀劧鍚庢槸鏁版嵁緇撴瀯綆楁硶錛岀劧鍚庢槸闈㈠悜鏂歸潰緙栫▼錛岀劧鍚庢槸鍑芥暟寮忕紪紼嬶紝鍚庢潵榪樻帴瑙︿簡鍚勭璺熷嚱鏁板紡緙栫▼鏈夊叧鐨勬蹇碉紝璀璇磖eactive programming鍟婏紝actor鍟婏紝寮傛鍟婏紝continuation絳夌瓑銆傝剳瀛愰噷鍏呮弧浜嗗悇縐嶅悇鏍風殑鏂規硶璁哄拰妯″瀷涔嬪悗錛岀幇鍦ㄦ棤璁哄啓浠涔堢▼搴忥紝鍑犱箮閮藉彲浠ユ嬁榪欎簺涓滆タ寰涓婂錛岀劧鍚庡仛鍑轟竴涓淮鎶や篃寰堝鏄擄紙鍓嶆彁鏄湁榪欎簺鐭ヨ瘑錛夛紝浠g爜涔熷緢綆媧佺殑紼嬪簭浜嗐?

 

宸ヤ綔鐨勮繖鍥涘勾鍗婇噷錛岃鎴戝涔犲埌浜嗘枃妗e拰鑷姩鍖栨祴璇曠殑閲嶈鎬э紝浜庢槸鍒╃敤榪欏嚑騫存垜鎶婃枃妗e拰嫻嬭瘯鐨勮兘鍔涗篃閿葷偧鐨勫樊涓嶅浜嗐傜幇鍦ㄦ垜瑙夊緱錛屾妧鏈殑璇濆伐浣滃簲浠樿搗鏉ユ槸瓚呯駭綆鍗曪紝浣嗘槸鑷繁瀵規妧鏈殑鐑儏榪樻槸淇冧嬌鎴戜笉鏂殑鐮旂┒涓嬪幓銆?014騫村簲璇ョ爺絀剁殑鎶鑳藉氨鏄槾鐐簡銆?/p>

]]>
濡備綍璁捐涓闂ㄨ璦錛堝崄浜岋級鈥斺旇璁″彲鎵╁睍鐨勭被鍨?/title><link>http://m.shnenglu.com/vczh/archive/2013/11/10/204189.html</link><dc:creator>闄堟鐎?vczh)</dc:creator><author>闄堟鐎?vczh)</author><pubDate>Sun, 10 Nov 2013 09:06:00 GMT</pubDate><guid>http://m.shnenglu.com/vczh/archive/2013/11/10/204189.html</guid><wfw:comment>http://m.shnenglu.com/vczh/comments/204189.html</wfw:comment><comments>http://m.shnenglu.com/vczh/archive/2013/11/10/204189.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://m.shnenglu.com/vczh/comments/commentRss/204189.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/vczh/services/trackbacks/204189.html</trackback:ping><description><![CDATA[     鎽樿: 鍦ㄦ濊冩庝箞鍐欒繖涓綃囨枃绔犵殑鏃跺欙紝鎴戝張鎯沖埌浜嗕互鍓嶈璁烘浜ゆ蹇電殑浜嬫儏銆傚鏋滀竴涓郴緇熻璁捐鎴愭浜ょ殑錛屼粬鐨勫姛鑳芥墿灞曡搗鏉ヤ篃鍙互寰堝鏄撶殑淇濇寔璐ㄩ噺榪欐槸娌¢敊鐨勶紝浣嗘槸瀵逛簬姣忎竴涓崟鐙粰浠栨墿灞曞姛鑳界殑涓綋鏉ヨ錛岃繖涓郴緇熶竴鐐歸兘涓嶅ソ鐢ㄣ傛墍浠ユ垜瑙夊緱鐜板湪鐨勮璦琚璁℃垚榪欐牱涔熸槸鏈夐偅涔堢偣閬撶悊鐨勩傚氨綆楁槸璁捐Java鐨勯偅璋侊紝浠栦篃涓嶆槸鍌婚鹼紝閭d負浠涔圝ava浼氳璁捐鎴愯繖鏍鳳紵鎴戣寰楄繖璺熶粬鍒氬紑濮嬫兂璁╅噾瀛楀鐨勫簳灞傜▼搴忓憳涔熷彲浠ラ『鍒╀嬌鐢↗ava鏄湁鍏崇郴...  <a href='http://m.shnenglu.com/vczh/archive/2013/11/10/204189.html'>闃呰鍏ㄦ枃</a><img src ="http://m.shnenglu.com/vczh/aggbug/204189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/vczh/" target="_blank">闄堟鐎?vczh)</a> 2013-11-10 17:06 <a href="http://m.shnenglu.com/vczh/archive/2013/11/10/204189.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.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://wwwsao117.com" target="_blank">欧美aaaaaaaa牛牛影院</a>| <a href="http://yishangsh.com" target="_blank">久久这里有精品15一区二区三区</a>| <a href="http://www33779.com" target="_blank">亚洲欧洲精品成人久久奇米网</a>| <a href="http://5773000.com" target="_blank">榴莲视频成人在线观看</a>| <a href="http://cechi8.com" target="_blank">午夜亚洲福利在线老司机</a>| <a href="http://zhiuh.com" target="_blank">亚洲视频久久</a>| <a href="http://wwwbaoyu66.com" target="_blank">亚洲综合色激情五月</a>| <a href="http://www-35777.com" target="_blank">欧美亚洲在线视频</a>| <a href="http://8eya.com" target="_blank">国内精品久久久久久 </a>| <a href="http://ddh345.com" target="_blank">亚洲免费影视</a>| <a href="http://goldure.com" target="_blank">欧美在线看片a免费观看</a>| <a href="http://wwwby6682.com" target="_blank">久久午夜羞羞影院免费观看</a>| <a href="http://hafenchen.com" target="_blank">欧美福利视频</a>| <a href="http://neudlac.com" target="_blank">国产精品对白刺激久久久</a>| <a href="http://aqdav037.com" target="_blank">国产欧美一区二区三区沐欲 </a>| <a href="http://o3xo.com" target="_blank">欧美韩日视频</a>| <a href="http://kakatok.com" target="_blank">欧美小视频在线</a>| <a href="http://gbandal.com" target="_blank">国产欧美一区二区三区国产幕精品</a>| <a href="http://3bmmtv.com" target="_blank">狠狠色香婷婷久久亚洲精品</a>| <a href="http://trhht.com" target="_blank">亚洲国内自拍</a>| <a href="http://www-919198.com" target="_blank">小处雏高清一区二区三区 </a>| <a href="http://107766a.com" target="_blank">国产日韩欧美91</a>| <a href="http://qiaoka526.com" target="_blank">在线不卡欧美</a>| <a href="http://012488.com" target="_blank">亚洲欧美日韩国产成人</a>| <a href="http://jxyptsw.com" target="_blank">欧美成人黑人xx视频免费观看</a>| <a href="http://388123cc.com" target="_blank">一本色道久久88精品综合</a>| <a href="http://yymh1056.com" target="_blank">久久成人精品无人区</a>| <a href="http://www77577.com" target="_blank">欧美日韩成人综合在线一区二区</a>| <a href="http://www49966.com" target="_blank">国产精品福利在线观看网址</a>| <a href="http://nebnb89.com" target="_blank">亚洲第一福利社区</a>| <a href="http://vipaiqiyi.com" target="_blank">午夜天堂精品久久久久</a>| <a href="http://5138555.com" target="_blank">亚洲国产成人在线</a>| <a href="http://www-14333.com" target="_blank">亚洲影音先锋</a>| <a href="http://1zz8903.com" target="_blank">欧美日本国产</a>| <a href="http://jsydjxgs.com" target="_blank">黄色日韩精品</a>| <a href="http://www-440447.com" target="_blank">亚洲欧美在线免费观看</a>| <a href="http://345521.com" target="_blank">最新成人在线</a>| <a href="http://maiiyou.com" target="_blank">久久这里只精品最新地址</a>| <a href="http://2589999.com" target="_blank">国产毛片精品国产一区二区三区</a>| <a href="http://18p2.com" target="_blank">91久久久久久久久</a>| <a href="http://8181777.com" target="_blank">久久免费黄色</a>| <a href="http://626tw.com" target="_blank">午夜精品一区二区在线观看</a>| <a href="http://5474hu.com" target="_blank">国产精品电影网站</a>| <a href="http://86311ib.com" target="_blank">日韩午夜视频在线观看</a>| <a href="http://shiselol.com" target="_blank">欧美成人免费视频</a>| <a href="http://91x8.com" target="_blank">久久精品导航</a>| <a href="http://57sa.com" target="_blank">国内外成人免费激情在线视频网站</a>| <a href="http://ztqsfw.com" target="_blank">一本到高清视频免费精品</a>| <a href="http://8x1080x.com" target="_blank">欧美国产1区2区</a>| <a href="http://456888com.com" target="_blank">久久久久久久久岛国免费</a>| <a href="http://actinview.com" target="_blank">国产精品影视天天线</a>| <a href="http://y65v.com" target="_blank">亚洲综合大片69999</a>| <a href="http://gztcm01.com" target="_blank">欧美日韩免费观看一区三区</a>| <a href="http://jm1688e.com" target="_blank">欧美精品在线免费</a>| <a href="http://eguge.com" target="_blank">在线观看精品一区</a>| <a href="http://universehb.com" target="_blank">久久久精品五月天</a>| <a href="http://bbbbyb.com" target="_blank">av不卡在线</a>| <a href="http://797298.com" target="_blank">欧美性jizz18性欧美</a>| <a href="http://8bc3.com" target="_blank">亚洲一二三区精品</a>| <a href="http://wwwok1965.com" target="_blank">亚洲精品久久久久久久久</a>| <a href="http://xaipad.com" target="_blank">欧美激情免费在线</a>| <a href="http://www284tv.com" target="_blank">日韩视频在线永久播放</a>| <a href="http://gzxyh88.com" target="_blank">亚洲国产精品一区二区www在线</a>| <a href="http://yyypdq.com" target="_blank">久久精品国产一区二区三区免费看 </a>| <a href="http://430390.com" target="_blank">国产亚洲欧美中文</a>| <a href="http://5gn4y.com" target="_blank">久久久999精品免费</a>| <a href="http://bbbbyb.com" target="_blank">性做久久久久久免费观看欧美</a>| <a href="http://wwwavtb1122.com" target="_blank">国产精品v片在线观看不卡</a>| <a href="http://339254.com" target="_blank">亚洲一区二区三区中文字幕</a>| <a href="http://520844www.com" target="_blank">欧美日韩成人一区二区</a>| <a href="http://621791.com" target="_blank">宅男66日本亚洲欧美视频</a>| <a href="http://www55avav.com" target="_blank">日韩香蕉视频</a>| <a href="http://ztsctgs.com" target="_blank">国产精品国产馆在线真实露脸</a>| <a href="http://bjjxgcsxy.com" target="_blank">亚洲制服av</a>| <a href="http://eastasp.com" target="_blank">欧美在线视频一区</a>| <a href="http://wwwmm7777.com" target="_blank">在线日韩一区二区</a>| <a href="http://www-787788.com" target="_blank">亚洲激情啪啪</a>| <a href="http://mom8888.com" target="_blank">国产精品普通话对白</a>| <a href="http://400206.com" target="_blank">欧美在线日韩</a>| <a href="http://chufengguanye.com" target="_blank">久久深夜福利</a>| <a href="http://www-876810.com" target="_blank">亚洲免费av片</a>| <a href="http://85181890.com" target="_blank">亚洲香蕉网站</a>| <a href="http://cechi8.com" target="_blank">尤物视频一区二区</a>| <a href="http://china391.com" target="_blank">亚洲高清一区二区三区</a>| <a href="http://mengmujia.com" target="_blank">欧美视频一区二区三区在线观看</a>| <a href="http://zyjxyx.com" target="_blank">亚洲综合三区</a>| <a href="http://mfgun.com" target="_blank">久久久91精品</a>| <a href="http://hy1598.com" target="_blank">亚洲全部视频</a>| <a href="http://4449992.com" target="_blank">亚洲在线网站</a>| <a href="http://zuan3344.com" target="_blank">亚洲国产日韩欧美在线图片 </a>| <a href="http://yjizz08.com" target="_blank">欧美在线免费视屏</a>| <a href="http://77427xyz.com" target="_blank">免费永久网站黄欧美</a>| <a href="http://xsjgxx.com" target="_blank">亚洲视频专区在线</a>| <a href="http://wwwn94.com" target="_blank">欧美中文在线免费</a>| <a href="http://tongrenyaoye.com" target="_blank">亚洲精品乱码久久久久久</a>| <a href="http://rainbowbpm.com" target="_blank">一本色道88久久加勒比精品</a>| <a href="http://388268.com" target="_blank">国精产品99永久一区一区</a>| <a href="http://dracotek.com" target="_blank">亚洲国产综合在线</a>| <a href="http://979695.com" target="_blank">国产精品人人做人人爽</a>| <a href="http://www-68689.com" target="_blank">欧美肥婆在线</a>| <a href="http://6222h.com" target="_blank">国产日本欧美在线观看</a>| <a href="http://lcqrsj.com" target="_blank">亚洲国产成人久久</a>| <a href="http://bgflee.com" target="_blank">国产视频欧美视频</a>| <a href="http://8090567.com" target="_blank">亚洲精品小视频在线观看</a>| <a href="http://44cgcg.com" target="_blank">国产有码一区二区</a>| <a href="http://xpfuli.com" target="_blank">日韩一级精品视频在线观看</a>| <a href="http://javdb04.com" target="_blank">激情久久中文字幕</a>| <a href="http://609005.com" target="_blank">亚洲一区二区三区在线视频</a>| <a href="http://iietao.com" target="_blank">亚洲激情一区</a>| <a href="http://988tz.com" target="_blank">欧美一级黄色录像</a>| <a href="http://3188m.com" target="_blank">免费成人高清</a>| <a href="http://842332.com" target="_blank">久久精品综合网</a>| <a href="http://345kt.com" target="_blank">久久爱www久久做</a>| <a href="http://77mcn.com" target="_blank">夜夜嗨网站十八久久</a>| <a href="http://yhc26.com" target="_blank">久久精品视频免费</a>| <a href="http://cz-hongbangfloor.com" target="_blank">亚洲天堂免费在线观看视频</a>| <a href="http://tongrenyaoye.com" target="_blank">久久深夜福利免费观看</a>| <a href="http://jm1688e.com" target="_blank">欧美v国产在线一区二区三区</a>| <a href="http://wwww76.com" target="_blank">欧美午夜精品久久久久久人妖 </a>| <a href="http://yzsss.com" target="_blank">亚洲欧洲在线一区</a>| <a href="http://by5130.com" target="_blank">在线看无码的免费网站</a>| <a href="http://767296.com" target="_blank">午夜在线精品</a>| <a href="http://wwwbbb888999.com" target="_blank">亚洲综合日韩</a>| <a href="http://hs045.com" target="_blank">欧美午夜电影一区</a>| <a href="http://my8823.com" target="_blank">亚洲伦理一区</a>| <a href="http://hongzaixian.com" target="_blank">亚洲理论在线观看</a>| <a href="http://360695.com" target="_blank">欧美v亚洲v综合ⅴ国产v</a>| <a href="http://chenyirong.com" target="_blank">久久精品一区蜜桃臀影院 </a>| <a href="http://cp50088.com" target="_blank">亚洲免费在线观看</a>| <a href="http://balqueen.com" target="_blank">亚洲午夜性刺激影院</a>| <a href="http://378682.com" target="_blank">欧美日韩国产123</a>| <a href="http://www668889.com" target="_blank">亚洲精品国产拍免费91在线</a>| <a href="http://syddzs.com" target="_blank">亚洲国产精品999</a>| <a href="http://989p.com" target="_blank">久久伊人免费视频</a>| <a href="http://haomscq.com" target="_blank">欧美成年人网站</a>| <a href="http://bixiuge.com" target="_blank">亚洲高清影视</a>| <a href="http://118936.com" target="_blank">男女激情久久</a>| <a href="http://22400com.com" target="_blank">亚洲黄色免费</a>| <a href="http://jiyixitong.com" target="_blank">亚洲精品视频在线看</a>| <a href="http://xhtd688.com" target="_blank">欧美成人免费观看</a>| <a href="http://798200.com" target="_blank">亚洲精品亚洲人成人网</a>| <a href="http://51winner.com" target="_blank">一区二区高清</a>| <a href="http://4446666.com" target="_blank">国产精品video</a>| <a href="http://959425.com" target="_blank">一区二区三区色</a>| <a href="http://www8qa.com" target="_blank">性欧美精品高清</a>| <a href="http://4hup23.com" target="_blank">国产一级揄自揄精品视频</a>| <a href="http://47b8.com" target="_blank">欧美一区二区三区日韩视频</a>| <a href="http://223tt.com" target="_blank">鲁鲁狠狠狠7777一区二区</a>| <a href="http://798814.com" target="_blank">又紧又大又爽精品一区二区</a>| <a href="http://dlwansheng.com" target="_blank">久久人人97超碰人人澡爱香蕉</a>| <a href="http://www19898.com" target="_blank">美女999久久久精品视频</a>| <a href="http://av0333.com" target="_blank">亚洲高清久久</a>| <a href="http://74w4.com" target="_blank">欧美日韩免费一区</a>| <a href="http://iotbzw.com" target="_blank">亚洲自拍偷拍视频</a>| <a href="http://3s3v.com" target="_blank">男同欧美伦乱</a>| <a href="http://rbet6365.com" target="_blank">aaa亚洲精品一二三区</a>| <a href="http://qiaoka526.com" target="_blank">国产精品久久久免费</a>| <a href="http://hgx123.com" target="_blank">欧美一区二视频</a>| <a href="http://3838418.com" target="_blank">欧美成人亚洲</a>| <a href="http://wce-expo.com" target="_blank">亚洲一卡二卡三卡四卡五卡</a>| <a href="http://8222666.com" target="_blank">国产欧美一区二区精品仙草咪</a>| <a href="http://by3259.com" target="_blank">久久久中精品2020中文</a>| <a href="http://nnnn34.com" target="_blank">最新亚洲激情</a>| <a href="http://tt5125.com" target="_blank">性欧美超级视频</a>| <a href="http://033232.com" target="_blank">亚洲国产精品久久久久婷婷老年</a>| <a href="http://www033459.com" target="_blank">欧美成人免费全部</a>| <a href="http://www-kj777.com" target="_blank">亚洲图中文字幕</a>| <a href="http://pfpf66.com" target="_blank">欧美第一黄网免费网站</a>| <a href="http://hakuihoso.com" target="_blank">亚洲天堂av图片</a>| <a href="http://44779c.com" target="_blank">狠狠操狠狠色综合网</a>| <a href="http://ewaygou.com" target="_blank">欧美喷水视频</a>| <a href="http://wwwen41.com" target="_blank">久久国产欧美精品</a>| <a href="http://ybshg.com" target="_blank">亚洲尤物在线视频观看</a>| <a href="http://niu96.com" target="_blank">亚洲自拍都市欧美小说</a>| <a href="http://xsjgxx.com" target="_blank">久久久天天操</a>| <a href="http://1392266.com" target="_blank">亚洲视频www</a>| <a href="http://ylsnuha.com" target="_blank">**网站欧美大片在线观看</a>| <a href="http://baoyu1313.com" target="_blank">欧美三区在线</a>| <a href="http://qdpetlove.com" target="_blank">老牛嫩草一区二区三区日本</a>| <a href="http://51shoudian.com" target="_blank">亚洲最新合集</a>| <a href="http://91mase.com" target="_blank">欧美成人一区二区三区片免费</a>| <a href="http://qhzyxcd.com" target="_blank">亚洲综合首页</a>| <a href="http://770456.com" target="_blank">亚洲精品国偷自产在线99热</a>| <a href="http://devwang.com" target="_blank">国产网站欧美日韩免费精品在线观看 </a>| <a href="http://xb735.com" target="_blank">亚洲第一天堂av</a>| <a href="http://syddzs.com" target="_blank">久久精品亚洲一区</a>| <a href="http://49028b.com" target="_blank">99re这里只有精品6</a>| <a href="http://97seee.com" target="_blank">今天的高清视频免费播放成人</a>| <a href="http://www-14333.com" target="_blank">欧美日本在线播放</a>| <a href="http://jqnyc.com" target="_blank">久久亚洲美女</a>| <a href="http://o10669.com" target="_blank">欧美在线亚洲一区</a>| <a href="http://ctmhotel.com" target="_blank">亚洲视频电影在线</a>| <a href="http://atmub.com" target="_blank">亚洲美女免费精品视频在线观看</a>| <a href="http://www44448.com" target="_blank">久久这里只有精品视频首页</a>| <a href="http://zd-jm.com" target="_blank">香蕉成人伊视频在线观看</a>| <a href="http://cp50088.com" target="_blank">一区二区不卡在线视频 午夜欧美不卡'</a>| <a href="http://008528.com" target="_blank">韩日成人在线</a>| <a href="http://119663.com" target="_blank">国产视频亚洲精品</a>| <a href="http://unrealcopgmail.com" target="_blank">国产精品露脸自拍</a>| <a href="http://qkspvip.com" target="_blank">国产精品久久久久久av福利软件</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>