摘要: 國慶7天容易無聊,于是我打算實現一下以前失敗過的一種語言的特性:類型推導。于是順便做一做惰性計算吧。于是我嘗試設計了一門特性盡可能少的語言,并且強制讓一個函數的返回值僅跟輸入的參數有關。雖然這個特性不適合用來做IO,但是是有辦法解決的,而且不需要修改語言就可以直接支持。
這門語言的定義及其簡單,需要預先定義的部分也是很少的,于是我嘗試實現了if、邏輯運算符以及itoa和atoi兩個函數
閱讀全文
posted @
2008-09-28 07:14 陳梓瀚(vczh) 閱讀(2160) |
評論 (4) |
編輯 收藏
摘要: 經過三個小時的努力,一個供調試用的模擬器終于做出來了。對于一份語法說明來講,我們需要提供調試器,一直到調試完了才生成代碼,這樣比較容易找到問題。同時為了驗證自己的那個設計,于是做了一個調試器出來。這個調試器使用了這篇文章里的數據結構文件以及文法文件,以及使用了這篇文章里開發的一個樹到圖的轉換程序,成功得到結果!
閱讀全文
posted @
2008-09-14 07:22 陳梓瀚(vczh) 閱讀(1851) |
評論 (1) |
編輯 收藏
摘要: 除了錯誤處理文件還沒有定義好以外,現在語法定義跟語法樹的數據結構定義以及分析器都完成了!有了這兩個文件,我的工具就可以替你生成一個函數和一堆類,讓你使用這個函數就可以將一份代碼轉換為一顆語法樹啦。娃哈哈……
現在讓我們來看一個例子
閱讀全文
posted @
2008-09-14 00:53 陳梓瀚(vczh) 閱讀(1429) |
評論 (3) |
編輯 收藏
為了生成編譯器的代碼,對語法樹的數據結構進行定義是必不可少的一項工作。在這里我設計了一套用于生成C++代碼的數據結構的數據結構定義文件的格式。
這份定義支持enum、class和typedef三種命名方法,支持基本類型、C++類型、列表、映射、指針以及智能指針等。因為結構簡單,所以我直接貼一份示例出來。這份示例用于代表
這篇文章里的科學計算器表達式文法對應的語法樹的結構。Expression本應是空的,為了對上述的例子進行說明,所以那些沒用上的功能就全部加在Expression里面了。
1 enum BinopType
2 {
3 Plus
4 Minus
5 Mul
6 Div
7 }
8 enum SinopType
9 {
10 Negative
11 }
12
13 class Expression
14 {
15 list<int> IntList
16 map<string,int> IntMap
17 Expression^ Autoptr
18 Expression* Pointer
19 "CustomType" Custom
20 }
21 typedef Expression^ ExpPtr
22 class Number
23 {
24 double Number
25 }
26 class Binop
27 {
28 BinopType Operator
29 ExpPtr LeftOp
30 ExpPtr RightOp
31 }
32 class Sinop
33 {
34 SinopType Operator
35 ExpPtr Operand
36 }
列表、映射和智能指針在Vczh Library++ 2.0里都有對應的工具來表達,將來生成的編譯器的代碼數據結構將依賴于Vczh Library++ 2.0,而語法分析部分則直接使用庫中的Syngram。
posted @
2008-09-12 05:49 陳梓瀚(vczh) 閱讀(1233) |
評論 (0) |
編輯 收藏
摘要: 『啊,蔥爆羊肉真是香啊。』一邊回憶著這個令人感動的美食,一邊心不在焉地寫了個程序。這個小程序實現了一個很簡單的功能,將一棵樹轉換成bmp圖片并自動排版。
閱讀全文
posted @
2008-09-07 04:18 陳梓瀚(vczh) 閱讀(2895) |
評論 (3) |
編輯 收藏
摘要: 我們知道Yacc和Bison都是產生C++的代碼作為編譯器的前端的。但是有時候我們需要動態地產生一個編譯器前端,極端一點講,譬如“文法調試器”。調試器總不能動態生成.y文件,讓yacc編譯,讓gcc再度編譯,然后execute,最后將程序的輸出結果讀進來。這樣就太麻煩了,于是我們需要重新寫一個生成編譯器前端的程序。
閱讀全文
posted @
2008-09-06 02:45 陳梓瀚(vczh) 閱讀(2307) |
評論 (3) |
編輯 收藏
摘要: 現在的OOP都提倡將操作與數據結構結合在一起。為什么這里要提出將算法與數據結構分開呢?第一個原因是一個算法可能是用來處理一組數據結構的。第二個原因是算法并不屬于操作。我們可以借鑒訪問者模式來實現這個分離,但是這里有一個特別之處:我們要將訪問者模式帶給我們的那個接口實現得讓我們用起來很漂亮。
閱讀全文
posted @
2008-09-02 04:43 陳梓瀚(vczh) 閱讀(2632) |
評論 (10) |
編輯 收藏
摘要: 大概一年前曾經用C++開發了一個可以在C++中直接寫上下文無關文法的上下文無關文法分析器。這玩意兒叫Syngram。Syngram曾經做了兩次,第一次做成了用一個類去讀文法文件,后來不爽就改成了直接在C++里面寫的。我弄了一個叫Term的類,重載了一些操作符,于是你可以搞分支、可選、錯誤處理等復雜的文法推導式。現在打算做一個周邊工具。
閱讀全文
posted @
2008-08-27 05:11 陳梓瀚(vczh) 閱讀(1873) |
評論 (5) |
編輯 收藏
摘要: GUI Preview Demo完成!代碼結構、下載以及注意事項內詳。
閱讀全文
posted @
2008-08-25 04:17 陳梓瀚(vczh) 閱讀(20339) |
評論 (18) |
編輯 收藏
摘要: 為了展示Vczh Library++2.0中GUI Framework的強大威力,我制作了一個Regular Expression Debugger。這個軟件可以用來調試正則表達式,主要用于檢查正則表達式語法、觀察表達式的語法樹以及各種狀態機、還有匹配測試等。這個Demo已經接近完成。GUI Framework和Demo的代碼將在Demo徹底完成的時候放上來。下面貼圖和創建界面的代碼:
閱讀全文
posted @
2008-08-23 23:18 陳梓瀚(vczh) 閱讀(2106) |
評論 (6) |
編輯 收藏