摘要: 以前為了開發KFP,特別學習了一下lambda calculus(也就是我的博客的標題啦)。lanbda calculus是一門神奇的語言,在計算機出現之前就已經被搞出來了。這門語言只有三種語法,然后可以用這個語法來構造整數(!!!)、布爾型和很多遞歸數據結構等。
內含代碼
閱讀全文
posted @
2009-05-11 04:30 陳梓瀚(vczh) 閱讀(5406) |
評論 (7) |
編輯 收藏
摘要: 符號表的結構的復雜度跟語言的語義規則的復雜度有關。對于C#來說,每一個符號都附帶了一大堆信息,譬如位置啦,所在的namespace啦,類型啦什么的。對于JavaScript來說,符號表幾乎是不需要的,因為東西都動態了,編譯時幾乎不檢查內容。語義分析的輸出是符號表,代碼生成的輸入是符號表和語法樹。因此語法樹除了放語法相關的內容,語義相關的內容最好放到符號表里面(譬如說表達式的類型啦,語句的scope結果啦)。
閱讀全文
posted @
2009-05-10 18:48 陳梓瀚(vczh) 閱讀(7252) |
評論 (1) |
編輯 收藏
摘要: 這篇轉載的文章主要講了為什么寫非工作的代碼的時候,要時不時刁難自己。
內詳。
閱讀全文
posted @
2009-05-09 06:55 陳梓瀚(vczh) 閱讀(3197) |
評論 (0) |
編輯 收藏
摘要: 整整寫了一天,終于基本寫完了CMinus的語義分析的代碼,只剩下一個檢查struct是否可以計算出長度的問題(環引用造成的)。下面貼出語義分析的結果,從結果中可以看出符號表的結構以及構造方法:
閱讀全文
posted @
2009-05-06 08:13 陳梓瀚(vczh) 閱讀(3032) |
評論 (4) |
編輯 收藏
摘要: 今天寫了一些CMinus程序供語法分析器分析,然后程序從語法樹重新生成格式化后的代碼,兩邊比較檢查優先級什么的是否正確處理。下面是CMinus寫的冒泡排序、菲薄納氣數列、鏈表操作函數以及其他程序:
閱讀全文
posted @
2009-05-04 19:44 陳梓瀚(vczh) 閱讀(1980) |
評論 (1) |
編輯 收藏
摘要: 在實驗了CMinus語法分析器的錯誤處理之后發現一個問題,Combinator Parser返回的錯誤是最上級的錯誤,而不是最底層的錯誤。因此修改了語法分析器的一部分代碼:
閱讀全文
posted @
2009-05-04 02:35 陳梓瀚(vczh) 閱讀(1832) |
評論 (1) |
編輯 收藏
摘要: 這一次的語法分析器,我使用Vczh Combinator Parser,按照文法的定義,將字符串轉換成了語法樹。Vczh Combinator Parser構造較大規模的編譯器的時候還是較為吃力,主要原因出在Visual C++竟然限制一個類型全名不能超過某個長度T_T……下面是代碼:
閱讀全文
posted @
2009-05-03 19:25 陳梓瀚(vczh) 閱讀(2850) |
評論 (11) |
編輯 收藏
摘要: 今天照著C Minus的語法(略有修改)設計出了C Minus的語法樹。語法樹的設計盡量讓生成語法樹的代碼易于編寫。每一個結構的意義十分明確,而且結構與結構之間不需要有相互聯系。下面是語法樹的代碼:
閱讀全文
posted @
2009-04-24 00:58 陳梓瀚(vczh) 閱讀(3072) |
評論 (5) |
編輯 收藏
摘要: 把中間指令都搞定了之后,得開始做一門JIT的腳本引擎了。但是這門腳本引擎不是用來寫的,而是用來給更高級的語言編譯的。這是什么意思呢?雖然我現在寫了個語法分析器,提供了語法樹,但是我的目的是讓我以后設計的更高級的語言可以編譯成這門相對底層的語言,而不是直接編譯成中間指令。這樣很多事情都會好做很多。
這一門語言主要模仿C,提供指針、結構、數組、基本類型和函數指針。還有extern函數做外部鏈接用。因為編譯成機器碼,所以可以直接把一個函數指針丟進我的腳本引擎,就可以這么用了。而且我的腳本里面的函數也可以直接作為一個函數指針提供出來。復合類型組要勇于跟C++交互。在C++與腳本里面聲明同樣的struct,不需要做額外工作,就可以互相使用了。
閱讀全文
posted @
2009-04-18 00:17 陳梓瀚(vczh) 閱讀(3169) |
評論 (7) |
編輯 收藏
摘要:
FPU寫起來還真是囧啊,下面20個函數實現到想死……
Sin,Cos,Tan,Cot,Sec,Csc,ASin,ACos,ATan,ACot,ASec,ACsc,Sqrt,Exp,Ln,Abs,Round,Trunc,Ceil,Floor
下面是這20個函數的匯編代碼,其中Exp更是登峰造極……
閱讀全文
posted @
2009-04-16 05:39 陳梓瀚(vczh) 閱讀(4915) |
評論 (3) |
編輯 收藏