锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鏈榪戠湅浜嗐婅蔣浠惰皟璇曞疄鎴樸嬶紝緇撳悎鑷繁鐨勭粡鍘嗭紝鎬葷粨浜嗕竴涓嬶細 1. 涓庢祴璇曠敤渚嬬浉鍏?/p> a. 濡傛灉涓嶈兘杈懼埌“嫻嬭瘯鍏堣”錛岃嚦灝戝簲璇ュ湪鍐欏畬浠g爜鍚庢湁鐩稿瀹屾暣鐨勬祴璇曠敤渚嬨傚浜庢紜х殑淇濊瘉鍜屼互鍚庨噸鏋勪唬鐮侀兘鏄湁濂藉鐨勩?/p> b. 姣忔娣誨姞鏂板姛鑳芥垨淇浜嗕竴涓猙ug鏃訛紝閮藉簲璇ュ鍔犳祴璇曠敤渚嬶紒A鍘嗙粡鍗冭緵涓囪嫤緇堜簬fix 浜嗕竴涓猙ug錛屽緢涔呭緢涔呬互鍚庯紝B瑙夊緱榪欐浠g爜闇瑕佹敼鏀癸紝浜庢槸鏀逛簡鏀癸紝鍚庢潵鐨勭粨鏋滆繕鏄敼浜嗭紝鑰屼笖欏哄埄鎻愪氦鍒頒簡搴撻噷錛堝洜涓篈褰撴椂閬囧埌鐨刡ug 騫舵病鏈夊嚭鐜幫紒錛?/p> c. 鍥炲綊嫻嬭瘯 淇敼浠g爜鍚庤繘琛屽洖褰掓祴璇曘傛瘡嬈℃彁浜や竴涓増鏈悗鑷姩榪涜鍥炲綊嫻嬭瘯錛屼繚璇佸簱閲岀殑浠g爜鐨勬紜с? d. 綆鍖栨祴璇曠敤渚? 濂藉錛氬彲浠ユ帓闄や笉璧蜂綔鐢ㄧ殑鍥犵礌錛涘噺灝戞祴璇曠敤渚嬬殑榪愯鏃墮棿錛涙渶閲嶈鐨勬槸錛屼嬌鐢ㄦ祴璇曠敤渚嬫洿瀹規槗璋冭瘯錛堣皝鎰挎剰澶勭悊閭d簺濉厖浜嗘暟鐧炬垨鏁板崈欏圭殑鏁版嵁瀹瑰櫒鍛紵錛? 鏂規硶濡傦細 濡傛灉嫻嬭瘯渚嬪瓙姣旇緝濂芥敼錛屽彲浠ュ皢鍏舵敼灝忥紱灝嗚緭鍏ラ泦鏀瑰皬 e. 瀹屾垚浠g爜錛屾竻鐞嗗悗閲嶆柊榪愯鎵鏈夋祴璇曠敤渚嬨? 2. 鍏充簬紼嬪簭鐨勭紪璇? a. 閲嶈緙栬瘧鏈熼棿鐨剋arning錛屾渶濂芥妸warning鏁板噺涓?. 涓嶈蹇界暐緙栬瘧鍣ㄨ鍛婏紝鍗充嬌瀹冧滑鍙兘鏄棤瀹崇殑銆? eg錛? int add(int a,int b){ return a +b ; } 緇撴灉澶存枃浠墮噷澹版槑鎴愪簡 extern int add(long a,int b) 浼氳皟璇曟浜哄晩錛岃皟紼嬪簭鐨勬椂鍊欎竴鐪嬬▼搴忓畾涔夋槸瀵圭殑鍟婏紝鎬庝箞浼犵殑鍙傛暟涓涓嬪氨鍙樹簡錛? b. 濡傛灉鍑虹幇鑾悕鍏跺鐨勯敊璇? 濡傛灉鏄敤Makefile緇勭粐宸ョ▼鏃訛紝鑰冭檻make clean錛屾湁鍙兘淇敼鏁版嵁緇撴瀯鎴栧ご鏂囦歡鍚庢敼鍙樹簡涓浜涗笢瑗匡紝浣嗘槸鐢變簬涓浜涙湭鐭ュ師鍥犺鏂囦歡騫舵湭閲嶆柊緙栬瘧銆傚鏋滃嚱鏁版槸C鍑芥暟錛屾湁鍙兘璋冪敤鑰呭拰琚?璋冪敤鑰呯殑鍙傛暟鐨勬垚鍛樺拰綾誨瀷涓嶅悓銆傚鏋滀竴涓被鏂規硶錛屽垯璁塊棶浠諱綍綾繪垚鍛?閮藉皢鍙戠敓閿欒錛屽洜涓鴻繖涓や釜綾葷殑鍐呭瓨鑰屽凡鍑犱箮鏄畬鍏ㄤ笉鍚岀殑銆傝繖鍙兘瀵艱嚧Segmentation falut,鎴栨槸寰堜箙涔嬪悗鎵嶈兘媯嫻嬪埌鐨勫唴瀛樼牬鍧忋? 3. 鍏充簬閾炬帴 a. 閾炬帴鍣ㄧ殑鍩烘湰宸ヤ綔鍘熺悊 緙栬瘧鍣ㄦ垨姹囩紪紼嬪簭灝嗘簮浠g爜杞崲涓烘満鍣ㄤ唬鐮侊紝騫惰緭鍑哄璞¤皝鐨勩傚璞℃枃浠朵腑鍖呭惈絎﹀彿錛堝嚱鏁版垨鍙橀噺錛夛紝榪欎簺絎﹀彿鏈夌殑鍦ㄦ湰妯″潡瀹氫箟鐨勶紝鏈夌殑鍦ㄥ叾浠栨ā鍧楀畾涔夌殑錛岄摼鎺ュ櫒灝卞湪閾炬帴瀵硅薄鏂囦歡鏃舵妸榪欎簺鏈畾涔夌殑絎﹀彿涓庡畾涔夊畠鐨勬ā鍧楀搴旇搗鏉ャ? b. 閾炬帴欏哄簭 鏈夊簱鍜屽綊妗f枃浠舵椂 閾炬帴綆楁硶鏄笉涓鏍風殑銆?nbsp; 閾炬帴鍣ㄥ弬鏁伴『搴忓緢閲嶈錛屽浜庣紪璇戝崟鍏冿紙濡傚璞℃枃浠跺拰搴擄級鍜屾悳绱㈣礬寰勬潵璇撮兘鏄姝ゃ? c. C++涓嬌鐢–浠g爜鏃訛紝鐢╡xtern c{} 鎶奀浠g爜鍖呰涓涓嬨? 鍏充簬 c++絎﹀彿鍜屽悕縐版敼緙栵細C++鍏佽閲嶈澆鍑芥暟錛屼負浜嗙敓鎴怌++浠g爜鍏冪礌鐨勫敮涓絎﹀彿錛岀紪璇戝櫒浣夸竴縐嶇О涓哄悕縐版敼緙栵紙name mangling錛夌殑鎶鏈紝瀹冨皢瀵硅薄鐨勫噯紜鏍艱鏄庯紙濡備細鍛樺悕絀洪棿鍜屽嚱鏁板弬鏁扮殑涓暟鍙婄被鍨嬶級緙栫爜鍒扮鍙蜂腑銆傦紙鍙互鐢╟++filt瑙f瀽鍑烘潵~ eg: c++filt _Z9factoriali鐨勭粨鏋滀負factorial(int)錛? d. 鐜鍙橀噺 LD_LIBRARY_PATH浼氬獎鍝嶅姩鎬佸姞杞界殑搴擄紝鐢↙DD鍙互鐪嬪埌紼嬪簭渚濊禆鍝釜鍔ㄦ佸簱 4. 鑷姩鍖栨祴璇? 璁╀竴鍒囪嚜鍔ㄥ寲璧鋒潵銆傚鏋滈噸澶嶇殑鍋氫竴浠朵簨錛屽氨寰堟湁蹇呰鑰冭檻鑷姩鍖栦簡銆? 5. 鍏充簬閭d簺鎬紓鐨勯敊璇? 鍦ㄤ竴浜涙樉鑰屾槗瑙佹湁鍐呭瓨闂鐨勬儏鍐典笅錛屽錛氶棿姝囨晠闅滃拰鏃犳硶瑙i噴鐨勯殢鏈鴻涓猴紝榪欐椂鑰冭檻浣跨敤鍐呭瓨璋冭瘯鍣ㄤ簡錛? 濡倂algrind錛屽緢濂界敤錛屼篃寰堢畝鍗曘? valgrind –tool=massif your_program 榪涜鍐呭瓨鍓栨瀽錛堟嫻嬪唴瀛樺垎閰嶆儏鍐碉紝浼樺寲鍐呭瓨浣跨敤錛? valgrind –tool=memcheck your_program 榪涜鍐呭瓨媯鏌ワ紙媯嫻嬫棤鏁堢殑鍐欒闂紝媯嫻嬪鏈垵濮嬪寲鐨勫唴瀛樼殑璇誨彇鎿嶄綔錛屾嫻嬪唴瀛樻硠闇茬瓑錛? valgrind –tool=helgrind your_program 鏌ユ壘绔炰簤鏉′歡錛屽彲浠ョ敤鏉ヨ緟鍔╄皟璇曞綰跨▼紼嬪簭 valgrid –-db-attac=yes鐨勫姛鑳藉緢濂界敤錛屽彲浠ュ皢鍐呭瓨楂樺害鍣ㄥ拰婧愪唬鐮佹祴璇曞櫒錛堝gdb錛夌粨鍚堣搗鏉ワ紝榪欐牱灝卞彲浠ュ嵆鏃舵煡鐪嬪綋鏃剁殑鍙橀噺鐨勫鹼紝寰堝ソ鐢紒 6. 闈欐佹鏌ュ櫒 浣滀負甯歌杞歡鏋勫緩榪囩▼涓殑涓閮ㄥ垎榪愯錛岀敤浜庢煡鎵句竴浜涘彲閫氳繃闈欐佹簮浠g爜鍒嗘瀽鍙戠幇鐨勭壒瀹歜ug銆? 7. 鍏充簬榪愯鏃跺墫鏋愬伐鍏? 涓嶈緙栧啓鑷繁鐨勮繍琛屾椂鍓栨瀽鏃跺伐鍏鳳細鑷繁闇炲弸浜戞湅涓鐨勫墫鏋?宸ュ叿閫氬父浣跨敤緋葷粺璋冪敤time()鎴朿time()鏉ユ祴閲忔椂闂淬傝繖浜涚郴緇熻皟鐢ㄧ殑闂鏄紑閿寰堥珮錛岃屼笖鍑嗙‘搴︿綆銆傚彟澶勫湪鍓栨瀽鏈熼棿瑕佹敹闆嗗ぇ閲忔暟鎹紝鍙兘浼氬獎鍝嶇▼搴忔湰韜殑琛屼負銆? 8. 鐜鍙橀噺 濡傜▼搴忕殑琛屼負鍙兘 渚濊禆浜庡綋鍓嶅伐浣滅洰褰曘傚湪linux涓婏紝鐩綍琚敞鍐屽埌鐜鍙橀噺CWD涓娿傝繖涓猙ug紕板埌榪囷紝榪樺鑷翠簡姝婚攣銆? 9. 璇誨彇鎭板綋鐨勯敊璇秷鎭? 鏌愪釜鍦版柟鍑洪敊鏃訛紝婊″睆閮芥槸閿欒娑堟伅鏃訛紝搴旇閲嶇偣鍏蟲敞鍝簺娑堟伅錛? Answer: 棣栧厛鍑虹幇鐨勯偅浜涙秷鎭紒鍥犱負鍚庨潰鐨勬秷鎭湁鍙兘鏄墠闈㈠鑷寸殑銆傝繖鍜岀紪璇戝嚭閿欐椂鐨勬儏鏅竴鑷達細緙栬瘧閿欒鏈夊緢澶氾紝鎴戜滑鑲畾浼氱洿瑙夊湴鍘誨鎵劇涓涓嚭閿欑殑 鍦版柟錛岃皝鐭ラ亾鏄笉鏄皯浜嗕釜鎷彿瀵艱嚧鍚庨潰涓榪炰覆鐨勯敊璇? 10. bug涓嶄細鑷姩娑堝け 濡傛灉鏌愪釜鐗堟湰鏈塨ug錛寀pdate鍚庯紝bug娑堝け浜嗭紝“鐪熷ソ錛?#8221;錛屼竴瀹氳寮勬竻妤歜ug鍑虹幇鐨勫師鍥犳槸浠涔堛備互鍓嶉亣鍒拌繃涓涓猙ug錛屽鍔犱竴鏉rintf璇彞鍚庯紝bug娑堝け浜嗭紒鏈鍚庡彂鐜伴棶棰樻槸鏁扮粍瓚婄晫浜嗭紝鑰屼慨鏀規簮浠g爜浼氬鑷翠唬鐮佹錛屾暟鎹鐨勫竷灞絳夋敼鍙橈紝鎵浠ヤ細瀵艱嚧鍋跺皵瀵廣傦紙榪欑鎯呭喌鍙互姹傚姪浜庡唴瀛樿皟璇曞伐鍏鋒垨鑰呴潤鎬佹鏌ョ殑宸ュ叿錛? 11. 瀛︿範浣跨敤gcc, gdb,strace 絳夊伐鍏楓傦紙鐔熸倝浠ュ悗鍙互鍐嶆寲鎺樻寲鎺橈紝鍙兘鏈夋儕鍠滐級 12. cvs/svn commit涔嬪墠涓瀹氳diff涓涓嬶紝鐪嬪仛浜嗗摢浜涗慨鏀癸紝浠ラ伩鍏嶄笉灝忓績鍒犳帀涓浜涗笢瑗垮悗錛岀劧鍚?#8221;琚彁浜?#8221;浜嗐? 鏈鍚庯紝鏈寮哄ぇ鐨勫伐鍏蜂笉鍦ㄨ綆楁満涓紝鑰屾槸璋冭瘯鑰呯殑鍒ゆ柇鍔涘拰鍒嗘瀽鎶宸с?/p> 鍙傝冭祫鏂欙細 1. 銆婅蔣浠惰皟璇曞疄鎴樸嬶細http://book.douban.com/subject/4231293/ 鍥涳紟 浠g爜涓嬭澆 svn checkout http://regexp.googlecode.com/svn/trunk/ regexp-read-only
gdb榪愯鏃朵細棣栧厛鍔犺澆 ~/.gdbinit鏂囦歡
渚嬪錛氭垜鍦╠ebug鏃訛紝姣忔閮介渶瑕佽繘琛宧andle SIGBUS noprint pass鏉ュ鐞哠IGBUS淇″彿錛岃繖縐嶆儏鍐靛氨鍙互鎶婂畠鍐欏叆 .gdbinit鏂囦歡銆?
鍦?gdbinit閲屼篃鍙互瀹氫箟鍑?
eg: 鍦?gdbinit閲屽畾涔塸rint_regs
def print_regs
i r eax ebx ecx edx
end
(gdb) print_regs
eax 0xbffff4a4 -1073744732
ebx 0x28bff4 2670580
ecx 0x902c5562 -1876142750
edx 0x1 1 闃呰鍏ㄦ枃
]]>
]]>
a. echo鍙橀噺鐨勫?nbsp;
b. shell –x
姝ゅ錛?font color="#ff0000">Remember that the shell spends a lot of its life substituting text.錛?a >http://linuxcommand.org/wss0100.php錛変緥濡傦紝瀵逛簬涓嬮潰鐨勭▼搴忥細
if璇彞閲岀殑var鍙橀噺緇忔浛鎹㈠悗鍙樹負 if [ = "y" ]錛屼簺鏃跺綋鐒朵細鍑洪敊銆?br />
hex108@Gentoo ~ $ cat test.sh
#!/bin/sh
var=
if [ $var = "y" ] ;then
echo "yes"
fi
hex108@Gentoo ~ $ ./test.sh
./test.sh: line 3: [: =: unary operator expected
ps:鐜板湪鍐欒剼鏈殑鏃跺欏懼悜浜庝嬌鐢╬erl,鑰岃緝灝戜嬌鐢╯hell 錛屽洜涓哄浜庣粡甯鎬嬌鐢ㄧ殑鑴氭湰錛屽彲鑳戒細緇忓父闇瑕佸瀹冧笉鍋滃湴榪涜鏀硅繘錛屾參鎱㈢殑錛岀▼搴忚秺鏉ヨ秺澶э紝璇ヨ冭檻閲嶆瀯浜嗭紝 姝ゆ椂鎵嶄細鍙戠幇perl(python絳?#8220;鐪熸鐨?#8221;鑴氭湰璇█)姣攕hell鐩稿鏉ヨ鏇村ソ閲嶆瀯銆?/p>
濡傛灉紼嬪簭鍛樺繀欏繪竻妤氬湴鐭ラ亾鏌愬潡鍐呭瓨瀛樼潃浠涔堝唴瀹瑰拰鏌愪釜鍐呭瀛樺湪鍝釜鍐呭瓨鍦板潃閲屼簡錛岄偅浠栦滑鐨勮礋鎷呭彲鎯寵岀煡銆?br /> 姹囩紪璇硶瀵?#8220;涓涓唴瀛樺湴鍧瀛樼潃涓涓搴旂殑鏁?#8221;錛屼綔浜嗙畝鍗曠殑“鎶借薄”錛?font color="#cc0000">鎶婂唴瀛樺湴鍧鐢ㄥ彉閲忓悕浠f浛浜嗭紝瀵瑰唴瀛樺湴鍧鐨勫彇鍊煎拰璧嬪兼柟寮忎笉鍙樸?br /> c璇█瀵規榪涜浜嗚繘涓姝ョ殑鎶借薄錛氬彉閲?<==> 錛堜竴涓唴瀛樺湴鍧錛屽搴旂殑鍊鹼級錛堣繖閲屽拷鐣ョ被鍨嬬瓑淇℃伅錛夈?br />
鎶奀璇█涓殑鍩烘湰綾誨瀷(int,long,float絳?,鎸囬拡錛屾暟緇勭瓑榪樺師涓猴紙涓涓唴瀛樺湴鍧錛屽搴旂殑鍊鹼級鍚庯紝灝辮兘鏇存竻娣呭湴鐞嗚В瀹冧滑浜嗐?br />
鍐呭瓨灝辯浉褰撲簬(addr,val)鐨勫ぇhash琛?c璇彞鐨勮涔夊熀鏈氨鏄敼鍙榟ash鍊箋?br />
涓轟簡涓嬫枃鐨勬柟渚匡紝鐗瑰畾涔夊涓嬭涔夛紙閬靛驚C鐨勬爣鍑嗚涔夛級錛?
var <==> (addr, val) (var涓轟竴涓彉閲忓悕錛宎ddr涓簐ar鍦ㄥ唴瀛樹腑鐨勯鍦板潃,val涓簐ar 鐨勫?
&var <==> addr
var <==> var浣滀負宸﹀煎嚭鐜幫紙鍗崇瓑寮忓乏杈癸級鏃訛紝var絳変環浜?addr;
var浣滀負鍙沖煎嚭鐜幫紙鍗崇瓑寮忓乏杈癸級鏃訛紝var絳変環浜?val;
*var <==> val
娉細絎﹀彿"<==>" 鍙寵竟鍑虹殑絳夊紡 x = y(x鏄竴涓唴瀛樺湴鍧錛寉鏄竴涓?; 琛ㄧず灝嗗唴瀛樺湴鍧涓簒鐨勫唴瀹圭疆涓哄紋錛屽addr = 3琛ㄧず緗唴瀛榓ddr閲岀殑鍊間負3
鐜板湪鍒╃敤涓婇潰鐨勮涔夎В閲婁竴涓嬭繖浜涗緥瀛愶細
int i = 3;
鍋囪 i鐨勫唴瀛樺湴鍧涓?0x8049320 ,閭d箞榪欏彞璇濈殑璇箟鏄?x8049320 = 3錛岀粡榪噄 = 3鍚庯紝i涓?0x8049320,3)
int b = i;
鍋囪 b鐨勫唴瀛樺湴鍧涓?0x8049324 ,閭d箞榪欏彞璇濈殑璇箟鏄?x8049324 = i瀵瑰簲鐨剉al = 3,姝ゆ椂b涓?0x8049324,3)
int *p = &b
鎸囬拡p涔熸槸涓涓彉閲忥紝int **p,int *p[8],鍦ㄨ繖浜涚敵鏄庝腑p閮藉彧鏄竴涓寚閽堝彉閲忥紝瀹冨拰鍏朵粬鐨勫彉閲忕殑涓嶅悓涔嬪鍦ㄤ簬瀹冪殑澶у皬鏄畾鐨勶紝瀹冪殑綾誨瀷淇℃伅鍙槸緙栬瘧鍣ㄧ敤鏉ヨ繘琛岀被鍨嬫鏌ュ拰鍏朵粬涓浜涗綔鐢ㄧ殑(濡傛灉娌℃湁綾誨瀷媯鏌ワ紝浣犲彲浠ョ敤浠諱綍鐨勬柟寮忓涓涓彉閲忚繘琛屾搷浣滃int i; ****i = 3)銆傚亣璁緋鐨勫湴鍧涓?x8049328,鍒欐牴鎹畃 = &b鐨勮涔塸.addr = b.addr錛宲涓?0x8049328,0x8049324)
*p = 5;
璇箟涓?0x8049324 = 5,姝ゆ椂鍙敼鍙樹簡鍐呭瓨鍦板潃涓?x8049324鐨勫鹼紝鍗蟲敼鍙樹簡b鐨勫?0x8049324,5)錛岃宲鐨勫煎茍鏈敼鍙?br />
int **q = &p; //濡傛灉鍐欎負int **q = &&i; gcc緙栬瘧涓嶉氳繃
鍋囪q鐨勫唴瀛樺湴鍧涓?x8049330,璇箟涓?0x8049330 = addr(p) = 0x8049328;鎵浠涓?0x8049330, 0x8049328)
(int **q = &&i, 瑕佹槸緙栬瘧榪囦簡鍒檘搴旇琛ㄧず涓?0x8049330, x),鍐呭瓨鍦板潃涓簒鐨勫湴鏂硅〃紺轟負(x,0x8049320)錛岄偅涔堝湴鍧x涓哄灝戝憿? )
**q = 6
璇箟涓?val(val(q)) = val(0x8049328) = 0x8049324 = 6,灝嗗唴瀛樺湴鍧涓?x8049324鐨勫唴瀹圭疆涓?,鍗沖皢b鐨勫肩疆涓?,b涓?0x8049324,6)
瀵逛簬緇撴瀯錛岃繖浜涜涔変篃閫傜敤錛屽洜涓虹粨鏋勯噷鐨勬垚鍛樹篃鏄湁瀵瑰簲鍦板潃鐨勶紝涔熻兘琛ㄧず涓?addr,val)鐨勫艦寮忋?nbsp;
瀵?#8220;涓涓唴瀛樺湴鍧瀛樼潃涓涓搴旂殑鍊?#8221;鐨勬娊璞$▼搴﹁秺楂橈紝瓚婁笉鐢ㄥ叧蹇冨簳灞傦紝濡俲ava銆?nbsp;
Haskell宸茬粡娌℃湁鍓綔鐢ㄤ箣璇翠簡錛屾洿涓嶇敤鍏沖績榪欎簺浜嗐?br />
灝辮繖浜涖?img src ="http://m.shnenglu.com/hex108/aggbug/124234.html" width = "1" height = "1" />
]]>
璇ユ鍒欒〃杈懼紡鏆傛椂鑳借瘑鍒?*,|,(,)絳夌壒孌婄鍙鳳紝濡?a|b)*abc銆備笉榪囨墿灞曞埌鍏朵粬絎﹀彿錛堝?錛変篃鐩稿姣旇緝瀹規槗錛屼慨鏀筃FA涓殑鏋勫緩瑙勫垯鍗沖彲銆?br>
浜岋紟 寮曟搸鐨勬瀯寤?/span>
璇ユ鍒欒〃杈懼紡寮曟搸鐨勬瀯寤轟互銆奀ompilers Principles,Techniques & Tools銆?.7鑺備負渚濇嵁錛屾殏鏃跺彧鑳借瘑鍒?,|,(,)榪欏嚑涓壒孌婄殑瀛楃錛屽叾宸ヤ綔榪囩▼涓猴細鏋勫緩NFA -> 鏍規嵁NFA鏋勫緩DFA -> 鐢―FA鍖歸厤銆?br>
1. 鏋勫緩NFA
璇FA鐨勬瀯寤轟互2鏉″熀鏈鍒欏拰3鏉$粍鍚堣鍒欎負鍩虹錛岄噰鐢ㄥ綊綰崇殑鎬濇兂鏋勫緩鑰屾垚銆?br>1錛?鏉″熀鏈殑瑙勫垯鏄?
a. 浠ヤ竴涓┖鍊?#949;鏋勫緩涓涓狽FA
b. 浠ヤ竴涓瓧絎鏋勫緩涓涓狽FA
2) 3鏉$粍鍚堣鍒欐槸錛?br>a. r = s | t 錛堝叾涓璼鍜宼閮芥槸NFA錛?br>
b. r = s t錛堝叾涓璼鍜宼閮芥槸NFA錛?br>
c. r = s *錛堝叾涓璼涓篘FA錛?br>
3) 濡傛灉闇瑕佽瘑鍒”?”絳夌壒孌婄鍙鳳紝鍒欏彲鍐嶅姞涓浜涚粍鍚堣鍒欍?br>
鍦ㄥ叿浣撶殑紼嬪簭涓紝鍙互浠ヤ笅闈㈢殑BNF涓虹粨鏋勬潵瀹炵幇銆傦紙鍏蜂綋瑙佹簮紼嬪簭regexp.cpp錛?br>
s -> s t | s
t -> a '*' | a
a -> token | '(' r ')' | ε
2. 鏋勫緩DFA
涓昏鏄眰ε闂寘鐨勮繃紼嬶紝浠庝竴涓泦鍚堢殑ε闂寘杞Щ鍒頒竴涓泦鍚堢殑ε闂寘銆?br>浠*c涓轟緥錛屽叾NFA鍥懼涓嬫墍紺猴紙鐢╠ot鐢葷殑錛?br>
涓轟緥:
璧峰緇撶偣3鐨?#949;闂寘闆嗕負 A = {3,1,4}
A閬囦笂瀛楁瘝a鐨勮漿縐諱負MOV(A,a) = { 2 }錛屽叾ε闂寘闆嗕負B = { 2,1,4 }
A閬囦笂瀛楁瘝c鐨勮漿縐諱負MOV(A,c) = { 6 }錛屽叾ε闂寘闆嗕負B = { 6 }
鍚岀悊鍙眰鍑哄叾浠栬漿縐婚泦鍚堬紝鏈鍚庡緱鍒扮殑DFA濡備笅鎵紺?
3. 鍖歸厤
姣忓尮閰嶆垚鍔熶竴涓瓧絎﹀垯DFA縐誨姩鍒頒笅涓浉搴旂殑緇撶偣銆?br>
涓夛紟 鏀硅繘
1. 濡傞緳涔︿腑鎵璇達紝鏈夋椂鍊欐ā鎷烴FA鑰屼笉鏄洿鎺ユ瀯寤篋FA鍙兘杈懼埌鏇村ソ鐨勬晥鏋溿?br>2. 姣忔鍖歸厤涓嶆垚鍔熼兘闇瑕佸洖婧紝榪欎釜鍦版柟涔熷彲浠ュ熼壌KMP綆楁硶錛堜笉榪嘖MP瀵規濂藉儚鏈夌偣涓嶉傜敤錛?br>3. 鍏朵粬鏀硅繘鏂規硶鍙互鐪嬬湅銆婃煍鎬у瓧絎︿覆鍖歸厤銆嬪拰榫欎功銆奀ompilers Principles,Techniques & Tools銆?.7鑺傘?br>
]]>