锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美视频中文字幕在线,欧美日韩专区在线,欧美黄色视屏http://m.shnenglu.com/woaidongmao/category/9130.html鏂囩珷鍧囨敹褰曡嚜浠栦漢鍗氬錛屼絾涓嶅枩鏍囬鍓嶅姞-[杞創]錛屽洜鍏朵笐闄嬶紝瑙佽皡錛亊zh-cnFri, 26 Dec 2008 00:32:26 GMTFri, 26 Dec 2008 00:32:26 GMT60Ragel 鐘舵佹満綆浠?/title><link>http://m.shnenglu.com/woaidongmao/archive/2008/12/24/70245.html</link><dc:creator>鑲ヤ粩</dc:creator><author>鑲ヤ粩</author><pubDate>Wed, 24 Dec 2008 07:18:00 GMT</pubDate><guid>http://m.shnenglu.com/woaidongmao/archive/2008/12/24/70245.html</guid><wfw:comment>http://m.shnenglu.com/woaidongmao/comments/70245.html</wfw:comment><comments>http://m.shnenglu.com/woaidongmao/archive/2008/12/24/70245.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/woaidongmao/comments/commentRss/70245.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/woaidongmao/services/trackbacks/70245.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin-bottom: 12pt"><span style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">浠庝粖澶╁紑濮嬫垜鎶婃垜鍓嶄竴孌墊椂闂寸敤鍒扮殑鐘舵佹満宸ュ叿<span lang="EN-US">Ragel</span>鐨勪嬌鐢ㄦ柟娉曞仛涓浜涙葷粨<span lang="EN-US">,</span>甯屾湜澶у鏂ф<span lang="EN-US">!<br><br><br>(</span>濡傛灉澶у瀵圭姸鎬佹満姒傚康鏈夋ā緋婄殑璇?span lang="EN-US">,</span>璇峰弬鑰?span lang="EN-US"><<</span>緙栬瘧鍘熺悊<span lang="EN-US">>></span>涓涔?span lang="EN-US">,</span>鍩烘湰涓婃湁璇﹀敖鐨勪粙緇?span lang="EN-US">)<br><br></span>濂介棽璦灝戝彊<span lang="EN-US">,</span>璦褰掓浼?span lang="EN-US"><br><br>Ragel</span>鍙互浠庢瑙勮〃杈懼紡鐢熸垚鍙墽琛屾湁闄愮姸鎬佹満<span lang="EN-US">,</span>瀹冨彲浠ョ敓鎴?span lang="EN-US">C,C++,Object-C,D,Java</span>鍜?span lang="EN-US">Ruby</span>鍙墽琛屼唬鐮?span lang="EN-US"><br><br></span>瀹樻柟緗戠珯<span lang="EN-US">:<a target="_blank"><span style="color: windowtext">http://www.cs.queensu.ca/home/thurston/ragel/</span></a><br><br></span>絎竴鍥?span lang="EN-US"><br><br>Ragel</span>鏄竴涓彲浠ョ敓鎴愬崗璁鐞嗕唬鐮佺殑宸ュ叿<span lang="EN-US">.</span>銆<span lang="EN-US"><br><br></span>鍏堜婦涓緥瀛愶紝綆綆鍗曞崟鐨勫嚑琛屼唬鐮?span lang="EN-US">,</span>瀹炵幇鐨勫姛鑳戒負灝嗕竴涓暟瀛楀瓧絎︿覆杞崲鎴愭暣鏁幫細<span lang="EN-US"><?xml:namespace prefix = o /><o:p></o:p></span></span></p> <p class="MsoNormal" style="background: #f3f8d7; text-align: right" align="right"><b><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma"><a ><span style="mso-bidi-font-family: arial">[Copy to clipboard]</span></a> <a ><span style="mso-bidi-font-family: arial">[ <span id="code0_symbol">-</span> ]</span></a><o:p></o:p></span></b></p> <p class="MsoNormal" style="background: #f3f8d7; text-align: left" align="left"><b><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">CODE:<o:p></o:p></span></b></p> <p class="MsoNormal" style="background: #fdfff2"><span lang="EN-US" style="font-size: 12pt; color: #333333; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">int atoi( char *str )<br>{<br>char *p = str;<br>int cs, val = 0;<br>bool neg = false;<br><br>%%{       //Ragel </span><span style="font-size: 12pt; color: #333333; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">鐨勫叧閿瓧<span lang="EN-US">,</span>鐢ㄤ簬澹版槑鐘舵佹満浠g爜孌電殑寮濮?span lang="EN-US"><br>  action see_neg {<br>   neg = true;<br>  }<br><br>  action add_digit {<br>   val = val * 10 + (fc - '0');<br>  }<br><br>  main :=<br>   ( '-'@see_neg | '+' )? ( digit @add_digit )+<br>   '\n' @{ fbreak; };<br><br>  # Initialize and execute.<br>  write init;                                  //</span>鐘舵佹満鍏抽敭瀛?span lang="EN-US">,</span>榪欎釜浼氬啀鎺ヤ笅鏉ョ殑鍐呭涓粙緇?span lang="EN-US"><br>  write exec noend;                     //</span>鍚屼笂<span lang="EN-US"><br>}%%                                        //</span>鐘舵佹満浠g爜孌電粨鏉熸爣璁?span lang="EN-US"><br><br>if ( neg )<br>  val = -1 * val;<br><br>if ( cs < atoi_first_final )<br>  cerr << "atoi: there was an error" << endl;<br><br>return val;<br>};<o:p></o:p></span></span></p> <p class="MsoNormal" style="margin-bottom: 12pt"><span lang="EN-US" style="font-size: 12pt; color: #333333; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma"><br></span><span style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">姣?span lang="EN-US">c</span>閲岄潰閭?span lang="EN-US">500</span>澶氳瀹炵幇鐨?span lang="EN-US">atoi</span>鍑芥暟鏇村姞楂樻晥<span lang="EN-US"><br><br></span>涓婇潰榪欐浠g爜錛岀敓鎴愮殑<span lang="EN-US">C</span>璇█浠g爜濡備笅<span lang="EN-US">:<o:p></o:p></span></span></p> <p class="MsoNormal" style="background: #f3f8d7; text-align: right" align="right"><b><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma"><a ><span style="mso-bidi-font-family: arial">[Copy to clipboard]</span></a> <a ><span style="mso-bidi-font-family: arial">[ <span id="code1_symbol">-</span> ]</span></a><o:p></o:p></span></b></p> <p class="MsoNormal" style="background: #f3f8d7; text-align: left" align="left"><b><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">CODE:<o:p></o:p></span></b></p> <p class="MsoNormal" style="background: #fdfff2"><span lang="EN-US" style="font-size: 12pt; color: #333333; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">int atoi( char *str )<br>{<br>char *p = str;<br>int cs, val = 0;<br>bool neg = false;<br><br>#line 27 "atoi.c"<br>{<br>cs = atoi_start;<br>}<br><br>#line 31 "atoi.c"<br>{<br>switch ( cs )<br>{<br>case 1:<br>switch( (*p) ) {<br>  case 43: goto st2;<br>  case 45: goto tr2;<br>}<br>if ( 48 <= (*p) && (*p) <= 57 )<br>  goto tr3;<br>goto st0;<br>st0:<br>goto _out0;<br>tr2:<br>#line 23 "atoi.rl"<br>{<br>   neg = true;<br>  }<br>goto st2;<br>st2:<br>p += 1;<br>case 2:<br>#line 52 "atoi.c"<br>if ( 48 <= (*p) && (*p) <= 57 )<br>  goto tr3;<br>goto st0;<br>tr3:<br>#line 27 "atoi.rl"<br>{<br>   val = val * 10 + ((*p) - '0');<br>  }<br>goto st3;<br>st3:<br>p += 1;<br>case 3:<br>#line 63 "atoi.c"<br>if ( (*p) == 10 )<br>  goto tr4;<br>if ( 48 <= (*p) && (*p) <= 57 )<br>  goto tr3;<br>goto st0;<br>tr4:<br>#line 33 "atoi.rl"<br>{ goto _out4; }<br>goto st4;<br>st4:<br>p += 1;<br>case 4:<br>#line 74 "atoi.c"<br>goto st0;<br>}<br>_out0: cs = 0; goto _out;<br>_out4: cs = 4; goto _out;<br><br>_out: {}<br>}<br>#line 38 "atoi.rl"<br><br><br>if ( neg )<br>  val = -1 * val;<br><br>if ( cs < atoi_first_final )<br>  cerr << "atoi: there was an error" << endl;<br><br>return val;<br>};<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma"><br></span><span style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">瀵瑰簲鐨勭姸鎬佸浘濡備笅鍥炬墍紺?span lang="EN-US">:<span style="color: #333333"><br><br><a href="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/Ragel_D708/clip_image001_2.gif"><img onmousewheel="return imgzoom(this);" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="108" alt="clip_image001" src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/Ragel_D708/clip_image001_thumb.gif" width="606" border="0" v:shapes="_x0000_i1025"></a><o:p></o:p></span></span></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-size: 12pt; color: #333333; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma"><o:p> </o:p></span></p> <table class="MsoNormalTable" style="background: white; width: 100%; border-collapse: collapse; mso-padding-alt: 3.0pt 3.0pt 3.0pt 3.0pt" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"> <td style="border-right: medium none; padding-right: 7.5pt; border-top: #bbe9ff 1pt solid; padding-left: 7.5pt; padding-bottom: 1.5pt; border-left: medium none; padding-top: 7.5pt; border-bottom: medium none; mso-border-top-alt: solid #bbe9ff .75pt" valign="top"> <p class="MsoNormal" style="margin-bottom: 12pt"><span style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">姝e垯琛ㄨ揪寮忓箍娉涘簲鐢ㄤ簬瑙f瀽鍣ㄤ腑銆傚畠浠氬父琚敤鏉ヤ綔涓?span lang="EN-US">鈥?/span>榛戠洅<span lang="EN-US">鈥?/span>涓庣▼搴忛昏緫鑱旂郴鍦ㄤ竴璧楓傚姝e垯琛ㄨ揪寮忓紩鎿庡湪鎵ц鏌愪簺瑙f瀽宸ヤ綔涔嬪悗錛岃皟鐢ㄧ敤鎴瘋嚜瀹氫箟琛屼負銆傚姞鍏ユ柊鐨勮嚜瀹氫箟琛屼負錛岄渶瑕侀噸鏂板畾涔夊師鏉ョ殑鏍煎眬錛岀劧鍚庣矘璐村埌紼嬪簭閫昏緫涓傝嚜瀹氫箟琛屼負瓚婂錛屾瑙勮〃杈懼紡鐨勪紭鍔胯秺灝忋?span lang="EN-US"><br><br>Ragel</span>鏄竴涓彲浠ユ牴鎹敤鎴峰畾涔夌殑姝e垯琛ㄨ揪寮忔垨鏄敱姝e垯琛ㄨ揪寮忕敓鎴愮殑鐘舵佸浘鏉ョ敓鎴愬仴澹殑錛屾棤渚濊禆鐨勫彲鎵ц浠g爜錛屽寘鎷?span lang="EN-US">C</span>錛?span lang="EN-US">C++</span>錛?span lang="EN-US">Object-C, Java, Ruby </span>絳夌瓑<span lang="EN-US">. </span>鍙互鐏墊椿鎺у埗宸茬粡鐢熸垚鐘舵佹満鐨勫彉鍔紝鍒╃敤宸茬粡宓屽叆鑷畾涔夎涓虹殑妯″紡閲嶆瀯鎵弿鍣?span lang="EN-US"><br><br>Ragel</span>鍩轟簬浠諱綍姝h璇█鑳借杞寲涓烘湁闄愮姸鎬佽嚜鍔ㄦ満鐨勫師鐞?span lang="EN-US"><br><br></span>鍩烘湰鐨勪嬌鐢ㄦ楠ゅ涓?span lang="EN-US">:<br><br></span>棣栧厛<span lang="EN-US">,</span>鏍規嵁浣犵殑涓氬姟嫻佺▼閫昏緫涓庨渶瑕?span lang="EN-US">,</span>鎸夌収<span lang="EN-US">ragel</span>鎻愪緵鐨勮娉曚笌鍏抽敭瀛楃紪鍐?span lang="EN-US">.rl</span>鏂囦歡<span lang="EN-US"><br><br>1</span>錛?span lang="EN-US">        </span>緙栧啓<span lang="EN-US">.rl</span>鏂囦歡<span lang="EN-US">, </span>濡備笅鎵紺猴細<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="background: #f3f8d7; text-align: right" align="right"><b><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma"><a ><span style="mso-bidi-font-family: arial">[Copy to clipboard]</span></a> <a ><span style="mso-bidi-font-family: arial">[ <span id="code0_symbol">-</span> ]</span></a><o:p></o:p></span></b></p> <p class="MsoNormal" style="background: #f3f8d7; text-align: left" align="left"><b><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">CODE:<o:p></o:p></span></b></p> <p class="MsoNormal" style="background: #fdfff2"><span lang="EN-US" style="font-size: 12pt; color: #333333; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">/*<br>* to parse a string started with 鈥渢able鈥?or 鈥渄iv鈥?br>*/<br><br>#include <stdlib.h><br>#include <string.h><br>#include <stdio.h><br><br>%%{<br>                #</span><span style="font-size: 12pt; color: #333333; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">鐘舵佹満鐨勫悕瀛?span lang="EN-US">(</span>蹇呴』鏈変竴涓悕瀛楄屼笖蹇呴』絎﹀悎鍛藉悕瑙勫垯<span lang="EN-US">,</span>鍜屽彉閫氱殑鍙橀噺澹版槑涓鏍?span lang="EN-US">)<br>        machine par_str;<br>        write data;<br>}%%<br>//</span>鍑芥暟澹版槑<span lang="EN-US">,</span>鐢ㄤ簬鍦ㄧ敤鎴瘋嚜瀹氫箟琛屼負涓皟鐢?span lang="EN-US">,</span>鐢ㄥ埌浜嗗弬鏁扮殑浼犻?span lang="EN-US">,</span>姝ゅ嚱鏁頒篃鍙互鏄被鎴愬憳鍑芥暟<span lang="EN-US"><br>void printtable(int len)<br>{<br>   printf("there is a table,length is:%d\n",len);<br>}<br><br>//</span>鍙﹀涓涓嚱鏁?span lang="EN-US">,</span>鍔熻兘鍚屼笂<span lang="EN-US">,</span>鍙槸鍙傛暟浼犻掔敤鐨勬槸寮曠敤浼犻?span lang="EN-US"><br>void printdiv(char *p)<br>{<br>  printf("%s\n",(*p));<br>}<br>//</span>涓誨鐞嗗嚱鏁?span lang="EN-US"><br>void par_str( char *str,int len )<br>{<br>        char *p = str, *pe = str + strlen( str );<br>        int cs;        //</span>鐘舵佹満鍏抽敭瀛?span lang="EN-US">,</span>鐢ㄤ簬璇存槑褰撴槑鐘舵?span lang="EN-US">,</span>浠ユ暣鍨嬪兼爣璇?span lang="EN-US">(current status</span>鐨勭緝鍐?span lang="EN-US">)<br>                //</span>鐘舵佹満鑷畾涔夎涓哄潡<span lang="EN-US"><br>        %%{<br>                        #</span>璋冪敤鑷畾涔夊嚱鏁?span lang="EN-US"><br>                        action see_table {<br>                                 printtable(len);<br>                }<br>               #invoke prindiv function to show the table information, as same as above<br>               action see_div { <br>                                  printdiv(p);<br>               }<br>               #</span>姝e垯琛ㄨ揪寮忓0鏄?span lang="EN-US">,</span>鐢ㄤ簬鍦ㄧ姸鎬佹満鍒濆鍖栨椂<span lang="EN-US">,</span>鎸夌収姝よ鍒欏尮閰嶇洰鏍?span lang="EN-US"><br>               main := <br>                                ([t][a][b][l][e]@see_table) ([d][i][v]@see_div)+'\n';<br>               # </span>鍒濆鍖?span lang="EN-US"><br>               write init;<br>               write exec;<br>        }%%<br><br>                if ( cs < par_str_first_final )<br>                fprintf( stderr, "par_str: there was an error\n" ); <br>};<br><br>#define BUFSIZE 1024<br>//</span>涓誨嚱鏁?span lang="EN-US">,</span>鐢ㄤ簬嫻嬭瘯鐢熸垚鐨勭姸鎬佹満<span lang="EN-US"><br>int main()<br>{<br>        char buf[BUFSIZE];<br>        while ( fgets( buf, sizeof(buf), stdin ) != 0 ) <br>{<br>par_str(buf,10);<br>}<br>                return 0;<br>}<o:p></o:p></span></span></p> <p class="MsoNormal" style="margin-bottom: 12pt"><span lang="EN-US" style="font-size: 12pt; color: #333333; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma"><br></span><span style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">鎺ヤ笅鏉?span lang="EN-US">,</span>鐢?span lang="EN-US">ragel</span>鍛戒護鐢熸垚鐩殑璇█鏂囦歡<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="background: #f3f8d7; text-align: left" align="left"><b><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">CODE:<o:p></o:p></span></b></p> <p class="MsoNormal" style="background: #fdfff2"><span lang="EN-US" style="font-size: 12pt; color: #333333; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">ragel -o test.cpp test.rl<o:p></o:p></span></p> <p class="MsoNormal" style="margin-bottom: 12pt"><span lang="EN-US" style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma"><br></span><span style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">鐢ㄤ唬鐮佺敓鎴愬伐鍏?span lang="EN-US">,</span>鐩存帴鐢熸垚鍙墽琛屼唬鐮?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="background: #f3f8d7; text-align: left" align="left"><b><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">CODE:<o:p></o:p></span></b></p> <p class="MsoNormal" style="background: #fdfff2"><span lang="EN-US" style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">rlcodegen -o hello.cpp test.cpp<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma"><br></span><span style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma">鏈鍚庣紪鍐欏姝や唬鐮佺殑<span lang="EN-US">Makefile,make........<o:p></o:p></span></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma"><br style="mso-special-character: line-break" clear="all"><span style="color: #333333"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"> <td style="padding-right: 7.5pt; padding-left: 7.5pt; padding-bottom: 1.5pt; padding-top: 1.5pt" valign="bottom"> <p class="MsoNormal"><span lang="EN-US" style="font-size: 12pt; color: #333333; font-family: 瀹嬩綋; mso-bidi-font-family: tahoma"><o:p> </o:p></span></p></td></tr></tbody></table> <p class="MsoNormal"><span lang="EN-US" style="font-size: 12pt; font-family: 瀹嬩綋; mso-bidi-font-family: arial"><o:p> </o:p></span></p><img src ="http://m.shnenglu.com/woaidongmao/aggbug/70245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/woaidongmao/" target="_blank">鑲ヤ粩</a> 2008-12-24 15:18 <a href="http://m.shnenglu.com/woaidongmao/archive/2008/12/24/70245.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鐘舵佹満鐨勫簲鐢ㄥ疄渚?---鐢靛瓙琛?/title><link>http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69416.html</link><dc:creator>鑲ヤ粩</dc:creator><author>鑲ヤ粩</author><pubDate>Sun, 14 Dec 2008 11:33:00 GMT</pubDate><guid>http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69416.html</guid><wfw:comment>http://m.shnenglu.com/woaidongmao/comments/69416.html</wfw:comment><comments>http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69416.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/woaidongmao/comments/commentRss/69416.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/woaidongmao/services/trackbacks/69416.html</trackback:ping><description><![CDATA[<p></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 瀹嬩綋; mso-bidi-font-family: arial">  </span><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 瀹嬩綋; mso-bidi-font-family: arial">鐪嬬湅灝忔椂鍊欑帺鐨?span lang="EN-US">5</span>鍧楅挶閭g鏈綆鍗曠殑鐢靛瓙琛ㄣ傚彧鏈?span lang="EN-US">2</span>涓寜閽氨鑳芥搷浣?鏆備笖縐頒負鎸夐挳<span lang="EN-US">A</span>鍜屾寜閽?span lang="EN-US">B)銆?br>  </span>鐜扮粰鍑轟竴涓畬鏁寸殑鍔熻兘鏂囧瓧鎻忚堪錛?span lang="EN-US"><br>     </span>鍦ㄦ樉紺烘椂闂存椂鎸?span lang="EN-US">A</span>錛屽睆騫曟樉紺哄彉鎴愭棩鏈?span lang="EN-US"><br>     </span>鍦ㄦ樉紺烘棩鏈熸椂鎸?span lang="EN-US">A</span>錛屽睆騫曟樉紺哄彉鎴愮閽?span lang="EN-US"><br>     </span>鍦ㄦ樉紺虹閽熸椂鎸?span lang="EN-US">A</span>錛屽睆騫曟樉紺哄彉鎴愭椂闂?span lang="EN-US"><br>     </span>鍦ㄦ樉紺虹閽熸椂鎸?span lang="EN-US">B</span>錛岀閽熷綊<span lang="EN-US">0<br>     </span>鍦ㄦ樉紺烘椂闂存椂鎸?span lang="EN-US">B</span>錛屽睆騫?鏃墮棿銆佹棩鏈熶氦鏇挎樉紺恒?span lang="EN-US"><br>     </span>鍦ㄦ椂闂淬佹棩鏈熶氦鏇挎樉紺烘椂鎸?span lang="EN-US">B</span>錛屽睆騫?span lang="EN-US">鈥?/span>鏃?span lang="EN-US">鈥?/span>闂儊<span lang="EN-US"><br>     </span>鍦?span lang="EN-US">鈥?/span>鏃?span lang="EN-US">鈥?/span>闂儊鏃舵寜<span lang="EN-US">B</span>錛屽睆騫?span lang="EN-US">鈥?/span>鏃?span lang="EN-US">鈥?/span>鍔?span lang="EN-US">1</span>錛岃秴榪?span lang="EN-US">23</span>鍥?span lang="EN-US">0<br>     </span>鍦?span lang="EN-US">鈥?/span>鏃?span lang="EN-US">鈥?/span>闂儊鏃舵寜<span lang="EN-US">A</span>錛屽睆騫?span lang="EN-US">鈥?/span>鍒?span lang="EN-US">鈥?/span>闂儊<span lang="EN-US"><br>     </span>鍦?span lang="EN-US">鈥?/span>鍒?span lang="EN-US">鈥?/span>闂儊鏃舵寜<span lang="EN-US">B</span>錛屽睆騫?span lang="EN-US">鈥?/span>鍒?span lang="EN-US">鈥?/span>鍔?span lang="EN-US">1</span>錛岃秴榪?span lang="EN-US">59</span>鍥?span lang="EN-US">0<br>     </span>鍦?span lang="EN-US">鈥?/span>鍒?span lang="EN-US">鈥?/span>闂儊鏃舵寜<span lang="EN-US">A</span>錛屽睆騫?span lang="EN-US">鈥?/span>鏈?span lang="EN-US">鈥?/span>闂儊<span lang="EN-US"><br>     </span>鍦?span lang="EN-US">鈥?/span>鏈?span lang="EN-US">鈥?/span>闂儊鏃舵寜<span lang="EN-US">B</span>錛屽睆騫?span lang="EN-US">鈥?/span>鏈?span lang="EN-US">鈥?/span>鍔?span lang="EN-US">1</span>錛岃秴榪?span lang="EN-US">12</span>鍥?span lang="EN-US">0<br>     </span>鍦?span lang="EN-US">鈥?/span>鏈?span lang="EN-US">鈥?/span>闂儊鏃舵寜<span lang="EN-US">A</span>錛屽睆騫?span lang="EN-US">鈥?/span>鏃?span lang="EN-US">鈥?/span>闂儊<span lang="EN-US"><br>     </span>鍦?span lang="EN-US">鈥?/span>鏃?span lang="EN-US">鈥?/span>闂儊鏃舵寜<span lang="EN-US">B</span>錛屽睆騫?span lang="EN-US">鈥?/span>鏃?span lang="EN-US">鈥?/span>鍔?span lang="EN-US">1</span>錛岃秴榪?span lang="EN-US">31</span>鍥?span lang="EN-US">0<br>     </span>鍦?span lang="EN-US">鈥?/span>鏃?span lang="EN-US">鈥?/span>闂儊鏃舵寜<span lang="EN-US">A</span>錛屽睆騫曞洖鍒版椂闂存樉紺?span lang="EN-US"><br><br>    </span>濡傛灉鎸夌収鏂版墜鐨勬濊礬錛屽皾璇曞幓鐢繪祦紼嬪浘錛屽緢蹇氨浼氶櫡鍏ヤ竴澶撮浘姘達細浣犱細鍙戠幇瀹炵幇榪欎釜鍔熻兘鐨勭▼搴忔牴鏈氨娌℃湁<span lang="EN-US">鈥?/span>紜畾鐨勬祦紼?span lang="EN-US">鈥?/span>銆傚洜涓虹▼搴忓疄闄呮祦紼嬫槸鏍規嵁浜虹殑鎿嶄綔鑰屽彉鍖栫殑銆傜▼搴忚繍琛屽埌浠涔堝湴鏂癸紝瀹屽叏鍙栧喅浜庝袱涓敭鐨勬搴忥紝鏈夋棤鏁扮嬈″簭緇勫悎錛屾牴鏈笉鍙兘鐢誨嚭嫻佺▼鍥炬潵銆?span lang="EN-US"><br>    </span>浣嗘槸鎴戜滑浼氬彂鐜幫紝榪欎釜鐢靛瓙琛ㄥ姛鑳界殑<span lang="EN-US">鈥?/span>璇█鎻忚堪<span lang="EN-US">鈥?/span>鍦ㄨ娉曚笂浼間箮鏈夋煇縐嶈寰嬶紝灝辨槸錛?span lang="EN-US"><br>    </span>褰撶郴緇熷浜庢煇鐘舵侊紙<span lang="EN-US">S1</span>錛夋椂錛屽鏋滃彂鐢熶簡浠涔堜簨鎯?span lang="EN-US">(E)</span>錛屽氨鎵ц鏌愬姛鑳?span lang="EN-US">(F)</span>錛岀劧鍚庣郴緇熷彉鎴愭柊鐘舵侊紙<span lang="EN-US">S2</span>錛?span lang="EN-US"><br>    </span>鍙鑳界敤涓婇潰榪欏彞璇濇弿榪扮殑緋葷粺錛岄兘鍙互鐢ㄤ竴縐嶇姸鎬佽煩杞満鍒跺緢鏂逛究鐨勫疄鐜?span lang="EN-US"><br></span>錛屽茍涓斾竴鍙ヨ瘽鍏跺疄灝辨槸涓涓?span lang="EN-US">if(...)</span>錛屾棤璁烘湁澶氬皯澶氬鏉傜殑鍔熻兘錛屽彧瑕佽兘鐢ㄤ笂闈㈣繖鍙ヨ瘽鎻忚堪錛岄兘鍙互閫氳繃鐘舵佹満緙栫▼瀹炵幇銆?span lang="EN-US">   <br>   <br></span>鎴戜滑灝嗗畠浠娊璞°傛暣涓郴緇熶腑鏈?span lang="EN-US">2</span>涓簨浠跺垎鍒槸錛?span lang="EN-US">A</span>鎸変笅錛?span lang="EN-US">B</span>鎸変笅<span lang="EN-US"><br><br>    A</span>鎸変笅<span lang="EN-US">(</span>鍙互鏄腑鏂?span lang="EN-US">)</span>鏃舵墽琛岋細<span lang="EN-US"><br>{<br>     if(Status==TIME)  //</span>褰撴樉紺烘椂闂存椂鎸変笅<span lang="EN-US">A</span>閿?span lang="EN-US"><br>     {<br>        Status=DATE    //</span>鍙樻垚鏄劇ず鏃ユ湡<span lang="EN-US"><br>     }<br>     if(Status==DATE)  //</span>褰撴樉紺烘棩鏈熸椂鎸変笅<span lang="EN-US">A</span>閿?span lang="EN-US"><br>     {<br>        Status=SEC     //</span>鍙樻垚鏄劇ず縐掗挓<span lang="EN-US"><br>     }<br>     if(Status==SEC)  //</span>褰撴樉紺虹閽熸椂鎸変笅<span lang="EN-US">A</span>閿?span lang="EN-US"><br>     {<br>        Status=TIME     //</span>鍙樻垚鏄劇ず鏃墮棿<span lang="EN-US"><br>     }<br>     if(Status==SET_HOUR)  //</span>褰撹緗?span lang="EN-US">鈥?/span>灝忔椂<span lang="EN-US">鈥?/span>鏃舵寜涓?span lang="EN-US">A</span>閿?span lang="EN-US"><br>     {<br>        Status=SET_MINUT        //</span>鍙樻垚璁劇疆<span lang="EN-US">鈥?/span>鍒嗛挓<span lang="EN-US">鈥?br>     }<br>     if(Status==SET_MINUT)  //</span>褰撹緗?span lang="EN-US">鈥?/span>鍒嗛挓<span lang="EN-US">鈥?/span>鏃舵寜涓?span lang="EN-US">A</span>閿?span lang="EN-US"><br>     {<br>        Status=SET_MONTH        //</span>鍙樻垚璁劇疆<span lang="EN-US">鈥?/span>鏈?span lang="EN-US">鈥?br>     }<br>     .....<br>     .....<br>}<br>  <br><br>    B</span>鎸変笅<span lang="EN-US">(</span>鍙互鏄腑鏂?span lang="EN-US">)</span>鏃舵墽琛岋細<span lang="EN-US"><br>{<br>      if(Status==SEC)  //</span>褰撴樉紺虹閽熸椂鎸変笅<span lang="EN-US">B</span>閿?span lang="EN-US"><br>     {<br>        Secound=0     //</span>縐掑綊<span lang="EN-US">0<br>     }<br>     if(Status==TIME)  //</span>褰撴樉紺烘椂闂存椂鎸変笅<span lang="EN-US">B</span>閿?span lang="EN-US"><br>     {<br>        Status=TIMEDATE    //</span>鍙樻垚鏃墮棿鏃ユ湡浜ゆ浛鏄劇ず<span lang="EN-US"><br>     } <br>     if(Status==TIMEDATE)  //</span>褰撴棩鏈熶氦鏇挎樉紺烘椂鎸変笅<span lang="EN-US">B</span>閿?span lang="EN-US"><br>     {<br>        Status=SET_HOUR    //</span>鍙樻垚璁劇疆<span lang="EN-US">鈥?/span>鏃?span lang="EN-US">鈥?/span>錛堟椂闂儊錛?span lang="EN-US"><br>     }<br>     if(Status==SET_HOUR)  //</span>褰撹緗?span lang="EN-US">鈥?/span>鏃?span lang="EN-US">鈥?/span>鏃舵寜涓?span lang="EN-US">B</span>閿?span lang="EN-US"><br>     {<br>        Status=Hour++      //</span>鏃跺姞<span lang="EN-US">1<br>        if(Hour>23) Hour="0";      <br>     }<br><br>     .....<br>     .....        <br>}<br><br>     </span>鍜岃璦鎻忚堪瀹屽叏涓鑷達紝寰堝揩灝辮兘鍐欏畬紼嬪簭銆傝繖灝辨槸鏈綆鍗曠殑鐘舵佹満鎬濇兂銆?span lang="EN-US"><br>     </span>褰撶劧錛屼笂榪頒竴澶у爢<span lang="EN-US">if</span>鍙互鐢?span lang="EN-US">switch case</span>鏉ュ疄鐜?span lang="EN-US"><br>     </span>瀹為檯涓紝澶ч噺鐨勫茍鍙戣繃紼嬮兘鍙互琛ㄨ堪涓虹姸鎬佽煩杞叧緋伙紝浠庤屽皢<span lang="EN-US">CPU</span>浠庤繃紼嬩腑瑙f斁鍑烘潵錛屽彧闇澶勭悊鐘舵佸叧緋伙紝鍥犱負鐪熸闇瑕?span lang="EN-US">CPU</span>鐨勬槸鐘舵佸彉鍖栫殑鏃跺埢錛岃屼笉鏄繃紼嬩腑澶ч噺鐨勭瓑寰咃紝榪欐牱澶ч噺鐨勫茍鍙戣繃紼嬮兘鍙互騫惰澶勭悊銆?span lang="EN-US"><?xml:namespace prefix = o /><o:p></o:p></span></span></p><img src ="http://m.shnenglu.com/woaidongmao/aggbug/69416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/woaidongmao/" target="_blank">鑲ヤ粩</a> 2008-12-14 19:33 <a href="http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69416.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>浠涔堟槸鏈夐檺鐘舵佹満FSMhttp://m.shnenglu.com/woaidongmao/archive/2008/12/14/69415.html鑲ヤ粩鑲ヤ粩Sun, 14 Dec 2008 10:54:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/12/14/69415.htmlhttp://m.shnenglu.com/woaidongmao/comments/69415.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/12/14/69415.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/69415.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/69415.html綆浠?span lang="EN-US">

