• <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>

            月下的博客

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              34 Posts :: 0 Stories :: 59 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(5)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            • 1.?re: 五年感想
            • 5年一轉(zhuǎn)眼,我已經(jīng)進(jìn)入工作的第9個(gè)年頭了,缺少的是思考,一直安于現(xiàn)狀,也該反思了
            • --liquanhai
            • 2.?re: 五年感想
            • 認(rèn)為是設(shè)計(jì)-》現(xiàn)在轉(zhuǎn)變?yōu)槿?!
            • --linda
            • 3.?re: 五年感想
            • 決定游戲成功的因素
            • --linda
            • 4.?re: 五年感想
            • 果真人會(huì)沉淀是真的
            • --張恒
            • 5.?re: 五年感想
            • 樓主 最近股市大漲
              希望你能再接再厲
              再創(chuàng)輝煌
            • --ccsdu2009

            閱讀排行榜

            評(píng)論排行榜

                 
                   1.script先由ResourceGroupMgr在prepare函數(shù)里根據(jù)不同的后綴名選擇不同的ScriptLoader的派生類來加載,這里我們就以ScriptCompilerMgr為例。(今天開始細(xì)看材質(zhì)加載部分的代碼才發(fā)現(xiàn)ogre的材質(zhì)解析原來還有兩套,以前的一套是MaterialSerializer,1.6之后默認(rèn)使用的是ScriptCompilerMgr.)
                  2.調(diào)用ScriptCompilerMgr內(nèi)部ScriptCompiler對(duì)象的compile函數(shù),這里其實(shí)也沒有進(jìn)行實(shí)際分析,只是創(chuàng)建并調(diào)用了分析和編譯的對(duì)象:ScriptLexer,ScriptParser,ScriptCompiler。
                  3.先由ScriptLexer對(duì)文本進(jìn)行分析,創(chuàng)建一個(gè)包含了所有token信息節(jié)點(diǎn)的列表,注意這一步僅僅是將所有材質(zhì)里的詞匯單元提取出來而已,還沒有生成CST,乃至AST(當(dāng)然這里的CST和AST都是簡(jiǎn)化的),這里的實(shí)現(xiàn)比較易讀在ScriptLexer::tokenize中對(duì)文本的每個(gè)字符進(jìn)行遍歷,查找token(在ogre里也就是譬如{ } // \  : newline等,當(dāng)然普通的字符肯定也算的),最后生成一個(gè)tokenlist。

                  4. 接下來將tokenList傳入ScriptParser的parse函數(shù)中,這些token節(jié)點(diǎn)將被根據(jù)標(biāo)記符的關(guān)系,而生成一個(gè)簡(jiǎn)單有父子關(guān)系的分析樹,也就是CST了。到這里你就發(fā)現(xiàn)之前動(dòng)輒就100個(gè)的nodelist已經(jīng)變成了ConcreteNodeList,當(dāng)然這里的node每個(gè)都是一個(gè)樹了.以最外面的{}為根.當(dāng)然沒有{}的部分就變成一個(gè)節(jié)點(diǎn)(知道找到{或者別的標(biāo)記符)
                  5.接著,在ScriptCompiler里將之前生成的CST轉(zhuǎn)化為AST(這里的具體轉(zhuǎn)化的代碼我還沒細(xì)看。。)
                  6.呼,終于要到最后了,根據(jù)每個(gè)AST的類型調(diào)用不同的ScriptTranslator,例如材質(zhì)的話就取得MaterialTranslator來解釋成最終的material,然后對(duì)其中的每個(gè)AST子節(jié)點(diǎn)再調(diào)用對(duì)應(yīng)的ScriptTranslator,(例如pass就調(diào)用PassTranslator等)把所有的值都設(shè)置好,這樣所有解釋的工作終于完成了。

            呼,的確是個(gè)很漫長(zhǎng)的過程。。個(gè)人感覺如果把scriptLexer換成已有的什么文本解釋庫(kù)讀取的速度會(huì)不會(huì)得到很多提升呢?譬如如今比較流行的rapidXml什么的,畢竟個(gè)人覺得這些專門優(yōu)化文本庫(kù)的性能還是很高的(雖然我得說尖括號(hào)啥的的確不是那么易讀~)。當(dāng)然我覺得ogre這么寫的架勢(shì)很可能有想將原來普通的腳本配置文件提升成ogre專用的腳本語言的趨勢(shì)?(最早只是寫了一堆Serializer而已)
            posted on 2011-04-12 22:31 月下圓舞曲 閱讀(1675) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 開發(fā)
            91精品国产综合久久精品| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久无码AV一区二区三区| 久久久久亚洲AV无码观看| 无码国内精品久久人妻| 91久久精品视频| 久久久无码精品亚洲日韩蜜臀浪潮| 伊人久久大香线蕉av不变影院 | 久久99久久99小草精品免视看| 久久综合丝袜日本网| 伊人久久亚洲综合影院| 久久精品国产影库免费看| 国内精品伊人久久久影院| 久久国产精品久久精品国产| 久久综合九色综合网站| 久久高潮一级毛片免费| 免费观看久久精彩视频| 国产Av激情久久无码天堂| 国产精品久久久久久久人人看| 久久国产亚洲精品麻豆| 久久精品蜜芽亚洲国产AV| 亚洲精品美女久久久久99| 国产精品久久久久蜜芽| 蜜臀久久99精品久久久久久| 91精品国产综合久久婷婷| 亚洲精品美女久久久久99| 国产成人无码精品久久久性色 | 婷婷综合久久中文字幕蜜桃三电影| 国产精品欧美久久久久无广告 | 亚洲AV无码久久| 精品国产99久久久久久麻豆| 青青热久久国产久精品| 国产毛片久久久久久国产毛片| 久久青青草原综合伊人| 久久夜色精品国产亚洲| 久久这里只有精品久久| 99久久综合狠狠综合久久止| 国产精品一区二区久久不卡 | 久久婷婷国产麻豆91天堂| 一本大道久久a久久精品综合| segui久久国产精品|