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

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

                今天某空明跟我說我的Vczh Syngram沒文檔害他只能用yacc寫一個軟件渲染器用的shader compiler。有了GUI之后,連文檔都免了吧。嘿嘿。等最近GUI封裝完之后,就把這個程序寫了,也能用通俗易懂的方法來告訴別人我這套框架是怎么用的。

                話說Vczh Syngram在開發的時候為了檢查出文法的歧義花了一個星期的時間未果,因為LALR實在是不能用,用了在分析之后就很難還原出到底分析的這條路是調用了什么文法,文法綁定的工作也就非常不好做了。于是我換了一種辦法,我輸出所有歧義的可能就行了。后來發現輸出歧義比檢查文法好多了,因為有些時候我們需要歧義才能解決問題。我自己有過一個叫Gotalk的殘廢腳本,后來沒公開出來,也沒有完成所有代碼。這個腳本是這樣子的:

            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

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

            //下面是主函數,輸入3個數字輸出最大那個
            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

                在處理這個語法的時候,我的程序第一次掃描文件的時候動態組織文法給syngram,第二次用syngram給出結果。這個時候我需要歧義,因為我可以在歧義里面排除所有不能通過類型檢查的結果,最終獲得用戶所希望的表達方法。后來基本上是弄出來了,但是經過調查發現其實不會有什么人用的,實際上是因為英語跟程序相差太遠了,很多概念我重組了別人不一定能夠接受。不過這是DSL語言所向往的一種辦法。本來這門語言里面還支持從句(也就是平常見到的lambda expression),還有類啊繼承什么的。函數根據參數在不同的位置還自動獲得優先級,能寫出類似sin of a,或者干脆定義運算符| a |計算絕對值也行,甚至還能寫a is a prime number(譬如判斷a是不是質數if a is a prime number then...)。懶得寫大代碼展示了。什么時候無聊了再重新寫一個好一點的。到時候跟Vczh Free Script共享后端虛擬機,就可以實現互相調用并共享類庫了,爽啊。

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

            評論:
            # re: Vczh GUI Framework取材決定 2008-08-14 06:52 | 沈臻豪(foxtail)
            囧~~沒完沒了了。  回復  更多評論
              
            # re: Vczh GUI Framework取材決定 2008-08-14 08:58 | 空明流轉
            行了,等你的GUI出來我的SASL估計也完工了。
            那個時候再用你的Syngram搞一個吧。
            一開始盼盼以為我要用你的syngram,然后我跟你說這事的時候你又沒啥反應。  回復  更多評論
              
            99久久免费只有精品国产| 久久人人爽人人爽人人AV| 99久久国产综合精品成人影院| 久久成人国产精品二三区| 精品视频久久久久| 久久99国产精品久久99小说 | 99久久综合国产精品二区| 国产成人精品久久亚洲高清不卡| 久久国产视屏| 精品少妇人妻av无码久久| 久久久WWW免费人成精品| 99久久精品午夜一区二区| 午夜精品久久久久成人| 久久精品草草草| 99久久国产综合精品女同图片| 国产成人99久久亚洲综合精品 | 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲av日韩精品久久久久久a | 久久人人超碰精品CAOPOREN| 亚洲精品无码专区久久久| 99热成人精品免费久久| 久久天天躁狠狠躁夜夜网站| 亚洲精品国精品久久99热| 99久久国产综合精品五月天喷水| 亚洲精品国产字幕久久不卡| 欧美精品丝袜久久久中文字幕 | 无码日韩人妻精品久久蜜桃 | 久久久人妻精品无码一区| 久久精品成人国产午夜| 久久久精品人妻一区二区三区四| 三级三级久久三级久久| 最新久久免费视频| 亚洲七七久久精品中文国产| 久久国产综合精品五月天| 国产精品久久久久久久久久免费| 精品综合久久久久久97超人| 69SEX久久精品国产麻豆| 精品久久久久久无码中文字幕一区| 老色鬼久久亚洲AV综合| 久久久亚洲欧洲日产国码aⅴ| 久久精品国产99久久久|