鏈夐檺鐘舵佹満錛堜互涓嬬敤FSM鎸囦唬錛夋槸涓縐嶇畻娉曟濇兂錛岀畝鍗曡岃█錛屾湁闄愮姸鎬佹満鐢變竴緇勭姸鎬併佷竴涓垵濮嬬姸鎬併佽緭鍏ュ拰鏍規嵁杈撳叆鍙婄幇鏈夌姸鎬佽漿鎹負涓嬩竴涓姸鎬佺殑杞崲鍑芥暟緇勬垚銆傚湪Gof鐨?span lang="EN-US">23縐嶈璁℃ā寮忛噷鐨?span lang="EN-US">state妯″紡鏄竴縐嶉潰鍚戝璞$殑鐘舵佹満鎬濇兂錛屽彲浠ラ傚簲闈炲父澶嶆潅鐨勭姸鎬佺鐞嗐?span lang="EN-US">
鐜?鍦紝FSM琚櫘閬嶇敤浜庢悳绱㈠紩鎿庣殑鍒嗚瘝銆佺紪璇戝櫒瀹炵幇鍜屾垜浠櫘閬嶅叧娉ㄧ殑娓告垙寮鍙戜腑銆傛父鎴忓紑鍙戜腑錛岄氬父鐢?span lang="EN-US">FSM瀹炵幇NPC鎺у埗錛屽褰?span lang="EN-US">NPC鍙楀埌鏀誨嚮鏃舵牴鎹仴搴楓佸姏閲忕瓑閫夋嫨閫冭窇榪樻槸鍙嶆敾鐨勮涓猴紝涓鑸槸鐢?span lang="EN-US">FSM瀹炵幇鐨勩?span lang="EN-US">FSM鐨勫疄鐜版柟娉曟湁寰堝縐嶏紝涓嶈兘綆鍗曞湴璇村浼樺鍔o紝浣嗙幇浠e紑鍙戜腑錛屼竴鑸兘姣旇緝鎺ㄨ崘闈㈠悜瀵硅薄鐨勫疄鐜版柟寮忥細鍥犱負鍙噸鐢ㄦу拰鍋ュ.鎬ф洿楂橈紝鑰屼笖褰撻渶姹傚彉鏇寸殑鏃跺欙紝涔熸湁寰堝ソ鐨勯傚簲鎬с?span lang="EN-US">
瀹炶返
鐞?璁轟粠瀹炶返涓潵錛屼篃瑕佸洖鍒板疄璺典腑鍘匯傛垜浠幇鍦ㄩ氳繃瀹炰緥鏉ユ帰绱竴涓?span lang="EN-US">FSM鐨勫疄鐜板惂銆傞鍏堝亣璁炬湁榪欐牱涓涓笘鐣岋紙World錛夛紝涓栫晫閲屽彧鏈変竴鍙版案涓嶇己涔忓姩鍔涚殑姹借濺 錛?span lang="EN-US">Car錛夛紝姹借濺鏄涓栦唬鐨勶紝娌℃湁娌歸棬鏂瑰悜鐩樹箣綾葷殑钀藉悗璁懼錛屽彧鏈変袱涓簰鏂ョ殑鎸夐挳鈥斺?/span>鍋滄錛?span lang="EN-US">Stop錛夊拰琛岃繘錛?span lang="EN-US">Run錛夛紝闅忕潃鏃墮棿鐨勬祦閫濓紝姹借濺鏍規嵁椹鵑┒鍛樼殑鎿嶄綔璧拌蛋鍋滃仠銆備笅闈㈢殑浠g爜鍙互瀹炵幇榪欑鍔熻兘錛?span lang="EN-US">
       while True:
       key = get_key() # 鎸変笅浠涔堥敭
       if key == "stop":
              stop(car)
       elif key == "run":
              go(car)
       keep(car) #
