接著
上一篇的話(huà)題。開(kāi)發(fā)智能提示首要的問(wèn)題就是開(kāi)發(fā)一個(gè)高性能的語(yǔ)法分析器。一個(gè)高性能的語(yǔ)法分析器總是包含一個(gè)高性能的詞法分析器的。本系列的
第一篇已經(jīng)提到了用C#和狀態(tài)機(jī)寫(xiě)著色器對(duì)10萬(wàn)行代碼進(jìn)行著色只需要半秒。鑒于我們大部分的程序文件都只是幾千行,因此用相同的技術(shù)開(kāi)發(fā)的詞法分析器顯然可以在幾十毫秒內(nèi)完成對(duì)文件的分析,從而再也不需要擔(dān)心詞法分析器的性能問(wèn)題了。
著色器的狀態(tài)機(jī)一般都比詞法分析器的狀態(tài)機(jī)簡(jiǎn)單,因?yàn)槲覀兛偸鞘褂靡粋€(gè)顏色來(lái)表達(dá)一些類(lèi)型的記號(hào)(譬如操作符、數(shù)字和名字一般都用同樣的顏色——黑色)。因此我們每當(dāng)支持一種新語(yǔ)言或者當(dāng)語(yǔ)言升級(jí)的修改IDE的時(shí)候,總是要同時(shí)修改兩個(gè)狀態(tài)機(jī)。手寫(xiě)狀態(tài)機(jī)是很容易出錯(cuò)的,就如同手寫(xiě)語(yǔ)法分析器也很容易出錯(cuò)一樣。語(yǔ)法分析器的解決辦法是讓你給文法來(lái)生成語(yǔ)法分析器的代碼,因此詞法分析器和著色器也使用類(lèi)似的方法:給狀態(tài)機(jī)生成代碼。
目前這個(gè)狀態(tài)機(jī)只做了一半:只能畫(huà)狀態(tài),暫時(shí)還不能指定顏色或者記號(hào)類(lèi)型。當(dāng)然添加一個(gè)指定顏色的功能是很簡(jiǎn)單的,不過(guò)我還需要想一想如何用圖像來(lái)表達(dá),讓狀態(tài)機(jī)顯得更清晰。今天做了一個(gè)晚上搞定了狀態(tài)機(jī)的編輯程序,如圖所示:
接下來(lái)就可以開(kāi)發(fā)兩個(gè)功能,第一個(gè)是生成著色器的代碼,第二個(gè)是生成詞法分析器的代碼。這樣就可以避免因?yàn)槌绦驅(qū)戝e(cuò)從而省下一大堆調(diào)試的時(shí)間了。
posted on 2010-09-19 09:58
陳梓瀚(vczh) 閱讀(7191)
評(píng)論(6) 編輯 收藏 引用 所屬分類(lèi):
開(kāi)發(fā)自己的IDE