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

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

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

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

                代碼結(jié)構(gòu)如下:
                <Library>
                    基礎(chǔ)設(shè)施
                    GenerateCode.bat(要在Tools\FpMacro.exe編譯出來之后才能使用)
                    <Collections>容器和Linq的代碼
                    <Combinator>可配置語法分析器代碼
                    <Regex>正則表達(dá)式引擎代碼
                    <Stream>流系統(tǒng)代碼
                    <UnitTest>超級迷你實(shí)用型單元測試框架,適合單人開發(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三個文件,然后產(chǎn)生三個Log文件用來記載fpm文件語法分析的結(jié)果,可以檢查是否有一些遺漏。

                接下來的文章計(jì)劃寫一寫關(guān)于如何在C++里面模擬C#Linq to Object的語法(編譯器寫多了就這樣了,F(xiàn)Q不要來噴)。語法是一門語言或者庫里相當(dāng)重要的一個部分,直接決定了你寫代碼的時(shí)候的情緒,從而嚴(yán)重影響生產(chǎn)力、效率和代碼質(zhì)量。
            posted on 2009-12-12 22:19 陳梓瀚(vczh) 閱讀(4935) 評論(0)  編輯 收藏 引用 所屬分類: VL++3.0開發(fā)紀(jì)事
            香蕉久久AⅤ一区二区三区| 久久久久亚洲精品天堂| 久久人人爽人人澡人人高潮AV| 国产成人精品综合久久久| 久久久久人妻一区精品果冻| 香蕉久久夜色精品国产尤物| 色综合久久久久综合体桃花网| 97久久精品无码一区二区天美| 国产99久久九九精品无码| 久久精品国产亚洲AV久| 香蕉久久一区二区不卡无毒影院| 久久亚洲中文字幕精品一区| 久久精品国产久精国产思思| 久久伊人五月天论坛| 久久久久久亚洲AV无码专区| 日本精品一区二区久久久 | 久久香蕉超碰97国产精品| 国产午夜精品久久久久九九| 一本色道久久88—综合亚洲精品| 91精品国产高清久久久久久91| 无码专区久久综合久中文字幕 | 久久青青色综合| 伊人色综合久久天天| 国产精品久久久久久福利69堂| 国产69精品久久久久观看软件| 精品久久国产一区二区三区香蕉| 国产91色综合久久免费| 久久久久久久久久久久中文字幕 | 精品熟女少妇av免费久久| 久久久久久国产精品美女| 色婷婷久久久SWAG精品| 国产福利电影一区二区三区久久久久成人精品综合 | 97久久精品人人澡人人爽| 狠狠色丁香婷综合久久| 久久线看观看精品香蕉国产| 久久99国产精品尤物| 99国产欧美久久久精品蜜芽| 日韩精品久久久久久免费| 日本人妻丰满熟妇久久久久久| 囯产精品久久久久久久久蜜桃| 久久精品亚洲日本波多野结衣|