淇濇寔鍘熸?span lang="EN-US">  

瀹?鎴愪簡鍔熻兘鑰屼笖鐩磋銆佺畝媧佺殑紼嬪簭鍛樹竾宀侊紒浣嗚繖鏃跺欏鎴鳳紙絳栧垝鎴栬呯帺瀹訛級瑙夊緱璧拌蛋鍋滃仠澶病鎰忔濅簡錛屼粬浠兂瑕佹帀澶淬佸乏杞拰鍙寵漿鐨勫姛鑳斤紝鎴戜滑灝辮鍦?span lang="EN-US">while寰幆 閲屽鍔犳洿澶氱殑if...else鍒嗘敮錛涗粬浠兂瑕佹洿澶氱殑杞︼紝鎴戜滑灝辮瑕佸湪姣忎竴涓垎鏋濋噷澧炲姞寰幆錛涗粬浠笉浠呬粎鎯寵Car浜嗭紝浠栦滑榪樿瑕佺帺Truck錛岃繖鏃舵垜浠?灝遍渶瑕佸湪鍒嗘灊鐨勫驚鐜噷鍒ゆ柇褰撳墠鐨勮濺鏄惁鏀寔榪欎釜鎿嶄綔錛堝Truck鐨勮鍗歌揣鐗?span lang="EN-US">Car灝變笉鏀寔錛夛紱浠栦滑鈥︹?
榪欎釜while寰幆緇堜簬鏃犻檺鍦板簽澶ц搗鏉ワ紝鎴戜滑璁よ瘑鍒拌繖鏍風殑璁捐鐨勭‘鏄湁鐐歸棶棰樼殑錛屾墍浠ユ垜浠皾璇曠敤鍙︿竴縐嶆柟娉曞幓瀹炵幇FSM銆傞鍏堟垜浠潵瀹炵幇姹借濺錛?span lang="EN-US">Car錛夛細
       class Car(object):
       def stop(self):
              print "Stop!!!"
       def go(self):
              print "Goooooo!!!" 

鍙湁涓や釜鏂規硶stop鍜?span lang="EN-US">go錛屽垎鍒墽琛?span lang="EN-US">Stop鍜?span lang="EN-US">Run涓や釜鎸夐挳鍔熻兘銆傛帴涓嬫潵鎴戜滑緙栧啓涓や釜鐘舵佺鐞嗙殑綾伙紝鐢ㄤ互澶勭悊褰撴寜閽鎸変笅銆佸脊璧峰拰淇濇寔鏃墮渶瑕佸伐浣滅殑嫻佺▼錛?span lang="EN-US">
class stop_fsm(base_fsm):
       def enter_state(self, obj):
              print "Car%s enter stop state!"%(id(obj))
 
       def exec_state(self, obj):
              print "Car%s in stop state!"%(id(obj))
              obj.stop()
 
       def exit_state(self, obj):
              print "Car%s exit stop state!"%(id(obj)) 
class run_fsm(base_fsm):
       def enter_state(self, obj):
              print "Car%s enter run state!"%(id(obj))
 
       def exec_state(self, obj):
              print "Car%s in run state!"%(id(obj))
              obj.go()
 
       def exit_state(self, obj):
              print "Car%s exit run state!"%(id(obj)) 

stop_fsm鍜?span lang="EN-US">run_fsm閮界戶鎵胯嚜base_fsm錛?span lang="EN-US">base_fsm鏄竴涓函铏氱殑鎺ュ彛綾伙細
class base_fsm(object):
       def enter_state(self, obj):
              raise NotImplementedError()
 
       def exec_state(self, obj):
              raise NotImplementedError()
 
       def exit_state(self, obj):
              raise NotImplementedError() 

enter_state 鍦?span lang="EN-US">obj榪涘叆鏌愮姸鎬佺殑鏃跺欒皟鐢?span lang="EN-US">鈥斺?/span>閫氬父鐢ㄦ潵鍋氫竴浜涘垵濮嬪寲宸ヤ綔錛?span lang="EN-US">exit_state涔熺寮鏌愮姸鎬佺殑鏃跺欒皟鐢?span lang="EN-US">鈥斺?/span>閫氬父鍋氫竴浜涙竻鐞嗗伐浣滐紱鑰?span lang="EN-US"> exec_state鍒欏湪姣忎竴甯х殑鏃跺欓兘浼氳璋冪敤錛岄氬父鍋氫竴浜涘繀瑕佺殑宸ヤ綔錛屽媯嫻嬭嚜宸辯殑娑堟伅闃熷垪騫跺鐞嗘秷鎭瓑銆傚湪stop_fsm鍜?span lang="EN-US">run_fsm涓や釜綾?鐨?span lang="EN-US">exec_state鍑芥暟涓紝灝辮皟鐢ㄤ簡瀵硅薄鐨?span lang="EN-US">stop鍜?span lang="EN-US">go鍑芥暟錛岃姹借濺淇濇寔鍘熸湁鐨勭姸鎬併?span lang="EN-US">
鑷崇幇鍦ㄤ負姝紝Car榪樻病鏈夋帴瑙﹀埌FSM錛屾墍浠ユ垜浠渶瑕佹彁渚涗竴涓帴鍙o紝鍙互璁╁畠鎷ユ湁涓涓?span lang="EN-US">FSM錛?span lang="EN-US">
       def attach_fsm(self, state, fsm):
              self.fsm = fsm
              self.curr_state = state 

鎴戜滑榪橀渶瑕佷負Car鎻愪緵涓涓姸鎬佽漿鎹㈠嚱鏁幫細
       def change_state(self, new_state, new_fsm):
              self.curr_state = new_state
              self.fsm.exit_state(self)
              self.fsm = new_fsm
              self.fsm.enter_state(self)
              self.fsm.exec_state(self) 

涓?span lang="EN-US">Car鎻愪緵涓涓繚鎸佺姸鎬佺殑鍑芥暟錛?span lang="EN-US">
       def keep_state(self):
              self.fsm.exec_state(self) 

鐜板湪鍙湁涓や釜鐘舵侊紝浣嗘垜浠煡閬撻渶姹傞殢鏃朵細鏀瑰姩錛屾墍浠ユ垜浠渶濂藉紕涓涓姸鎬佹満綆$悊鍣ㄦ潵綆$悊榪欎簺鐘舵侊細
class fsm_mgr(object):
       def __init__(self):
              self._fsms = {}
              self._fsms[0] = stop_fsm()
              self._fsms[1] = run_fsm()
      
       def get_fsm(self, state):
              return self._fsms[state]
      
       def frame(self, objs, state):
              for obj in objs:
                     if state == obj.curr_state:
                            obj.keep_state()
                     else:
                            obj.change_state(state, self._fsms[state]) 

fsm_mgr鏈閲嶈鐨勫嚱鏁板氨鏄?span lang="EN-US">frame錛屽湪姣忎竴甯ч兘琚皟鐢ㄣ傚湪榪欓噷錛?span lang="EN-US">frame鏍規嵁瀵硅薄鐜板湪鐨勭姸鎬佸拰褰撳墠鐨勮緭鍏ュ喅瀹氳瀵硅薄淇濇寔鐘舵佹垨鑰呮敼鍙樼姸鎬併?span lang="EN-US">
榪欐椂鍊欙紝鎴戜滑鐨勫疄渚嬪熀鏈笂瀹屾垚浜嗐備絾鎴戜滑榪樿鍋氫竴浠朵簨錛屽氨鏄緩绔嬩竴涓笘鐣岋紙World錛夋潵椹卞姩鐘舵佹満錛?span lang="EN-US">
class World(object):
       def init(self):
              self._cars = []
              self._fsm_mgr = fsm_mgr()
              self.__init_car()
 
       def __init_car(self):
              for i in xrange(1):   # 鐢熶駭姹借濺
                     tmp = Car()
                     tmp.attach_fsm(0, self._fsm_mgr.get_fsm(0))
                     self._cars.append(tmp)
 
       def __frame(self):
              self._fsm_mgr.frame(self._cars, state_factory())
 
       def run(self):
              while True:
                     self.__frame()
                     sleep(0.5) 

浠?浠g爜鍙錛?span lang="EN-US">World閲屾湁Car瀵硅薄錛?span lang="EN-US">fsm_mgr瀵硅薄錛涘湪run鍑芥暟閲岋紝姣?span lang="EN-US">0.5s鎵ц涓嬈?span lang="EN-US">__frame鍑芥暟錛?span lang="EN-US">FPS = 2錛夛紝鑰?span lang="EN-US">__frame鍑芥暟鍙槸椹卞姩浜?span lang="EN-US">fsm_mgr鏉ュ埛鏂板璞★紝鏂扮殑鍛戒護鏄粠state_factory鍑芥暟閲屽彇鍑烘潵鐨勶紝榪欎釜鍑芥暟鐢ㄤ互妯℃嫙椹鵑┒鍛樼殑鎿嶄綔錛堟寜涓?span lang="EN-US">Stop鎴栬?span lang="EN-US">Run鎸夐挳涔嬩竴錛夛細
def state_factory():
       return random.randint(0, 1) 

鐜板湪鎴戜滑灝辮鍒濆鍖栦笘鐣岋紙World錛夊彲浠ヨ窇璧鋒垜浠殑FSM浜嗭紒
if __name__ == "__main__":
       world = World()
       world.init()
       world.run() 

