• <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>
            隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
                上一篇文章基本上把分析的過(guò)程都講完了,于是這次就把FpMacro作為一個(gè)Demo拿了出來(lái)。不第一次就發(fā)的原因主要是那個(gè)時(shí)候FpMacro剛剛寫(xiě)完,當(dāng)然寫(xiě)完就要用的,于是后來(lái)就在Vczh Library++ 3.0的庫(kù)里面大量使用了FpMacro作為代碼生成的一個(gè)工具,用來(lái)代替一部分的宏的功能。當(dāng)然最后我并沒(méi)有寫(xiě)個(gè)插件安裝到VC++里,而是寫(xiě)了一個(gè)批處理文件去調(diào)用FpMacro.exe。

                【點(diǎn)擊這里下載VL++3.0可配置語(yǔ)法分析器Demo:FpMacro源代碼】

                FpMacro使用常規(guī)的分析方法,首先用可配置語(yǔ)法分析器書(shū)寫(xiě)語(yǔ)法,然后連接到一些語(yǔ)義處理函數(shù)上生成FpMacro的語(yǔ)法樹(shù),最后使用語(yǔ)法樹(shù)生成虛擬機(jī),然后就可以通過(guò)虛擬機(jī)來(lái)生成代碼了。FpMacro被定義為一個(gè)專(zhuān)門(mén)用來(lái)產(chǎn)生字符串結(jié)果的語(yǔ)言,最小語(yǔ)法元素自然是字符串連接了。連接兩個(gè)字符串不需要任何符號(hào),就直接并排著寫(xiě)上去就行了。

                當(dāng)然這里遇到了一些小問(wèn)題,譬如$loop(10,1,$xyz)和loop(10,1,$xyz)的括號(hào)和逗號(hào)的意思是不一樣的。前者括號(hào)和逗號(hào)是語(yǔ)法的一部分,后者括號(hào)和逗號(hào)是字符串的一部分,因此在處理函數(shù)調(diào)用的參數(shù)表達(dá)式和函數(shù)調(diào)用之外的表達(dá)式需要兩套文法。可配置語(yǔ)法分析器剛好解決了這個(gè)問(wèn)題,因?yàn)樘砑右粭l語(yǔ)法的代價(jià)非常小,因此直接復(fù)制那幾行做一點(diǎn)小修改就行了。

                代碼結(jié)構(gòu)如下:
                <Library>
                    基礎(chǔ)設(shè)施
                    GenerateCode.bat(要在Tools\FpMacro.exe編譯出來(lái)之后才能使用)
                    <Collections>容器和Linq的代碼
                    <Combinator>可配置語(yǔ)法分析器代碼
                    <Regex>正則表達(dá)式引擎代碼
                    <Stream>流系統(tǒng)代碼
                    <UnitTest>超級(jí)迷你實(shí)用型單元測(cè)試框架,適合單人開(kāi)發(fā)實(shí)用
                <Tools>
                    FpMacro.exe(注意,要將FpMacro的release編譯之后產(chǎn)生的exe復(fù)制到這里)
                    <FpMacro>

                GenerateCode.bat主要用于把Function.f.fpm、Tuple.h.fpm和Event.h.fpm編譯成Function.h、Tuple.h和Event.h三個(gè)文件,然后產(chǎn)生三個(gè)Log文件用來(lái)記載fpm文件語(yǔ)法分析的結(jié)果,可以檢查是否有一些遺漏。

                接下來(lái)的文章計(jì)劃寫(xiě)一寫(xiě)關(guān)于如何在C++里面模擬C#Linq to Object的語(yǔ)法(編譯器寫(xiě)多了就這樣了,F(xiàn)Q不要來(lái)噴)。語(yǔ)法是一門(mén)語(yǔ)言或者庫(kù)里相當(dāng)重要的一個(gè)部分,直接決定了你寫(xiě)代碼的時(shí)候的情緒,從而嚴(yán)重影響生產(chǎn)力、效率和代碼質(zhì)量。
            posted on 2009-12-12 22:19 陳梓瀚(vczh) 閱讀(4950) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): VL++3.0開(kāi)發(fā)紀(jì)事
            久久嫩草影院免费看夜色| 国产精品一久久香蕉国产线看观看| 久久99精品国产99久久6男男| 久久亚洲国产午夜精品理论片 | 日日躁夜夜躁狠狠久久AV| 俺来也俺去啦久久综合网| 久久精品成人欧美大片| 久久夜色精品国产欧美乱| 久久噜噜久久久精品66| 久久中文骚妇内射| 国产精品永久久久久久久久久| 亚洲午夜久久久影院| 久久婷婷五月综合色99啪ak| 久久久无码精品亚洲日韩按摩| 国产AⅤ精品一区二区三区久久| 久久久久亚洲AV片无码下载蜜桃 | 久久无码AV中文出轨人妻| 国产精品久久久久天天影视| 久久人妻AV中文字幕| 精品久久久久久久中文字幕| 热99re久久国超精品首页| 欧美一区二区三区久久综合| 久久这里只有精品首页| 久久97久久97精品免视看秋霞| 国产精品美女久久久久网| 久久久久久九九99精品| 伊人久久综合精品无码AV专区| 久久综合伊人77777| 久久亚洲av无码精品浪潮| 久久国产精品免费| 97超级碰碰碰碰久久久久| 国产精品久久久久…| 久久91精品国产91久久户| 国产精品美女久久久久| 77777亚洲午夜久久多喷| 久久午夜伦鲁片免费无码| 精品久久人妻av中文字幕| 婷婷久久久亚洲欧洲日产国码AV| 亚洲欧美日韩中文久久| 久久婷婷国产综合精品| 国产成人精品久久|