• <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
                今天不小心看到了http://www.antlr.org/works/index.html,我一直認(rèn)為ANTLR是LR(k)分析器,后來(lái)我錯(cuò)了,原來(lái)只是LL(k)。我以前寫(xiě)的一個(gè)Vczh Syngram是LR(k)的畸形,今天看了居然連LL(k)都能有GUI,我不做一個(gè)豈不是對(duì)不起自己?

                Vczh Syngram是一個(gè)在C++下面用的編譯器的語(yǔ)法分析框架,只需要在C++代碼里面寫(xiě)上文法,到時(shí)候initialize出一個(gè)接口來(lái)就可以幫你搞定語(yǔ)法分析了。當(dāng)然分析完要生成語(yǔ)法樹(shù)還是什么的是由你決定的。不過(guò)雖然現(xiàn)在寫(xiě)編譯器的語(yǔ)法分析只要syngram+文法,但是調(diào)試起來(lái)還是比較囧的。ANTLRWorks的想法真是好啊,GUI封裝完了之后我就做一個(gè)Vczh Syngram的圖形界面來(lái)當(dāng)demo吧,一舉兩得。到時(shí)候這個(gè)demo產(chǎn)生使用Vczh Syngram的一部分代碼,爽啊。Vczh Free Script 2.0的代碼文件里就有一個(gè)文件是調(diào)用Vczh Syngram的文法代碼。

                今天某空明跟我說(shuō)我的Vczh Syngram沒(méi)文檔害他只能用yacc寫(xiě)一個(gè)軟件渲染器用的shader compiler。有了GUI之后,連文檔都免了吧。嘿嘿。等最近GUI封裝完之后,就把這個(gè)程序?qū)懥耍材苡猛ㄋ滓锥姆椒▉?lái)告訴別人我這套框架是怎么用的。

                話說(shuō)Vczh Syngram在開(kāi)發(fā)的時(shí)候?yàn)榱藱z查出文法的歧義花了一個(gè)星期的時(shí)間未果,因?yàn)長(zhǎng)ALR實(shí)在是不能用,用了在分析之后就很難還原出到底分析的這條路是調(diào)用了什么文法,文法綁定的工作也就非常不好做了。于是我換了一種辦法,我輸出所有歧義的可能就行了。后來(lái)發(fā)現(xiàn)輸出歧義比檢查文法好多了,因?yàn)橛行r(shí)候我們需要歧義才能解決問(wèn)題。我自己有過(guò)一個(gè)叫Gotalk的殘廢腳本,后來(lái)沒(méi)公開(kāi)出來(lái),也沒(méi)有完成所有代碼。這個(gè)腳本是這樣子的:

            phrase max of (number1 is integer) and (number2 is integer) returns integer
              if number1 is larger than number2 then
                return number1
              else
                return number2
              end if
            end phrase

            phrase max of(number1 is integer),(number2 is integer) and (number3 is integer)returns integer
              return max of max of number1 and number2 and number3
            end phrase

            //下面這些是外接函數(shù)定義,由虛擬機(jī)處理
            external phrase print (text as string) links "print"
            external pharse input returns string links "input"

            //下面是主函數(shù),輸入3個(gè)數(shù)字輸出最大那個(gè)
            phrase main
              define n1 , n2 , n3 as integer
              let n1 be integer of input
              let n2 be integer of input
              let n3 be integer of input
              print string of max of n1,n2 and n3
            end phrase

                在處理這個(gè)語(yǔ)法的時(shí)候,我的程序第一次掃描文件的時(shí)候動(dòng)態(tài)組織文法給syngram,第二次用syngram給出結(jié)果。這個(gè)時(shí)候我需要歧義,因?yàn)槲铱梢栽谄缌x里面排除所有不能通過(guò)類(lèi)型檢查的結(jié)果,最終獲得用戶所希望的表達(dá)方法。后來(lái)基本上是弄出來(lái)了,但是經(jīng)過(guò)調(diào)查發(fā)現(xiàn)其實(shí)不會(huì)有什么人用的,實(shí)際上是因?yàn)橛⒄Z(yǔ)跟程序相差太遠(yuǎn)了,很多概念我重組了別人不一定能夠接受。不過(guò)這是DSL語(yǔ)言所向往的一種辦法。本來(lái)這門(mén)語(yǔ)言里面還支持從句(也就是平常見(jiàn)到的lambda expression),還有類(lèi)啊繼承什么的。函數(shù)根據(jù)參數(shù)在不同的位置還自動(dòng)獲得優(yōu)先級(jí),能寫(xiě)出類(lèi)似sin of a,或者干脆定義運(yùn)算符| a |計(jì)算絕對(duì)值也行,甚至還能寫(xiě)a is a prime number(譬如判斷a是不是質(zhì)數(shù)if a is a prime number then...)。懶得寫(xiě)大代碼展示了。什么時(shí)候無(wú)聊了再重新寫(xiě)一個(gè)好一點(diǎn)的。到時(shí)候跟Vczh Free Script共享后端虛擬機(jī),就可以實(shí)現(xiàn)互相調(diào)用并共享類(lèi)庫(kù)了,爽啊。

                有了Syngram,做編譯器還是很方便的,可以將精力花在后端上。前端不應(yīng)該由人來(lái)完成。
            posted on 2008-08-14 05:21 陳梓瀚(vczh) 閱讀(1626) 評(píng)論(2)  編輯 收藏 引用 所屬分類(lèi): C++

            評(píng)論:
            # re: Vczh GUI Framework取材決定 2008-08-14 06:52 | 沈臻豪(foxtail)
            囧~~沒(méi)完沒(méi)了了。  回復(fù)  更多評(píng)論
              
            # re: Vczh GUI Framework取材決定 2008-08-14 08:58 | 空明流轉(zhuǎn)
            行了,等你的GUI出來(lái)我的SASL估計(jì)也完工了。
            那個(gè)時(shí)候再用你的Syngram搞一個(gè)吧。
            一開(kāi)始盼盼以為我要用你的syngram,然后我跟你說(shuō)這事的時(shí)候你又沒(méi)啥反應(yīng)。  回復(fù)  更多評(píng)論
              
            人人狠狠综合久久亚洲高清| 久久精品国产亚洲AV电影| 88久久精品无码一区二区毛片| 色成年激情久久综合| 亚洲国产精品成人久久蜜臀 | 伊人久久一区二区三区无码| 久久精品国产男包| 国产成人无码精品久久久免费 | 亚洲AV日韩精品久久久久| 国产99久久精品一区二区| 午夜视频久久久久一区 | 国产精品美女久久久久| 久久精品国产精品亚洲下载| 国产69精品久久久久久人妻精品| 久久精品国产亚洲麻豆| 伊人久久大香线蕉亚洲| 婷婷久久综合九色综合九七| 久久久精品人妻一区二区三区四 | 国产三级观看久久| 久久91综合国产91久久精品| 欧美久久久久久午夜精品| 潮喷大喷水系列无码久久精品| 亚洲国产精品综合久久网络| 亚洲国产成人久久精品动漫| 色狠狠久久AV五月综合| 7777精品伊人久久久大香线蕉| 丰满少妇人妻久久久久久4| 91久久精品91久久性色| 久久天天躁狠狠躁夜夜网站| 奇米影视7777久久精品人人爽| 久久久久久一区国产精品| 婷婷综合久久狠狠色99h| 国产亚洲精久久久久久无码 | 久久综合综合久久97色| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 亚洲国产精品久久66| 美女写真久久影院| 精品无码久久久久久久动漫| 久久AAAA片一区二区| 久久婷婷五月综合97色直播| 色偷偷91久久综合噜噜噜噜|