鐢?span lang="EN-US">python瑙i噴鍣ㄦ墽琛屼笂闈㈢殑浠g爜錛屾垜浠彲浠ョ湅鍒扮▼搴忎笉鍋滃湴杈撳嚭Car鐨勭姸鎬侊細
......
Car8453392 exit run state!
Car8453392 enter stop state!
Car8453392 in stop state!
Stop!!!
Car8453392 in stop state!
Stop!!!
Car8453392 exit stop state!
Car8453392 enter run state!
Car8453392 in run state!
Goooooo!!!
Car8453392 exit run state!
Car8453392 enter stop state!
Car8453392 in stop state!
Stop!!!
Car8453392 exit stop state!
Car8453392 enter run state!
Car8453392 in run state!
Goooooo!!!
Car8453392 in run state!
Goooooo!!!
Car8453392 exit run state!
Car8453392 enter stop state!
Car8453392 in stop state!
Stop!!!
Car8453392 in stop state!
Stop!!!
Car8453392 exit stop state!
Car8453392 enter run state!
Car8453392 in run state!
Goooooo!!!
...... 

 
緇撹
榪欐椂鍐嶅洖澶存潵鐪嬬湅鎴戜滑涔嬪墠鐨勯棶棰橈細
1
銆佺帺瀹舵兂瑕佸姛鑳芥洿澶氱殑Car錛屾瘮濡傛帀澶淬?span lang="EN-US">
鎴?浠彲浠ラ氳繃涓?span lang="EN-US">Car澧炲姞涓涓皟澶達紙back錛夌殑鏂規硶鏉ユ墽琛屾帀澶達紝鐒跺悗浠?span lang="EN-US">base_fsm涓戶鎵夸竴涓?span lang="EN-US">back_fsm鏉ュ鐞嗚皟澶淬備箣鍚庡湪fsm_mgr閲屽 鍔犱竴涓?span lang="EN-US">back_fsm瀹炰緥錛屽強璁?span lang="EN-US">state_factory浜х敓璋冨ご鎸囦護銆傚惉璧鋒潵浼間箮姣斾箣鍓?span lang="EN-US">while+if鐨勬柟寮忚繕瑕侀夯鐑︿笉灝戯紝鍏跺疄涓嶇劧錛岃繖閲屽彧鏈?span lang="EN-US"> back_fsm鍜屼負fsm_mgr澧炲姞back_fsm瀹炰緥鎵嶆槸鐗規湁鐨勶紝鍏跺畠姝ラ涓ょ鏂規硶閮借鎵ц銆?span lang="EN-US">
2銆佺帺瀹惰鏇村鐨?span lang="EN-US">Car銆?span lang="EN-US">
榪欏浜庨潰鍚戝璞$殑FSM瀹炵幇灝卞お綆鍗曚簡錛屾垜浠彧瑕佹妸World.__init_car閲岀殑鐢熶駭鏁伴噺淇敼涓涓嬪氨琛屼簡錛岃澶氬皯鏈夊灝戙?span lang="EN-US">
3銆佺帺瀹惰鏇村鍨嬪彿鐨勮濺錛屽Truck銆?span lang="EN-US">
浠?span lang="EN-US">Car媧劇敓涓涓?span lang="EN-US">Truck錛岀劧鍚庡鍔犺璐с佸嵏璐х殑鎺ュ彛銆傛渶澶х殑鏀瑰姩鍦ㄤ簬Truck鐘舵佽漿鎹㈢殑鏃跺欓渶瑕佷竴浜涘垽鏂紝濡備笉鑳界洿鎺ヤ粠瑁呰揣鐘舵佽漿鎹㈠埌寮鍔ㄧ姸鎬侊紝鑰屾槸瑁呰揣銆佸仠姝㈠啀寮鍔ㄣ?span lang="EN-US">
閫?榪囪繖鍑犱釜綆鍗曠殑闂鍒嗘瀽錛屾垜浠彲浠ョ湅鍒幫紝浣跨敤闈㈠悜瀵硅薄鐨勬柟寮忔潵璁捐FSM錛屽湪闇姹傚彉鏇寸殑鏃跺欙紝涓鑸兘鍙鍒犱唬鐮侊紝鑰屼粛灝戦渶瑕佹敼鍔ㄥ凡鏈変唬鐮侊紝紼嬪簭鐨勬墿灞曟с侀傚簲鎬у拰鍋ュ.鎬ч兘寰楀緢澶х殑鎻愰珮錛涘洜姝わ紝鍦ㄤ笘鐣屽簽澶с佺墿縐嶇儲澶氥佺姸鎬佸鏉備笖鏉′歡浜ら敊鐨勬父鎴忓紑鍙戜腑搴旂敤闈㈠悜瀵硅薄鐨?span lang="EN-US">FSM瀹炲湪鏄槑鏅轟箣閫夈傝繕鏈変竴鐐癸紝闈㈠悜瀵硅薄鐨?span lang="EN-US"> FSM鍙互闈炲父瀹規槗鍦版ā鎷熸秷鎭満鍒訛紝榪欐湁鍒╀簬妯″潡娓呮櫚鍖栵紝鏇村鏄撹璁″嚭姝d氦鐨勭▼搴忋?

 



鑲ヤ粩 2008-12-14 18:54 鍙戣〃璇勮
]]>
涓篖inux搴旂敤鏋勯犳湁闄愮姸鎬佹満鏂規硶http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69414.html鑲ヤ粩鑲ヤ粩Sun, 14 Dec 2008 10:40:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/12/14/69414.htmlhttp://m.shnenglu.com/woaidongmao/comments/69414.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/12/14/69414.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/69414.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/69414.html闃呰鍏ㄦ枃

鑲ヤ粩 2008-12-14 18:40 鍙戣〃璇勮
]]>
娓告垙涓殑鏈夐檺鐘舵佹満http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69411.html鑲ヤ粩鑲ヤ粩Sun, 14 Dec 2008 09:56:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/12/14/69411.htmlhttp://m.shnenglu.com/woaidongmao/comments/69411.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/12/14/69411.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/69411.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/69411.html榪欐槸GAMEGEMS涓殑絎笁绔犵殑絎竴閮ㄥ垎錛岀暘鐨勪笉濂姐備綘鍙互鐩存帴闃呰鍘熸枃銆傚師鏈互涓鴻繖鏄漢宸ユ櫤鑳界殑閮ㄥ垎錛岀湅鍒頒竴鍗婃墠鍙戠幇鍙槸涓涓畝鍗曠殑妗嗘灦銆傚鏋滀綘鎯沖浜哄伐鏅鴻兘錛岃繖閲屾病鏈夛紝灝變笉瑕佹氮璐規椂闂翠簡銆傜敱浜庢湰浜烘按騫蟲湁闄愶紝鍏朵腑闅懼厤浼氬嚭鐜板師鍒欐х殑閿欒錛屽笇鏈涙寚姝c?span lang="EN-US">

鍏抽敭瀛楋細鏈夐檺鐘舵佹満銆佺姸鎬併佽緭鍏ャ佺姸鎬佽漿鎹€佽緭鍑虹姸鎬佸綋鍓嶇姸鎬?span lang="EN-US">

涓涓湁闄愮姸鎬佹満綾?span lang="EN-US">
鍦ㄨ繖綃囨枃绔犱腑錛屾垜浠垱寤轟簡涓涓氱敤鐨勬湁闄愮姸鎬佹満錛?span lang="EN-US">FSM錛夌殑C++綾匯傛湁闄愮姸鎬佹満鏄綆楁満縐戝鍜屾暟瀛︾悊璁虹殑鎶借薄錛屽畠鍦ㄨ澶氱殑鏂歸潰鏄緢鏈夌敤澶勭殑銆傝繖閲屾垜浠笉鍘昏瑙f湁闄愮姸鎬佹満鐨勭悊璁轟笂鐨勭煡璇嗐傝屾槸璁插浣曞疄鐜頒竴涓?span lang="EN-US">鈥?/span>鏈夐檺鐘舵佹満鈥?/span>錛?span lang="EN-US">鈥?/span>鏈夐檺鐘舵佹満鈥?/span>鍦ㄦ父鎴忕殑浜哄伐鏅鴻兘鏂歸潰鏄緢鏈夌敤澶勭殑銆?span lang="EN-US">

鈥?/span>鏈夐檺鐘舵佹満鈥?/span>鏄敱鏈夐檺鐨勭姸鎬佺粍鎴愮殑涓涓満鍒躲備竴涓?span lang="EN-US">鈥?/span>鐘舵?span lang="EN-US">鈥?/span>灝辨槸涓涓姸鍐點備綘鑰冭檻涓涓嬮棬錛涘畠鐨?span lang="EN-US">鈥?/span>鐘舵?span lang="EN-US">鈥?/span>鏈?span lang="EN-US">鈥?/span>寮鈥?/span>鎴?span lang="EN-US">鈥?/span>鍏?span lang="EN-US">鈥?/span>浠ュ強鈥?/span>閿?span lang="EN-US">鈥?/span>涓?span lang="EN-US">鈥?/span>鏈攣鈥?/span>銆?span lang="EN-US">

瀵逛簬涓涓?span lang="EN-US">鈥?/span>鏈夐檺鐘舵佹満鈥?/span>錛屽畠搴旇鏈変竴涓?span lang="EN-US">鈥?/span>杈撳叆鈥?/span>銆傝繖涓?span lang="EN-US">鈥?/span>杈撳叆鈥?/span>鍙互褰卞搷鈥?/span>鐘舵佽漿鎹?span lang="EN-US">鈥?/span>銆?span lang="EN-US">鈥?/span>鏈夐檺鐘舵佹満鈥?/span>搴旇鏈変竴涓畝鍗曪紙鎴栧鏉傦級鐨勭姸鎬佽漿鎹㈠嚱鏁幫紝榪欎釜鍑芥暟鍙互鍐沖畾浠涔堢姸鎬佸彲浠ュ彉鎴?span lang="EN-US">鈥?/span>褰撳墠鐘舵?span lang="EN-US">鈥?/span>銆?span lang="EN-US">

榪欎釜褰撳墠鐨勬柊鐘舵佽縐頒負鈥?/span>鏈夐檺鐘舵佹満鈥?/span>鐨?span lang="EN-US">鈥?/span>鐘舵佽漿鎹?span lang="EN-US">鈥?/span>鐨?span lang="EN-US">鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>銆傚鏋滀綘瀵硅繖涓蹇墊湁浜涜糠鎯戯紝灝辨妸鈥?/span>闂?span lang="EN-US">鈥?/span>鍋氫負鐞嗚В鈥?/span>鏈夐檺鐘舵佹満鈥?/span>鐨勪緥瀛愩傚綋涓涓?span lang="EN-US">鈥?/span>闂?span lang="EN-US">鈥?/span>澶勪簬鈥?/span>鍏抽棴鈥?/span>鐘舵佸拰鈥?/span>閿?span lang="EN-US">鈥?/span>鐘舵侊紝褰撲綘杈撳叆浜?span lang="EN-US">鈥?/span>浣跨敤閽ュ寵鈥?/span>鏃訛紝闂ㄧ殑鐘舵佸彲浠ュ彉鎴?span lang="EN-US">鈥?/span>鏈攣鈥?/span>鐘舵侊紙鍗?span lang="EN-US">鈥?/span>鐘舵佽漿鎹?span lang="EN-US">鈥?/span>鐨勮緭鍑虹姸鎬侊紝涔熷氨鏄棬鐨勫綋鍓嶇姸鎬侊級銆傚綋浣犺緭鍏ヤ簡鈥?/span>浣跨敤鎵?span lang="EN-US">鈥?/span>鏃訛紝闂ㄧ殑鐘舵佸彲浠ヨ漿鎹㈡垚鈥?/span>寮鈥?/span>鐨勭姸鎬併傚綋闂ㄥ浜?span lang="EN-US">鈥?/span>寮鈥?/span>鐨勭姸鎬佹椂錛屾垜浠緭鍏?span lang="EN-US">鈥?/span>浣跨敤鎵?span lang="EN-US">鈥?/span>鏃訛紝浼氫嬌闂ㄧ殑鐘舵侀噸鏂板洖鍒?span lang="EN-US">鈥?/span>鍏?span lang="EN-US">鈥?/span>鐨勭姸鎬併傚綋鈥?/span>闂?span lang="EN-US">鈥?/span>澶勪簬鈥?/span>鍏?span lang="EN-US">鈥?/span>鐨勭姸鎬佹椂錛屾垜浠緭鍏?span lang="EN-US">鈥?/span>浣跨敤閽ュ寵鈥?/span>鏃訛紝榪欏皢浼氫嬌闂ㄩ噸鏂板洖鍒?span lang="EN-US">鈥?/span>閿?span lang="EN-US">鈥?/span>鐨勭姸鎬併傚綋闂ㄥ浜?span lang="EN-US">鈥?/span>閿?span lang="EN-US">鈥?/span>鐨勭姸鎬侊紝鎴戜滑杈撳叆鈥?/span>浣跨敤鎵?span lang="EN-US">鈥?/span>錛屽氨涓嶈兘鎶婇棬鐨勭姸鎬佽漿鎹㈠埌鈥?/span>寮鈥?/span>鐨勭姸鎬侊紝闂ㄤ粛鐒朵細淇濇寔鈥?/span>閿?span lang="EN-US">鈥?/span>鐨勭姸鎬併傝繕鏈夛紝褰撻棬澶勪簬鈥?/span>寮鈥?/span>鐨勭姸鎬佹椂錛屾垜浠緭鍏?span lang="EN-US">鈥?/span>浣跨敤閽ュ寵鈥?/span>鏄笉鑳芥妸闂ㄧ殑鐘舵佽漿鎹㈡垚鈥?/span>閿?span lang="EN-US">鈥?/span>鐨勭姸鎬佺殑銆?span lang="EN-US">

鎬諱箣錛?span lang="EN-US">鈥?/span>鏈夐檺鐘舵佹満鈥?/span>鏄竴涓湁闄愮殑鐘舵佺粍鎴愮殑錛屽叾涓殑涓涓姸鎬佹槸鈥?/span>褰撳墠鐘舵?span lang="EN-US">鈥?/span>銆?span lang="EN-US">鈥?/span>鏈夐檺鐘舵佹満鈥?/span>鍙互鎺ュ彈涓涓?span lang="EN-US">鈥?/span>杈撳叆鈥?/span>錛岃繖涓?span lang="EN-US">鈥?/span>杈撳叆鈥?/span>鐨勭粨鏋滃皢瀵艱嚧涓涓?span lang="EN-US">鈥?/span>鐘舵佽漿鎹?span lang="EN-US">鈥?/span>鐨勫彂鐢燂紙鍗充粠鈥?/span>褰撳墠鐘舵?span lang="EN-US">鈥?/span>杞崲鍒?span lang="EN-US">鈥?/span>杈撳嚭鈥?/span>鐘舵侊級銆傝繖涓?span lang="EN-US">鈥?/span>鐘舵佽漿鎹?span lang="EN-US">鈥?/span>鏄熀浜?span lang="EN-US">鈥?/span>鐘舵佽漿鎹㈠嚱鏁?span lang="EN-US">鈥?/span>鐨勩傜姸鎬佽漿鎹㈠畬鎴愪箣鍚庯紝鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>鍗沖彉鎴愪簡鈥?/span>褰撳墠鐘舵?span lang="EN-US">鈥?/span>銆?span lang="EN-US">

杈撳叆 鐘舵佽漿鎹㈠嚱鏁?span lang="EN-US">
褰撳墠鐘舵?span lang="EN-US">-----
銆嬬姸鎬佽漿鎹?span lang="EN-US">-------------
銆嬭緭鍑虹姸鎬侊紙褰撳墠鐘舵侊級

閭d箞錛屼漢浠槸濡備綍灝嗚繖涓蹇靛簲鐢ㄥ埌娓告垙鐨?span lang="EN-US">AI
緋葷粺涓殑鍛紵鏈夐檺鐘舵佹満鐨勫姛鑳藉緢澶氾細綆$悊娓告垙涓栫晫銆佹ā鎷?span lang="EN-US">NPC
鐨勬濈淮銆佺淮鎶ゆ父鎴忕姸鎬併佸垎鏋愮帺娓告垙鐨勪漢鐨勮緭鍏ワ紝鎴栬呯鐞嗕竴涓璞$殑鐘舵併?span lang="EN-US">

鍋囧鍦ㄤ竴涓啋闄╂父鎴忎腑鏈変竴涓?span lang="EN-US">NPC
錛屽悕瀛楀彲浠ュ彨MONSTER銆傛垜浠彲浠ュ厛鍋囪榪欎釜MONSTER鍦ㄦ父鎴忎腑鏈夊涓嬬殑鐘舵侊細BERSERK銆?span lang="EN-US">RAGE
銆?span lang="EN-US">MAD
銆?span lang="EN-US">ANNOYED
浠ュ強UNCARING銆傦紙鍓嶅嚑涓姸鎬佷笉濂藉垎鍒級銆傚亣璁撅紝MONSTER瀵逛簬涓嶅悓鐨勭姸鎬佸彲浠ユ墽琛屼笉鍚岀殑鎿嶄綔錛屽茍涓斿亣璁句綘宸茬粡鏈変簡榪欎簺涓嶅悓鎿嶄綔鐨勪唬鐮併傛垜浠繖鏃跺彲浠ヤ嬌鐢?span lang="EN-US">鈥?/span>鏈夐檺鐘舵佹満鈥?/span>鏉ユā鎷熻繖涓?span lang="EN-US">MONSTER鐨勮涓轟簡銆傚彧瑕佹垜浠粰鍑轟笉鍚岀殑鈥?/span>杈撳叆鈥?/span>錛?span lang="EN-US">MONSTER灝變細鍋氬嚭涓嶅悓鐨勫弽搴斻傛垜浠啀鏉ユ寚鍑鴻繖浜?span lang="EN-US">鈥?/span>杈撳叆鈥?/span>鏄粈涔堬細PLAYER SEEN銆?span lang="EN-US">PLAYER ATTACKS銆?span lang="EN-US">PLAYERGONE銆?span lang="EN-US">MONSTER HURT
銆?span lang="EN-US">MONSTER HEALED
銆傝繖鏍鋒垜浠彲浠ュ緱鍒頒竴涓姸鎬佽漿鎹㈢殑琛ㄦ牸錛屽涓嬶細娓告垙鐘舵佽漿鎹㈣〃錛?span lang="EN-US">

褰撳墠鐘舵?杈撳叆 杈撳嚭鐘舵?span lang="EN-US">
UNCARING PLAYER SEEN ANNOYED
UNCARING PLAYER ATTACKS MAD
MAD MONSTER HURT RAGE
MAD MONSTER HEALED UNCARING
RAGE MONSTER HURT BERSERK
RAGE MONSTER HEALED ANNOYED
BERSERK MONSTER HURT BERSERK
BERSERK MONSTER HEALED RAGE
ANNOYED PLAYER GONE UNCARING
ANNOYED PLAYER ATTACKS RAGE
ANNOYED MONSTER HEALED UNCARING

鏍規嵁涓婇潰鐨勮繖涓〃鏍鹼紝鎴戜滑鍙互寰堝鏄撶殑鐢誨嚭涓涓?span lang="EN-US">MONSTER鐨?span lang="EN-US">鈥?/span>鐘舵佽漿鎹㈠浘鈥?/span>錛?span lang="EN-US">MONSTER鐨勬瘡涓涓姸鎬佸氨鏄浘涓殑欏剁偣銆?span lang="EN-US">
鍥犳錛屾牴鎹綋鍓嶇姸鎬佸拰瀵?span lang="EN-US">FSM
鐨勮緭鍏ワ紝MONSTER鐨勭姸鎬佸皢琚敼鍙樸傝繖鏃舵牴鎹?span lang="EN-US">MONSTER
鐨勭姸鎬佹墽琛岀浉搴旀搷浣滅殑浠g爜錛堝亣璁懼凡緇忓疄鐜幫級灝嗚鎵ц錛岃繖鏃?span lang="EN-US">MONSTER
濂藉儚鏄叿澶囦簡浜哄伐鏅鴻兘銆傛樉鐒訛紝鎴戜滑鍙互瀹氫箟鏇村鐨?span lang="EN-US">鈥?/span>鐘舵?span lang="EN-US">鈥?/span>錛屽啓鍑烘洿澶氱殑鈥?/span>杈撳叆鈥?/span>錛屽啓鍑烘洿澶氱殑鈥?/span>鐘舵佽漿鎹?span lang="EN-US">鈥?/span>錛岃繖鏍鳳紝MONSTER鍙互琛ㄧ幇鐨勬洿鐪熷疄錛岀敓鍔紝褰撶劧錛岃繖浜涙父鎴忕殑瑙勫垯闂搴旇鏄瓥鍒掑埗瀹氱殑銆?span lang="EN-US">

FSMclass
浠ュ強FSMstate

鐜板湪錛屾垜浠浣曟妸榪欎簺鏂規硶鍙樻垚鐜板疄錛熶嬌鐢?span lang="EN-US">FSMclass
鍜屽畠鐨勭粍鎴愰儴鍒?span lang="EN-US">FSMstate
鍙互瀹炵幇榪欎簺鎯蟲硶銆?span lang="EN-US">

瀹氫箟FSMstate
class FSMstate
{
    unsigned m_usNumberOfTransition; //
鐘舵佺殑鏈澶ф暟
    int* m_piInputs; //
涓轟簡杞崲鑰屼嬌鐢ㄧ殑杈撳叆鏁扮粍
    int* m_piOutputState; //
杈撳嚭鐘舵佹暟緇?span lang="EN-US">
    int m_iStateID; //
榪欎釜鐘舵佺殑鍞竴鏍囪瘑絎?span lang="EN-US">
public:
    //
涓涓瀯閫犲嚱鏁幫紝鍙互鎺ュ彈榪欎釜鐘舵佺殑ID鍜屽畠鏀寔鐨勮漿鎹㈡暟鐩?span lang="EN-US">
    FSMstate(int iStateID,unsigned usTransitions);
    //
鏋愭瀯鍑芥暟錛屾竻闄ゅ垎閰嶇殑鏁扮粍
    ~FSMstate();
    //
鍙栬繖涓姸鎬佺殑ID
    int GetID(){return m_iStateID;}
    //
鍚戞暟緇勪腑澧炲姞鐘舵佽漿鎹?span lang="EN-US">
    void AddTransition(int iInput,int iOutputID);
    //
浠庢暟緇勪腑鍒犻櫎涓涓姸鎬佽漿鎹?span lang="EN-US">
    void DeleteTransition(int iOutputID);
    //
榪涜鐘舵佽漿鎹㈠茍寰楀埌杈撳嚭鐘舵?span lang="EN-US">
    int GetOutput(int iInput);
};


瀵硅繖涓被鐨勫垎鏋愶細
鍔熻兘錛氫富瑕佹槸瀹炵幇涓庝竴涓姸鎬佺浉鍏崇殑鍚勭鎿嶄綔銆傛垜浠墠闈㈠亣璁句簡MONSTER鐨勫悇縐嶇姸鎬侊細
#define STATE_ID_UNCARING 1
#define STATE_ID_MAD 2
#define STATE_ID_RAGE 3
#define STATE_ID_BERSERK 4
#define STATE_ID_ANNOYED 5

鐘舵佽漿鎹㈡墍闇鐨勮緭鍏ユ湁錛?span lang="EN-US">
#define INPUT_ID_PLAYER_SEEN 1
#define INPUT_ID_PLAYER_ATTACK 2
#define INPUT_ID_PLAYER_GONE 3
#define INPUT_ID_MONSTER_HURT 4
#define INPUT_ID_MONSTER_HEALED 5


浠ヤ笂鏄簲涓姸鎬佺殑鏍囪瘑絎︺?span lang="EN-US">
鎴戜滑灝辮澹版槑5涓?span lang="EN-US">FSMstate
鐨勫疄渚嬶紝姣忎竴涓疄渚嬩唬琛ㄤ竴涓姸鎬佸拰涓庝箣鏈夊叧鐨勬搷浣溿傚亣璁炬垜浠厛澶勭悊鐘舵?span lang="EN-US">STATE_ID_MAD
綾繪垚鍛樺彉閲?span lang="EN-US">m_iStateID
灝辯瓑浜?span lang="EN-US">STATE_ID_MAD
綾繪垚鍛樺彉閲?span lang="EN-US">m_usNumberOfTransition
灝辨槸鍙敱榪欎釜鐘舵佽漿鎹㈡垚鐨勭姸鎬佺殑涓暟錛屽墠闈㈡湁涓涓〃錛屽叾涓湁涓や釜鐘舵佸彲浠ョ敱榪欎釜鐘舵佷駭鐢燂紝瀹冧滑鍒嗗埆鏄?span lang="EN-US">STATE_ID_UNCARING
鍜?span lang="EN-US">STATE_ID_RAGE
銆?span lang="EN-US">
榪欐椂錛?span lang="EN-US">m_usNumberOfTransition
絳変簬2銆?span lang="EN-US">

m_piInputs
鏄竴涓寚閽堝彉閲忥紝瀹冧繚瀛樹笌榪欎釜鐘舵佺浉鍏崇殑杈撳叆錛屽湪鍓嶉潰鐨勮〃涓垜浠煡閬撲笌STATE_ID_MAD鐩稿叧鐨勮緭鍏ヤ負
INPUT_ID_MONSTER_HURT
鍜?span lang="EN-US">INPUT_ID_MONSTER_HEALED
錛屽洜姝?span lang="EN-US">m_piInputs
涓瓨鏀劇殑鏄繖涓や釜鏁版嵁銆?span lang="EN-US">
鑰?span lang="EN-US">m_piOutputState瀛樻斁鐨勬槸涓?span lang="EN-US">STATE_ID_MAD鐩稿叧鐨勭姸鎬侊紝鍗?span lang="EN-US">STATE_ID_RAGE鍜?span lang="EN-US">STATE_ID_UNCARING錛岃繖鏍鳳紝m_piOutputState涓瓨鏀劇殑鏁版嵁渚挎槸榪欎袱涓箋?span lang="EN-US">

浠ヤ笂鏄鎴愬憳鍙橀噺鐨勮В閲婏紝涓嬮潰瑙i噴鎴愬憳鍑芥暟錛?span lang="EN-US">
鏋勯犲嚱鏁?span lang="EN-US">
FSMstate::FSMstate(int iStateID,unsigned usTransitions)
{
    if(!usTransitions) //
濡傛灉緇欏嚭鐨勮漿鎹㈡暟閲忎負0錛屽氨綆椾負1
        m_usNumberOfTransitions=1;
    else
        m_usNumberOfTransitions=usTransitions;

    //
灝嗙姸鎬佺殑ID淇濆瓨璧鋒潵
    m_iStateID=iStateID;

    //
鍒嗛厤鍐呭瓨絀洪棿
    try
    {
        m_piInputs=new int[m_usNumberOfTransitions];
        for(int i=0;i<m_usNumberOfTransitions;++i)
            m_piInputs[i]=0;
    }
    catch(...)
    {
        throw;
    }
    try
    {
        m_piOutputState=new int[m_usNumberOfTransition];
        for(int i=0;i<m_usNumberOfTransitions;++i)
            m_piOutputState[i]=0;
    }
    catch(...)
    {
        delete [] m_piInputs;
        throw;
    }
}


榪欏氨鏄瀯閫犲嚱鏁幫紝鍦?span lang="EN-US">FSMstate綾諱腑鍏辨湁鍥涗釜鎴愬憳鍙橀噺錛屽湪榪欎釜鍑芥暟涓叏閮ㄨ鍒濆鍖栦簡銆?span lang="EN-US">FSMstate鏄竴涓被錛屾槸鍚﹁繕璁板緱MONSTER鐨勭姸鎬侊紙濡?span lang="EN-US">MAD銆?span lang="EN-US">UNCARING錛夈傝繖涓被灝辨槸瀹炵幇瀵?span lang="EN-US">MONSTER鐨勪竴涓姸鎬佺殑綆$悊鐨勩傚亣濡傝繖涓姸鎬佹槸STATE_ID_MAD錛屼笌榪欎釜鐘舵佺浉鍏崇殑鐘舵佹湁涓や釜錛屼笂闈㈠凡緇忚榪囦簡銆傝繖鏃舵垜浠粰鎴愬憳鍙橀噺璧嬪鹼紝鍦ㄨ繖涓叿浣撲緥瀛愪腑瀹冧滑鐨勫煎涓嬶細

m_usNumberOfTransition=2
m_piInput[0]=0;
m_piInput[1]=0;
m_piOutputState[0]=0;
m_piOutputState[1]=0;
m_iStateID=STATE_ID_MAD;

鏋愭瀯鍑芥暟錛?span lang="EN-US">
FSMState::~FSMState()
{
    delete [] m_piInputs;
    delete [] m_piOutputState;
}

鏋愭瀯鍑芥暟灝嗗姩鎬佸垎閰嶇殑瀛樺偍絀洪棿閲婃斁浜嗐?span lang="EN-US">

void FSMstate::AddTransition(int iInput,int iOutputID)
{
    for(int i=0;i<m_usNumberOfTransitions;++i)
        if(!m_piOutputState[i]) break;
            if(i<m_usNumberOfTransition)
            {
                m_piOutputState[i]=iOutputID;
                m_piInputs[i]=iInput;
            }
}


榪欎釜鍑芥暟緇欎袱涓墠闈㈡瀯閫犲嚱鏁板姩鎬佸垎閰嶇殑絀洪棿鍔犲叆鏁版嵁錛岄鍏堣鎵懼埌涓や釜鏁扮粍涓壘鍒伴傚綋鐨勪綅緗紝涔嬪悗錛屽鏋滀綅緗槸鍚堟硶鐨?span lang="EN-US">
鎴戜滑灝卞彲浠ユ妸鏁版嵁鍔犲叆榪欎袱涓暟緇勪腑銆傚洜涓?span lang="EN-US">STATE_ID_MAD涓庝袱涓姸鎬佹湁鍏籌紝鍥犳錛屾垜浠彲浠ヨ皟鐢ㄤ袱嬈¤繖涓嚱鏁幫紝鎶婅繖涓や釜鐘舵佸姞鍏ュ埌綾諱腑錛?span lang="EN-US">

AddTransition(INPUT_ID_MONSTER_HURT,STATE_ID_RAGE);
AddTransition(INPUT_ID_MONSTER_HEALED,STATE_ID_UNCARING)

榪欐牱錛屼笌鐘舵?span lang="EN-US">STATE_ID_MAD鐩稿叧鐨?span lang="EN-US">鈥?/span>鐘舵?span lang="EN-US">鈥?/span>鍜?span lang="EN-US">鈥?/span>杈撳叆鈥?/span>涔熷姞鍏ヤ簡銆?span lang="EN-US">

void FSMstate::DeleteTransition(int iOutputID)
{
    //
閬嶅巻姣忎竴涓緭鍑虹姸鎬?span lang="EN-US">
    for(int i=0;i<m_usNumberOfTransitions;++i)
    {
        //
濡傛灉鎵懼埌杈撳嚭鐘舵侊紝閫鍑哄驚鐜?span lang="EN-US">
        if(m_piOutputState[i]==iOutputID)
            break;
    }
    //濡傛灉娌℃湁鎵懼埌杈撳嚭鐘舵侊紝榪斿洖
    if(i>=m_usNumberOfTransitions)
        return;
    //
灝嗚緭鍑虹姸鎬佺殑鍐呭緗?span lang="EN-US">0
    m_piInputs[i]=0;
    m_piOutputState[i]=0;

    //琚垹闄ょ殑杈撳嚭鐘舵佺殑鍚庨潰鐨勮緭鍑虹姸鎬佸墠縐?span lang="EN-US">
    for(;i<(m_usNumberOfTransition-1);++i)
    {
        if(!m_piOUtputState[i])
            break;
        m_piInputs[i]=m_piInputs[i+1];
        m_piOutputState[i]=m_piOutputState[i+1];
    }
    //鏈鍚庨潰鐨勮緭鍑虹姸鎬佺疆0
    m_piInputs[i]=0;
    m_piOutputState[i]=0;
}


榪欎釜鍑芥暟鏄鍒犻櫎涓庝竴涓姸鎬佺浉鍏崇殑杈撳嚭鐘舵併傝涓涓姸鎬?span lang="EN-US">STATE_ID_MAD錛屼笌涔嬬浉鍏崇殑鐘舵佹湁涓や釜STATE_ID_RAGE,STATE_ID_UNCARING錛屽綋鐒惰繖鏄粡榪囧垵濮嬪寲浠ュ強鍓嶉潰鐨勬坊鍔犵姸鎬佸嚱鏁頒箣鍚庯紝浜х敓浜嗚繖涓や釜鐩稿叧鐨勭姸鎬併備綘鎯沖垹闄ゅ摢涓涓紵濡傛灉浣犳兂鍒犻櫎鐩稿叧鐨勮緭鍑虹姸鎬侊紝鍙鍦ㄥ垹闄ゅ嚱鏁頒腑鎸囧嚭閭d釜鐘舵佸嵆鍙紝渚嬪錛?span lang="EN-US">

DeleteTransition(STATE_ID_RAGE);
浣犲氨鍙互鍒犻櫎杈撳嚭鐘舵?span lang="EN-US">STATE_ID_RAGE浜嗐?span lang="EN-US">

int FSMstate::GetOutput(int iInput)
{
    //
鍏堢粰杈撳嚭鐘舵佽祴鍊鹼紙濡傛灉鏈壘鍒頒笌杈撳叆瀵瑰簲鐨勮緭鍑虹姸鎬佹椂錛岃繑鍥炶繖涓鹼級
    int iOutputID=m_iStateID;

    //
閬嶅巻杈撳嚭鐘舵?span lang="EN-US">
    for(int i=0;i<m_usNumberOfTransitions;++i)
    {
        //
濡傛灉娌℃壘鍒幫紝閫鍑哄驚鐜?span lang="EN-US">
        if(!m_piOutputState[i])
            break;
        //濡傛灉鎵懼埌浜嗕笌鈥?/span>杈撳叆鈥?/span>鐩稿搴旂殑鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>錛岃繘琛岃祴鍊箋?span lang="EN-US">
        if(iInput==m_piInputs[i])
        {
            iOutputID=m_piOutputState[i];
            break;
        }
    }
    //
榪斿洖鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?br>    return(iOutputID);
}


榪欎釜鍑芥暟鍔熻兘鏄繑鍥炰笌鈥?/span>杈撳叆鈥?/span>鐩稿搴旂殑鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>鐨勬爣璇嗐傚鏋滄病鏈変笌鈥?/span>杈撳叆鈥?/span>鐩稿搴旂殑鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>錛岃繑鍥炲師鏉ョ殑鐘舵侊紝濡傛灉鏈変笌涔嬪搴旂殑鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>錛岃繑鍥炶繖涓姸鎬佺殑ID銆?span lang="EN-US">

涓嬮潰瀹氫箟鐨勬槸FSMclass錛岃繖涓被鐢ㄤ簬緇存姢FSMstate瀵硅薄闆嗗悎銆?span lang="EN-US">
class FSMclass
{
    State_Map m_map; //
鍖呮嫭浜嗙姸鎬佹満鐨勬墍鏈夌姸鎬?span lang="EN-US">
    int m_iCurrentState; //
褰撳墠鐘舵佺殑ID
public:
    FSMclass(int iStateID); //
鍒濆鍖栫姸鎬?span lang="EN-US">
    ~FSMclass()
    //
榪斿洖褰撳墠鐘舵?span lang="EN-US">ID
    int GetCurrentState() {return m_iCurrentState;}
    //
璁劇疆褰撳墠鐘舵?span lang="EN-US">ID
    void SetCurrentState(int iStateID) {m_iCurrentState=iStateID;}
    //
榪斿洖FSMstate瀵硅薄鎸囬拡
    FSMstate* GetState(int iStateID);
    //
澧炲姞鐘舵佸璞℃寚閽?span lang="EN-US">
    void AddState(FSMstate* pState);
    //
鍒犻櫎鐘舵佸璞℃寚閽?span lang="EN-US">
    void DeleteState(int iStateID);
    //
鏍規嵁鈥?/span>褰撳墠鐘舵?span lang="EN-US">鈥?/span>鍜?span lang="EN-US">鈥?/span>杈撳叆鈥?/span>瀹屾垚鈥?/span>鐘舵?span lang="EN-US">鈥?/span>鐨勮漿鎹€?span lang="EN-US">
    int StateTransition(int iInput);
};


FSMclass::m_map
鏄?span lang="EN-US">FSMstate瀵硅薄鐨勯泦鍚堬紝鏄粠STL<map>涓疄鐜扮殑銆?span lang="EN-US">
FSMclass::m_iCurrentState
鏄?span lang="EN-US">FSMstate
瀵硅薄鐨勭姸鎬佹爣璇嗭紝鏄?span lang="EN-US">鈥?/span>鏈夐檺鐘舵佹満鈥?/span>鐨勫綋鍓嶇姸鎬併?span lang="EN-US">

FSMclass::GetCurrentState()
鍙互鐢ㄤ箣璁塊棶褰撳墠鐨?span lang="EN-US">FSMstate瀵硅薄鐨勭姸鎬佺殑鏍囪瘑絎︺?span lang="EN-US">
FSMclass::SetCurrentState()鍙互璁劇疆褰撳墠FSMstate瀵硅薄鐨勭姸鎬佺殑鏍囪瘑絎︺?span lang="EN-US">
FSMclass::GetState()鍙互鍙栧緱鏈夐檺鐘舵佹満涓殑浠諱綍FSMstate瀵硅薄鐨勬寚閽堛?span lang="EN-US">
FSMclass::AddState()澧炲姞鏈夐檺鐘舵佹満涓殑FSMstate瀵硅薄銆?span lang="EN-US">
FSMclass::DeleteState()鍒犻櫎鏈夐檺鐘舵佹満涓殑FSMstate瀵硅薄
FSMclass::StateTransition()
鍒濆鍖栫姸鎬佽漿鎹紝鏍規嵁杈撳叆榪斿洖杈撳嚭鐘舵併?span lang="EN-US">

榪欎釜綾諱嬌鐢ㄤ簡STL錛屾垜涓嶇煡閬撳畠鎬庝箞鐢細錛夈傚惉璇存槸楂樹漢鎵嶄嬌鐢ㄥ畠錛岄珮浜鴻搗鐮佽鍐欒繃涓婁竾琛岀殑浠g爜銆傚洜姝や笉鑳借緇嗕粙緇嶈繖涓被浜?span lang="EN-US">

鎬諱箣錛屽彲浠ヨ繖涔堢悊瑙h繖涓や釜綾?span lang="EN-US">FSMstate,FSMclass.FSMstate浠h〃浜嗕竴涓姸鎬佷互鍙婂拰鐘舵佺浉鍏崇殑鏁版嵁鍜屾搷浣溿傚鍦?span lang="EN-US">MONSTER涓湁浜斾釜鐘舵侊紝鎴戜滑灝辮澹版槑浜斾釜綾葷殑瀵硅薄錛屾瘡涓璞′腑鍖呮嫭浜嗕笌榪欎釜鐘舵佺浉鍏崇殑鐘舵侊紝杈撳叆鍜屽悇縐嶈漿鎹㈠嚱鏁般傚彲浠ヨFSMstate鏄姣忎竴涓姸鎬佺殑灝佽錛堝寘鎷浉鍏蟲暟鎹拰鎿嶄綔錛夛紝娓告垙涓殑瀵硅薄鏈夊灝戠姸鎬侊紝灝辮澹版槑澶氬皯涓?span lang="EN-US">FSMstate瀵硅薄銆傝?span lang="EN-US">FSMclass鍒欐槸瀵硅繖鑻ュ共涓?span lang="EN-US">FSMstate瀵硅薄錛堣繖涓緥瀛愪腑MONSTER鏈変簲涓姸鎬侊級榪涜鐨勫皝瑁呫傚湪FSMclass涓寚鏄庝簡鑻ュ共涓?span lang="EN-US">FSMstate涓摢涓涓槸褰撳墠鐨?span lang="EN-US">MONSTER鎷ユ湁鐨勭姸鎬佸茍涓斿彲浠ヨ緗紝寰楀埌浠ュ強鍒犻櫎鐘舵侊紝騫朵笖鍙互榪涜鐘舵侀棿鐨勮漿鎹€?span lang="EN-US">

鎬諱箣錛氭父鎴忎腑鐨?span lang="EN-US">MONSTER鏈夊灝戠姸鎬侊紝娓告垙涓氨瑕佸0鏄庡灝戠殑FSMstate瀵硅薄錛屾瘡涓涓?span lang="EN-US">FSMstate瀵硅薄鍖呮嫭浜嗕笌鐗瑰畾鐨勭姸鎬佺浉鍏崇殑鏁版嵁鍜屾搷浣溿傝?span lang="EN-US">FSMclass鍙湁涓涓紝瀹冪敤浜庡崗璋冭嫢騫蹭釜FSMstate涔嬮棿鐨勫叧緋誨拰鎿嶄綔銆?span lang="EN-US">

涓嬮潰鏄浣曞湪娓告垙涓嬌鐢ㄤ袱涓被鐨勪緥瀛愶細

棣栧厛鏄垱寤?span lang="EN-US">FSMstate瀵硅薄錛堣嫢騫蹭釜錛夛紝鏈夊灝戠姸鎬佸氨瑕佸驚鐜灝戞錛屼笅闈㈡槸澧炲姞STATE_ID_UNCARING鐘舵佺殑渚嬪瓙錛?span lang="EN-US">
FSMstate* pFSMstate=NULL;
//鍒涘緩鐘舵?span lang="EN-US">
try
{
    //
絎竴涓弬鏁版槸澧炲姞鐘舵佺殑鏍囪瘑錛岀浜屼釜鍙傛暟鎸囨槑浜嗕笌榪欎釜
    //
鐘舵佺浉鍏崇殑鐘舵佺殑涓暟銆?span lang="EN-US">
    pFSMstate=new FSMstate(STATE_ID_UNCARING,2);
}
catch(...)
{
    throw;
}

//涔嬪悗緇欒繖涓姸鎬佸姞鍏ョ浉鍏崇殑鈥?/span>杈撳叆鈥?/span>鍜?span lang="EN-US">鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>
pFSMstate->AddTransition(INPUT_ID_PLAYER_SEEN,STATE_ID_ANNOYED);
pFSMstate->AddTransition(INPUT_ID_PLAYER_ATTACKS,STATE_ID_MAD);


榪欎釜鍑芥暟鎸囨槑浜嗕笌鐗瑰畾鐘舵佺浉鍏崇殑鈥?/span>杈撳叆鈥?/span>鍜?span lang="EN-US">鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?br>姣斿絎竴涓嚱鏁幫紝瀹冭〃鏄庡鏋滄垜瑕佽緭鍏ヤ竴涓?span lang="EN-US">INPUT_ID_PLAYER_SEEN錛岃繖鏃跺氨浼氫駭鐢熶竴涓緭鍑虹姸鎬侊紝STATE_ID_ANNOYED銆?span lang="EN-US">
鎴戜滑搴旇涓烘瘡涓涓姸鎬佸仛涓婇潰鐨勪簨鎯咃紝榪欓噷灝辯暐榪囦簡銆備箣鍚庢垜浠澹版槑涓涓?span lang="EN-US">FSMclass
瀵硅薄錛岀敤浜庡崗璋冧笂闈㈢殑FSMstate瀵硅薄涔嬮棿鐨勫叧緋匯?span lang="EN-US">

try
{
    m_pFSMclass=new FSMclass(STATE_ID_UNCARING);
}
catch(...)
{
    throw;
}


涓婇潰鎸囨槑浜?span lang="EN-US">MONSTER鐨勫綋鍓嶇姸鎬佹槸STATE_ID_UNCARING鏈鍚庡皢FSMstate瀵硅薄鍒嗗埆鍔犲叆鍒?span lang="EN-US">FSMclass涓?span lang="EN-US">

涓嬮潰浠嬬粛濡備綍浣跨敤FSMclass
浣跨敤鍗佸垎綆鍗曪紝鍙鎴戜滑緇欏嚭涓涓?span lang="EN-US">鈥?/span>杈撳叆鈥?/span>錛屼箣鍚庯紝鎴戜滑渚垮彲浠ュ緱鍒頒竴涓?span lang="EN-US">鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>錛屾牴鎹繖涓?span lang="EN-US">鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>鎴戜滑鎵ц鐩稿簲鐨勬搷浣滐紝鏈鍚庯紝鎶婅繖涓?span lang="EN-US">鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>鍙樻垚MONSTER鐨勫綋鍓嶇姸鎬併?span lang="EN-US">

鍦ㄦ父鎴忎腑鍙戠敓浜嗕竴浜涗簨鎯咃紝濡傜帺娓告垙鐨勪漢鎸囧嚭浠栨帶鍒剁殑浜鴻繘鏀?span lang="EN-US">MONSTER錛堢敤榧犳爣鐐瑰嚮浜?span lang="EN-US">MONSTER錛夛紝榪欐椂浼氫駭鐢熶竴涓?span lang="EN-US">鈥?/span>杈撳叆鈥漣InputID=INPUT_ID_PLAYER_ATTACK;

榪欐椂錛屾垜浠皟鐢ㄧ姸鎬佽漿鎹㈠嚱鏁幫細
m_iOutputState=m_pFSMclass->StateTransition(iInputID);

榪欐椂錛屾垜浠殑鈥?/span>杈撳叆鈥?/span>瀵?span lang="EN-US">MONSTER浜х敓浜嗗埡嬋錛屼駭鐢熶簡涓涓?span lang="EN-US">鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>銆傝繖鏃舵垜浠牴鎹繖涓緭鍑虹姸鎬佽皟鐢ㄧ浉搴旂殑浠g爜鎵ц灝卞彲浠ヤ簡錛岃繖鏃剁殑MONSTER濂藉儚鏈夊簲鍙嶄簡錛屾垜浠瀹冩湁浜嗙畝鍗曠殑鏅鴻兘銆?span lang="EN-US">

if(m_iOutputState==STATE_ID_MAD)
{
    //some code for the monster to act mad
}


褰撶劧錛屾垜浠篃搴旇鎶婂叾瀹冪姸鎬佹墽琛岀殑鎿嶄綔涔熷啓鍑烘潵錛屼絾鍙啓涓涓氨鍙互浜嗐備嬌鐢ㄨ繖涓姸鎬佹満灝辨槸榪欎箞綆鍗曘傛諱箣錛?span lang="EN-US">FSMclass涓嶆槸鍏ㄩ儴鐨勪漢宸ユ櫤鑳斤紝鐩稿弽錛屽畠鍙槸涓涓鏋訛紝涓涓紑濮嬫櫤鑳介渶瑕佺殑榪樺緢澶氥傚彧瑕佷綘鍙互鍒嗗嚭鈥?/span>鐘舵?span lang="EN-US">鈥?/span>錛屽茍涓旂煡閬撲粈涔?span lang="EN-US">鈥?/span>杈撳叆鈥?/span>浜х敓浠涔?span lang="EN-US">鈥?/span>杈撳嚭鐘舵?span lang="EN-US">鈥?/span>灝卞彲浠ヤ簡錛屽綋鐒惰繖鏄竴涓父鎴忕殑瑙勫垯錛岀瓥鍒掑簲褰撳畬鎴愯繖涓儴鍒嗭紵

 



鑲ヤ粩 2008-12-14 17:56 鍙戣〃璇勮
]]>
鏈夐檺鐘舵佹満鐨勬濊?/title><link>http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69410.html</link><dc:creator>鑲ヤ粩</dc:creator><author>鑲ヤ粩</author><pubDate>Sun, 14 Dec 2008 09:54:00 GMT</pubDate><guid>http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69410.html</guid><wfw:comment>http://m.shnenglu.com/woaidongmao/comments/69410.html</wfw:comment><comments>http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/woaidongmao/comments/commentRss/69410.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/woaidongmao/services/trackbacks/69410.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="word-break: break-all; line-height: 150%; mso-pagination: widow-orphan"><span style="font-size: 12pt; color: black; line-height: 150%; font-family: 瀹嬩綋; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt">鏈夐檺鐘舵佹満錛?span lang="EN-US">Finite State Machine</span>鎴栬?span lang="EN-US">Finite State Automata)</span>鏄蔣浠墮鍩熶腑涓縐嶉噸瑕佺殑宸ュ叿錛屽緢澶氫笢瑗跨殑妯″瀷瀹為檯涓婂氨鏄湁闄愮姸鎬佹満銆?span lang="EN-US"><br><br></span>鏈榪戠湅浜嗕竴浜涙父鎴忕紪紼?span lang="EN-US">AI</span>鐨勬潗鏂欙紝鎰熻娓告垙涓殑<span lang="EN-US">AI</span>錛岀涓瑕佽鐨勫氨鏄湁闄愮姸鎬佹満鏉ュ疄鐜扮簿鐏電殑<span lang="EN-US">AI</span>錛岀劧鍚庢墠鏄?span lang="EN-US">A*</span>瀵昏礬錛屽叾浠栧鏈晫璁ㄨ姣旇緝澶氱殑紲炵粡緗戠粶銆佹ā緋婃帶鍒剁瓑闂榪樹笉鏄緢鐑?span lang="EN-US"><br><br>FSM</span>鐨勫疄鐜版柟寮忥細<span lang="EN-US"><br><b style="mso-bidi-font-weight: normal">1</b></span><b style="mso-bidi-font-weight: normal">錛?span lang="EN-US"> switch/case</span>鎴栬?span lang="EN-US">if/else</span></b><span lang="EN-US"><br></span>榪欐棤鎰忔槸鏈鐩磋鐨勬柟寮忥紝浣跨敤涓鍫嗘潯浠跺垽鏂紝浼氱紪紼嬬殑浜洪兘鍙互鍋氬埌錛屽綆鍗曞皬宸х殑鐘舵佹満鏉ヨ鏈鍚堥傦紝浣嗘槸姣棤鐤戦棶錛岃繖鏍風殑鏂瑰紡姣旇緝鍘熷錛屽搴炲ぇ鐨勭姸鎬佹満闅句互緇存姢銆?span lang="EN-US"><br><br><b style="mso-bidi-font-weight: normal"><font color="#ff0000">2</font></b></span><b style="mso-bidi-font-weight: normal"><font color="#ff0000">錛?鐘舵佽〃</font></b><span lang="EN-US"><br></span><font color="#ff0000">緇存姢涓涓簩緇寸姸鎬佽〃錛屾í鍧愭爣琛ㄧず褰撳墠鐘舵侊紝綰靛潗鏍囪〃紺鴻緭鍏ワ紝琛ㄤ腑涓涓厓绱犲瓨鍌ㄤ笅涓涓姸鎬佸拰瀵瑰簲鐨勬搷浣溿傝繖涓鎷涙槗浜庣淮鎶わ紝浣嗘槸榪愯鏃墮棿鍜屽瓨鍌ㄧ┖闂寸殑浠d環杈冨ぇ銆?/font><span lang="EN-US"><br><br><b style="mso-bidi-font-weight: normal">3</b></span><b style="mso-bidi-font-weight: normal">錛?浣跨敤<span lang="EN-US">State Pattern</span></b><span lang="EN-US"><br></span>浣跨敤<span lang="EN-US">State Pattern</span>浣垮緱浠g爜鐨勭淮鎶ゆ瘮<span lang="EN-US">switch/case</span>鏂瑰紡紼嶅ソ錛屾ц兘涓婁篃涓嶄細鏈夊緢澶氱殑褰卞搷錛屼絾鏄篃涓嶆槸<span lang="EN-US">100</span>錛呭畬緹庛備笉榪?span lang="EN-US">Robert C. Martin</span>鍋氫簡涓や釜鑷姩浜х敓<span lang="EN-US">FSM</span>浠g爜鐨勫伐鍏鳳紝<span lang="EN-US">for java</span>鍜?span lang="EN-US">for C++</span>鍚勪竴涓紝鍦?span lang="EN-US">http://www.objectmentor.com/resources/index</span>涓婃湁鍏嶈垂涓嬭澆錛岃繖涓伐鍏風殑杈撳叆鏄函鏂囨湰鐨勭姸鎬佹満鎻忚堪錛岃嚜鍔ㄤ駭鐢熺鍚?span lang="EN-US">State Pattern</span>鐨勪唬鐮侊紝榪欐牱<span lang="EN-US">developer</span>鐨勫伐浣滃彧闇瑕佺淮鎶ょ姸鎬佹満鐨勬枃鏈弿榪幫紝姣忓繀瑕佸啋寮曞叆<span lang="EN-US">bug</span>鐨勯闄╁幓緇存姢<span lang="EN-US">code</span>銆?span lang="EN-US"><br><br><b style="mso-bidi-font-weight: normal">4</b></span><b style="mso-bidi-font-weight: normal">錛?浣跨敤瀹忓畾涔夋弿榪扮姸鎬佹満</b><span lang="EN-US"><br></span>涓鑸潵璇達紝<span lang="EN-US">C++</span>緙栫▼涓簲璇ラ伩鍏嶄嬌鐢?span lang="EN-US">#define</span>錛屼絾鏄繖涓昏鏄洜涓哄鏋滅敤瀹忔潵瀹氫箟鍑芥暟鐨勮瘽錛屽緢瀹規槗浜х敓榪欐牱閭f牱鐨勯棶棰橈紝浣嗘槸宸у鐨勪嬌鐢?span lang="EN-US">,</span>榪樻槸鑳藉浜х敓濂囧鐨勬晥鏋溿?span lang="EN-US">MFC</span>灝辨槸浣跨敤瀹忓畾涔夋潵瀹炵幇澶х殑鏋舵瀯鐨勩?span lang="EN-US"><br></span>鍦ㄥ疄鐜?span lang="EN-US">FSM</span>鐨勬椂鍊欙紝鍙互鎶婁竴浜涚箒鐞愭棤姣旂殑<span lang="EN-US">if/else</span>榪樻湁鑺辨嫭鍙風殑緇勫悎鏀懼湪瀹忎腑錛岃繖鏍鳳紝鍦ㄤ唬鐮佷腑鍙互<span lang="EN-US">3</span>錛変腑鐘舵佹満鎻忚堪鏂囨湰涓鏍峰啓錛岄氳繃緙栬瘧鍣ㄧ殑棰勭紪璇戝鐞嗕駭鐢?span lang="EN-US">1</span>錛変竴鏍風殑鏁堟灉錛屾垜瑙佽繃浜х敓<span lang="EN-US">C</span>浠g爜鐨勫畯錛屽鏋滆浜х敓<span lang="EN-US">C++</span>浠g爜錛屽繁杞?span lang="EN-US">MFC</span>鍙互錛岄偅涔堢悊璁轟笂涔熸槸鍙鐨勩?<span lang="EN-US"><?xml:namespace prefix = o /><o:p></o:p></span></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 瀹嬩綋; mso-bidi-font-family: arial"><o:p> </o:p></span></p><img src ="http://m.shnenglu.com/woaidongmao/aggbug/69410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/woaidongmao/" target="_blank">鑲ヤ粩</a> 2008-12-14 17:54 <a href="http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69410.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鐘舵佹満http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69409.html鑲ヤ粩鑲ヤ粩Sun, 14 Dec 2008 09:53:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/12/14/69409.htmlhttp://m.shnenglu.com/woaidongmao/comments/69409.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/12/14/69409.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/69409.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/69409.html 

鍏充簬鐘舵佹満鐨勪竴涓瀬搴︾‘鍒囩殑鎻忚堪鏄畠鏄竴涓湁鍚戝浘褰紝鐢變竴緇勮妭鐐瑰拰涓緇勭浉搴旂殑杞Щ鍑芥暟緇勬垚銆傜姸鎬佹満閫氳繃鍝嶅簲涓緋誨垪浜嬩歡鑰?span lang="EN-US">鈥?/span>榪愯鈥?/span>銆傛瘡涓簨浠墮兘鍦ㄥ睘浜?span lang="EN-US">鈥?/span>褰撳墠鈥?鑺傜偣鐨勮漿縐誨嚱鏁扮殑鎺у埗鑼冨洿鍐咃紝鍏朵腑鍑芥暟鐨勮寖鍥存槸鑺傜偣鐨勪竴涓瓙闆嗐傚嚱鏁拌繑鍥?span lang="EN-US">鈥?/span>涓嬩竴涓?span lang="EN-US">鈥?/span>錛堜篃璁告槸鍚屼竴涓級鑺傜偣銆傝繖浜涜妭鐐逛腑鑷沖皯鏈変竴涓繀欏繪槸緇堟併傚綋鍒拌揪緇堟侊紝 鐘舵佹満鍋滄銆?/font>

 

鍖呭惈涓緇勭姸鎬侀泦錛?span lang="EN-US">states錛夈佷竴涓搗濮嬬姸鎬侊紙start state錛夈佷竴緇勮緭鍏ョ鍙烽泦錛?span lang="EN-US">alphabet錛夈佷竴涓槧灝勮緭鍏ョ鍙峰拰褰撳墠鐘舵佸埌涓嬩竴鐘舵佺殑杞崲鍑芥暟錛?span lang="EN-US">transition function錛夌殑璁$畻妯″瀷銆傚綋杈撳叆絎﹀彿涓詫紝妯″瀷闅忓嵆榪涘叆璧峰鐘舵併傚畠瑕佹敼鍙樺埌鏂扮殑鐘舵侊紝渚濊禆浜庤漿鎹㈠嚱鏁般傚湪鏈夐檺鐘舵佹満涓紝浼氭湁鏈夎澶氬彉閲忥紝渚嬪錛岀姸鎬佹満鏈夊緢澶氫笌鍔ㄤ綔錛?span lang="EN-US">actions錛夎漿鎹?span lang="EN-US">(Mealy鏈?span lang="EN-US">)鎴栫姸鎬侊紙鎽╁皵鏈猴級鍏寵仈鐨勫姩浣滐紝澶氶噸璧峰鐘舵侊紝鍩轟簬娌℃湁杈撳叆絎﹀彿鐨勮漿鎹紝鎴栬呮寚瀹氱鍙峰拰鐘舵侊紙闈炲畾鏈?闄愮姸鎬佹満錛夌殑澶氫釜杞崲錛屾寚媧劇粰鎺ユ敹鐘舵侊紙璇嗗埆鑰咃級鐨勪竴涓垨澶氫釜鐘舵侊紝絳夌瓑銆?span lang="EN-US">

 

銆銆浼犵粺搴旂敤紼嬪簭鐨勬帶鍒舵祦紼嬪熀鏈槸欏哄簭鐨勶細閬靛驚浜嬪厛璁懼畾鐨勯昏緫錛屼粠澶村埌灝懼湴鎵ц銆傚緢灝戞湁浜嬩歡鑳芥敼鍙樻爣鍑嗘墽琛屾祦紼?/font>錛涜屼笖榪欎簺浜嬩歡涓昏娑夊強寮傚父鎯呭喌銆?span lang="EN-US">鈥?/span>鍛戒護琛屽疄鐢ㄧ▼搴?span lang="EN-US">鈥?/span>鏄繖縐嶄紶緇熷簲鐢ㄧ▼搴忕殑鍏稿瀷渚嬪瓙銆?

 

鍙︿竴綾誨簲鐢ㄧ▼搴忕敱澶栭儴鍙戠敓鐨勪簨浠舵潵椹卞姩鈥斺?/span>鎹㈣█涔嬶紝浜嬩歡鍦ㄥ簲鐢ㄧ▼搴忎箣澶栫敓鎴愶紝鏃犳硶鐢卞簲鐢ㄧ▼搴忔垨紼嬪簭鍛樻潵鎺у埗銆?/font>鍏蜂綋闇瑕佹墽琛岀殑浠g爜鍙栧喅浜庢帴鏀跺埌鐨勪簨浠訛紝鎴栬呭畠鐩稿浜庡叾浠栦簨浠剁殑鎶佃揪鏃墮棿銆傛墍浠ワ紝鎺у埗嫻佺▼鏃笉鑳芥槸欏哄簭鐨勶紝涔熶笉鑳芥槸浜嬪厛璁懼畾濂界殑錛屽洜涓哄畠瑕佷緷璧栦簬澶栭儴浜嬩歡銆備簨浠墮┍鍔ㄧ殑GUI搴旂敤紼嬪簭鏄繖縐嶅簲鐢ㄧ▼搴忕殑鍏稿瀷渚嬪瓙錛屽畠浠敱鍛戒護鍜岄夋嫨錛堜篃灝辨槸鐢ㄦ埛閫犳垚鐨勪簨浠訛級鏉ラ┍鍔ㄣ?

 

Web搴旂敤紼嬪簭鐢辨彁浜ょ殑琛ㄥ崟鍜岀敤鎴瘋姹傜殑緗戦〉鏉ラ┍鍔紝瀹冧滑涔熷彲鍒掑綊鍒頒笂榪扮被鍒備絾鏄紝GUI搴旂敤紼嬪簭瀵逛簬鎺ユ敹鍒扮殑浜嬩歡浠嶆湁涓瀹氱▼搴︾殑鎺у埗錛屽洜涓鴻繖浜涗簨浠惰渚濊禆浜庡悜鐢ㄦ埛鏄劇ず鐨勭獥鍙e拰鎺т歡錛岃岀獥鍙e拰鎺т歡鏄敱紼嬪簭鍛樻帶鍒剁殑銆?span lang="EN-US">Web搴旂敤 紼嬪簭鍒欎笉鐒訛紝鍥犱負涓鏃︾敤鎴烽噰鍙栦笉鍦ㄩ鏂欎箣涓殑鎿嶄綔錛堟瘮濡備嬌鐢ㄦ祻瑙堝櫒鐨勫巻鍙茶褰曘佹墜宸ヨ緭鍏ラ摼鎺ヤ互鍙婃ā鎷熶竴嬈¤〃鍗曟彁浜ょ瓑絳夛級錛屽氨寰堝鏄撴墦涔辮璁″ソ鐨勫簲鐢ㄧ▼搴忛昏緫銆?

 

鏄劇劧錛屽繀欏婚噰鍙栦笉鍚岀殑鎶鏈潵澶勭悊榪欎簺鎯呭喌銆傚畠鑳藉鐞嗕換浣曢『搴忕殑浜嬩歡錛屽茍鑳芥彁渚涙湁鎰忎箟鐨勫搷搴?span lang="EN-US">鈥斺?/span>鍗充嬌榪欎簺浜嬩歡鍙戠敓鐨勯『搴忓拰棰勮鐨勪笉鍚屻傛湁闄愮姸鎬佹満姝f槸涓轟簡婊¤凍榪欐柟闈㈢殑瑕佹眰鑰岃璁$殑銆?

 

銆銆鏈夐檺鐘舵佹満鏄竴縐嶆蹇墊ф満鍣紝瀹冭兘閲囧彇鏌愮鎿嶄綔鏉ュ搷搴斾竴涓閮ㄤ簨浠躲傚叿浣撻噰鍙栫殑鎿嶄綔涓嶄粎鑳藉彇鍐充簬鎺ユ敹鍒扮殑浜嬩歡錛岃繕鑳藉彇鍐充簬鍚勪釜浜嬩歡鐨勭浉瀵瑰彂鐢熼『搴忋備箣鎵浠ヨ兘鍋氬埌榪欎竴鐐癸紝鏄洜涓烘満鍣ㄨ兘璺熻釜涓涓唴閮ㄧ姸鎬侊紝瀹冧細鍦ㄦ敹鍒頒簨浠跺悗榪涜鏇存柊銆?font color="#ff0000">涓轟竴涓簨浠惰屽搷搴旂殑琛屽姩涓嶄粎鍙栧喅浜庝簨浠舵湰韜紝榪樺彇鍐充簬鏈哄櫒鐨勫唴閮ㄧ姸鎬併傚彟澶栵紝閲囧彇 鐨勮鍔ㄨ繕浼氬喅瀹氬茍鏇存柊鏈哄櫒鐨勭姸鎬併傝繖鏍蜂竴鏉ワ紝浠諱綍閫昏緫閮藉彲寤烘ā鎴愪竴緋誨垪浜嬩歡/鐘舵佺粍鍚堛?/font>



鑲ヤ粩 2008-12-14 17:53 鍙戣〃璇勮
]]>
鏈夐檺鐘舵佽嚜鍔ㄦ満http://m.shnenglu.com/woaidongmao/archive/2008/12/14/69408.html鑲ヤ粩鑲ヤ粩Sun, 14 Dec 2008 09:30:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/12/14/69408.htmlhttp://m.shnenglu.com/woaidongmao/comments/69408.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/12/14/69408.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/69408.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/69408.html 

鏈夐檺鐘舵佽嚜鍔ㄦ満鏄叿鏈夌鏁h緭鍏ュ拰杈撳嚭鐨勭郴緇熺殑涓縐嶆暟瀛︽ā鍨嬨?

銆銆鍏朵富瑕佺壒鐐規湁浠ヤ笅鍑犱釜鏂歸潰錛?

鈥?(1)緋葷粺鍏鋒湁鏈夐檺涓姸鎬侊紝涓嶅悓鐨勭姸鎬佷唬琛ㄤ笉鍚岀殑鎰忎箟銆傛寜鐓у疄闄呯殑闇瑕侊紝緋葷粺鍙互鍦ㄤ笉鍚岀殑鐘舵佷笅瀹屾垚瑙勫畾鐨勪換鍔°?

鈥?(2)鎴戜滑鍙互灝嗚緭鍏ュ瓧絎︿覆涓嚭鐜扮殑瀛楃姹囬泦鍦ㄤ竴璧鋒瀯鎴愪竴涓瓧姣嶈〃銆傜郴緇熷鐞嗙殑鎵鏈夊瓧絎︿覆閮芥槸榪欎釜瀛楁瘝琛ㄤ笂鐨勫瓧絎︿覆銆?

鈥?(3)緋葷粺鍦ㄤ換浣曚竴涓姸鎬佷笅錛屼粠杈撳叆瀛楃涓蹭腑璇誨叆涓涓瓧絎︼紝鏍規嵁褰撳墠鐘舵佸拰璇誨叆鐨勮繖涓瓧絎﹁漿鍒版柊鐨勭姸鎬併?

鈥?(4)緋葷粺涓湁涓涓姸鎬侊紝瀹冩槸緋葷粺鐨勫紑濮嬬姸鎬併?

鈥?(5)緋葷粺涓繕鏈変竴浜涚姸鎬佽〃紺哄畠鍒扮洰鍓嶄負姝㈡墍璇誨叆鐨勫瓧絎︽瀯鎴愮殑瀛楃涓叉槸璇█鐨勪竴涓彞瀛愩?

鈥?

銆銆褰㈠紡瀹氫箟

鈥?瀹氫箟錛氭湁闄愮姸鎬佽嚜鍔ㄦ満(FA鈥攆inite automaton)鏄竴涓簲鍏冪粍錛?

鈥?M=(Q, 危, 未, q0, F)

鈥?鍏朵腑錛?

鈥?Q鈥斺旂姸鎬佺殑闈炵┖鏈夌┓闆嗗悎銆傗垁q鈭圦錛?font color="#ff0000">q縐頒負M鐨勪竴涓姸鎬?/font>銆?

鈥?危鈥斺旇緭鍏ュ瓧姣嶈〃銆?

鈥?未鈥斺旂姸鎬佽漿縐誨嚱鏁幫紝鏈夋椂鍙堝彨浣滅姸鎬佽漿鎹㈠嚱鏁版垨鑰呯Щ鍔ㄥ嚱鏁幫紝未錛歈脳危鈫扱錛屛?q,a)=p銆?/font>

鈥?q0鈥斺擬鐨勫紑濮嬬姸鎬侊紝涔熷彲鍙綔鍒濆鐘舵佹垨鍚姩鐘舵?font color="#ff0000">銆俼0鈭圦銆?/font>

鈥?F鈥斺擬鐨勭粓姝㈢姸鎬侀泦鍚堛侳琚玅鍖呭惈銆備換緇檘鈭團錛宷縐頒負M鐨勭粓姝㈢姸鎬併?/p>

鑲ヤ粩 2008-12-14 17:30 鍙戣〃璇勮
]]>
NFA杞珼FAhttp://m.shnenglu.com/woaidongmao/archive/2008/12/13/69344.html鑲ヤ粩鑲ヤ粩Sat, 13 Dec 2008 07:21:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/12/13/69344.htmlhttp://m.shnenglu.com/woaidongmao/comments/69344.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/12/13/69344.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/69344.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/69344.html涓涓?span style="background: white; color: red">闈炵‘瀹氳嚜鍔ㄦ満( NFA) 鍦ㄨ鍏ョ鍙蜂覆涔嬪悗錛屽茍涓嶇‘鍒囧湴鐭ラ亾鑷姩鏈哄浜庡摢涓姸鎬併備絾鍙互鑲畾涓瀹氬浜庣姸鎬侀泦涓殑鏌愪竴鐘舵併傝鐘舵侀泦璁板仛 {q1,q2,鈥k} 銆傝屼竴涓瓑浠風殑紜畾鑷姩鏈?/span>( DFA) 璇誨叆鍚屾牱鐨?span lang="EN-US"> w 涓瀹氬浜庢煇涓‘瀹氱殑鐘舵佷笂銆傝繖鏍鳳紝閮芥槸璇誨叆鍚屾牱鐨?span lang="EN-US"> w 錛?span lang="EN-US"> DFA 鍒拌揪鏌愪竴涓姸鎬侊紝鑰?span lang="EN-US"> NFA 鍒拌揪鏌愪竴涓姸鎬侀泦銆傜敱 w 鐨勪換鎰忔э紝鍙皢 NFA 鐨勬墍鏈夌殑鐘舵侀泦鍜?span lang="EN-US"> DFA 鐨勭姸鎬佷竴涓瀵瑰簲璧鋒潵銆傝繖縐嶅搴旂殑鍓嶆彁灝辨槸鑳借瘑鍒悓鏍風殑杈撳叆涓層傚嵆 L(M1)=L(M2) 銆?span lang="EN-US">

       鏄劇劧錛屽悗涓涓姸鎬侀泦鏄緷璧栦簬鍓嶄竴涓姸鎬侀泦鐨勶紝鏄湪鍓嶄竴涓姸鎬侀泦鐨勫熀紜涓婏紝錛堝叾鍐呬換鎰忕粨鐐癸級緇忚繃鍚屼竴鏉¤礬寰勫埌杈劇殑銆備笅闈㈡槸涓涓畝鍗曠殑渚嬪瓙錛?span lang="EN-US">

   clip_image001

鍙互鐪嬪嚭錛屽叾鏍稿績鏄皢 NFA 鐘舵侀泦褰掑茍涓?span lang="EN-US"> DFA 涓殑鐘舵併傚湪 NFA 涓紝鏃犺鏄粠 1 鍒?span lang="EN-US"> 4 錛岃繕鏄?span lang="EN-US"> 1 鍒?span lang="EN-US"> 5 錛屼綔涓洪泦鍚堟潵璁查兘鏄泦鍚?span lang="EN-US"> 1 鍒伴泦鍚?span lang="EN-US"> 2 錛屾渶涓洪噸瑕佸緱鏄粡榪囩殑鏉′歡閮芥槸 a 銆傚洜鑰屼粠璇嗗埆璇█鐨勬晥鏋滄槸涓鏍風殑銆傝繖浣垮緱榪欎簺寮у悎騫舵垚涓哄彲鑳姐?span lang="EN-US">

鑰冭檻闆嗗悎瑕嗙洊鐨勬儏鍐點?span lang="EN-US">

clip_image002

涓涓粨鐐瑰睘浜庣涓涓泦鍚堝張鍚屾椂灞炰簬絎簩涓泦鍚堛傝繖縐嶆儏鍐典笉涓瀹氬ソ鐞嗚В銆備絾濡傛灉浠庤礬寰勭殑鍘嗗彶鐨勮搴﹁繘涓姝ュ尯鍒嗭紝鍗充笉鍚岀殑鏃墮棿緇忚繃鍚屼竴涓粨鐐癸紝灝嗗叾鐪嬫垚鏄笉鍚岀殑鐘舵併傛寜鐓ц繖縐嶆椂絀虹殑瑙掑害榪涗竴姝ュ尯鍒嗭紝寰楀埌鍙沖浘銆傝繖鍜屽浘 1 鏄被浼肩殑銆?span lang="EN-US">

鍐嶆潵鐪嬬湅甯︽湁緇堟佺粨鐐圭殑鎯呭喌錛?span lang="EN-US">

   clip_image003

ab 錛?span lang="EN-US"> abb 鍧囦負璇?span lang="EN-US"> NFA 璇嗗埆鐨勫彞瀛愶紝鍏惰漿鎹㈠涓嬶細

     

 

I a

Ib

A{1,2}

{3}

B{3}

{3,4}

C{3,4}

{3,4}

浠庢煇縐嶆剰涔変笂璇淬?span lang="EN-US"> NFA 涓殑鐘舵?span lang="EN-US"> 3 鍦?span lang="EN-US"> DFA 涓鍒嗙鎴愪袱閮ㄥ垎錛屽綋棣栨鍒拌揪 3 鏃跺簲璇ユ槸鐘舵?span lang="EN-US"> B 錛岃岀浜屾浠ュ悗鍐嶅埌杈?span lang="EN-US"> 3 鍒欏簲璇ュ睘浜庣姸鎬?span lang="EN-US"> C 銆?span lang="EN-US">

鏍規嵁瑙勫垯錛?span lang="EN-US"> C{3,4} 涓?span lang="EN-US"> DFA 鐨勭粓鎬侊紝浣嗗湪 NFA 涓紝鍙湁 4 涓虹粓鎬侊紝 C 涓粛鐒舵湁 3 涓洪潪緇堟侊紝鑻ユ湁璺緞 1 脿 3 脿 3 鏄犲皠鍒?span lang="EN-US"> DFA 涓篃鏄?span lang="EN-US"> A 脿 B 脿 C 錛屼綍瑙o紵

榪欓噷闈㈡渶鍏抽敭鐨勬槸錛氬浠繪剰涓涓彞瀛愶紝鎬誨彲浠ュ湪涓や釜鍥句腑鍒嗗埆鎵懼埌涓鏉¤礬寰勶紝褰㈡垚瀵瑰簲鍏崇郴銆傚茍涓嶆槸璇?span lang="EN-US"> NFA 涓殑姣忔潯璺緞閮借鍜?span lang="EN-US"> DFA 涓殑姣忔潯璺緞涓涓瀵瑰簲銆?span lang="EN-US">

褰撹瘑鍒彞瀛?span lang="EN-US"> ab 鏃訛紝閫夋嫨鐢?span lang="EN-US"> 3 鐩存帴鍒拌揪 4 鐨勮礬寰勩傚綋璇嗗埆鍙ュ瓙 abb 鏃訛紝鍒欏湪鐘舵?span lang="EN-US"> 3 寰幆涓嬈″啀鍒拌揪 4 銆?span lang="EN-US">

鐜板湪璁炬兂錛岄氳繃 1 脿 3 脿 3 緇忚繃鐨勮礬寰勪篃鏄?span lang="EN-US"> ab 銆備絾姝ゆ椂騫舵湭鍒拌揪緇堟併傚彲浠ヨ錛屽湪鍒拌揪 C 涓殑 3 鏃訛紝蹇呯劧閫夋嫨浜嗕袱涓?span lang="EN-US"> b 浠ヤ笂鐨勫彞瀛愩?span lang="EN-US">

鑰岃繖鏍風殑璺緞涓庨夋嫨鍙ュ瓙鏈夊叧緋匯?span lang="EN-US">

瀵逛簬 NFA 鑳借瘑鍒殑鍙ュ瓙錛屽湪 DFA 涓篃鑳借瘑鍒?span lang="EN-US">

瀵逛簬 NFA 涓嶈兘璇嗗埆鐨勫彞瀛愶紝鍦?span lang="EN-US"> DFA 涓篃涓嶈兘璇嗗埆銆?span lang="EN-US">

 



鑲ヤ粩 2008-12-13 15:21 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲国产日韩美| 亚洲电影一级黄| 亚洲欧美日韩国产一区| 欧美激情精品久久久久久变态| 午夜精品一区二区三区在线播放| 亚洲午夜一区二区三区| 亚洲一区二区影院| 午夜精品一区二区在线观看| 国产精品99久久久久久宅男| 亚洲欧美国产视频| 久久久www成人免费无遮挡大片| 久久精品最新地址| 欧美91视频| 伊人久久男人天堂| 亚洲免费观看在线观看| 亚洲一区二区精品视频| 欧美中文字幕久久| 亚洲激情午夜| 午夜精品久久久久久久99热浪潮 | 午夜在线成人av| 久久人人爽爽爽人久久久| 亚洲成色精品| 午夜久久久久久久久久一区二区| 久久一区二区三区国产精品| 欧美日本国产视频| 国产午夜精品福利| 99视频热这里只有精品免费| 欧美一区二区三区精品| 欧美激情在线免费观看| 中日韩美女免费视频网址在线观看 | 亚洲精选一区| 久久九九热免费视频| 欧美日韩1区2区| 在线电影院国产精品| 性娇小13――14欧美| 亚洲高清在线播放| 久久国产色av| 国产精品亚洲欧美| 日韩视频一区二区三区在线播放免费观看 | 国产亚洲精品久| 在线中文字幕不卡| 亚洲国产另类久久精品| 久久精品夜色噜噜亚洲aⅴ| 国产精品扒开腿做爽爽爽软件| 尤物在线精品| 久久久天天操| 欧美亚洲三级| 国产精品一国产精品k频道56| 一区二区三区免费看| 亚洲激情不卡| 欧美国产日本| 亚洲美女免费视频| 亚洲第一在线综合在线| 久久久久久网址| 国内精品一区二区| 久久精品视频在线| 亚洲欧美国产精品专区久久| 欧美香蕉大胸在线视频观看| 一本色道久久综合亚洲精品婷婷 | 香蕉av777xxx色综合一区| 亚洲国产精品久久久久秋霞影院| 久久av红桃一区二区小说| 国产女精品视频网站免费| 亚洲综合欧美| 亚洲欧美www| 国产区亚洲区欧美区| 久久高清免费观看| 香港久久久电影| 国产一区 二区 三区一级| 欧美中文字幕在线| 久久成人18免费网站| 一区在线免费| 亚洲成色777777女色窝| 免费欧美高清视频| 亚洲毛片视频| 一区二区免费在线播放| 国产精品国产三级国产专播品爱网| 亚洲一区二区三区高清| 亚洲综合色激情五月| 国内精品免费午夜毛片| 亚洲电影免费观看高清完整版在线观看| 免费h精品视频在线播放| 在线性视频日韩欧美| 亚洲欧美怡红院| 亚洲福利视频三区| 99精品视频免费观看| 国产日韩专区| 亚洲激情在线观看| 国产精品视频1区| 欧美成人网在线| 欧美午夜精品伦理| 美女视频黄a大片欧美| 欧美日韩国产免费| 久久视频一区二区| 欧美日韩精品久久久| 久久国内精品自在自线400部| 久久深夜福利免费观看| 一区二区三区产品免费精品久久75| 亚洲影院在线观看| 亚洲日本一区二区| 欧美亚洲在线| 亚洲网站在线观看| 久久婷婷综合激情| 羞羞色国产精品| 欧美精品aa| 美女网站在线免费欧美精品| 国产精品高潮呻吟久久| 欧美激情亚洲自拍| 国内精品久久久| 亚洲一区二区三区精品视频| 亚洲国产91精品在线观看| 亚洲宅男天堂在线观看无病毒| 亚洲精品裸体| 久久久之久亚州精品露出| 亚洲欧美日韩精品久久亚洲区 | 一区二区三区免费观看| 最新国产乱人伦偷精品免费网站| 亚洲午夜视频在线观看| 亚洲精品影视| 久久亚洲色图| 亚洲国产高清视频| 午夜国产不卡在线观看视频| 99精品国产在热久久下载| 欧美伊人久久| 亚洲欧美一区二区三区在线| 欧美国产一区二区| 欧美成人一区二区| 一区二区在线免费观看| 久久不射中文字幕| 久久久久国产精品一区| 国产精品你懂的在线| 一区二区三区你懂的| 亚洲美女91| 欧美精品一区二区三区在线播放| 欧美gay视频| 在线精品一区二区| 久久久久欧美| 免费久久久一本精品久久区| 黑人中文字幕一区二区三区| 午夜精品视频| 久久亚洲综合网| 尤物yw午夜国产精品视频明星| 久久久久久久久岛国免费| 久久久av毛片精品| 亚洲高清av在线| 欧美国产日韩免费| 99热这里只有精品8| 亚洲一本视频| 国产美女精品视频免费观看| 亚洲视频欧美视频| 久久不射2019中文字幕| 狠色狠色综合久久| 免费一级欧美片在线播放| 亚洲国内精品| 亚洲欧美国产日韩中文字幕| 国产一区视频在线观看免费| 欧美一级专区| 欧美大香线蕉线伊人久久国产精品| 亚洲激情自拍| 欧美四级伦理在线| 欧美一区二区三区在线看| 蜜臀久久久99精品久久久久久| 亚洲欧洲日韩女同| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 欧美午夜精品理论片a级大开眼界| 亚洲一区二区精品在线| 久久精品一二三| 亚洲日本乱码在线观看| 欧美日韩中字| 久久精品成人欧美大片古装| 欧美大片在线观看| 亚洲免费在线精品一区| 激情成人综合| 欧美视频一二三区| 久久久99精品免费观看不卡| 91久久精品国产91性色tv| 午夜精品一区二区在线观看| 亚洲高清在线观看| 国产乱码精品1区2区3区| 老司机精品视频网站| av成人黄色| 欧美激情视频一区二区三区免费| 亚洲自拍高清| 亚洲精品在线观| 国内自拍视频一区二区三区 | 狂野欧美一区| 亚洲视频免费| 91久久精品日日躁夜夜躁欧美| 欧美影院成人| 一区二区三区日韩| 国语自产偷拍精品视频偷 | 久久久久99| 亚洲影院色无极综合| 亚洲欧洲免费视频| 在线观看国产日韩| 国产伊人精品| 国产欧美短视频| 欧美特黄一级| 欧美性片在线观看| 欧美伦理影院|