Vczh Lazy Script
Vczh Lazy Script的開發歷程
關于類型推導的設想
摘要: 這幾天一直在忙學校的比賽,到了今天終于有空了。
Lazy Script的語法實在是很復雜,因此不得不在進行第一步的名字檢查之后把原本的語言轉換為內部使用的一種元語言。這種元語言設計的原則是盡量簡單。譬如列表構造和do-end語句就需要被轉換掉。進行了轉換以后,就需要對元語言進行一個類型方程組的建立。這一步暫時還沒有建模好,而且實際工作需不需要真的構造出一組方程組還不知道。目前還比較沒有頭緒的就是如何對模板函數的類型方程建模。
舉個例子,譬如我們對上一篇文章中提到的代碼進行類型方程組的構造:
閱讀全文
posted @
2008-04-27 10:16 陳梓瀚(vczh) 閱讀(2155) |
評論 (0) 編輯
Vczh Lazy Script 語法分析器完成
摘要: 花了兩天的時間終于完成了Vczh Lazy Script的語法分析工作。語法分析是編譯的第一步,旨在把輸入的字符串(代碼)分析稱跟代碼結構一致的語法樹,以便后續工作。
藉著去年開發的Syngram工具包,這兩天過得還算輕松,僅僅對語言做了一份配置,不過這份配置也花掉了1200多行代碼。語法分析其余的部分是數據結構。目前的數據結構僅僅用于再現語言的結構,而沒有附加任何的數據。接下來的工作是檢查所有的identifier,看看有沒有哪些identifier是使用錯誤的。一般來說都是在左值使用函數、類構造標簽參數不全、轉移運算符指向的函數并沒有聲明成函數等等比較基本的東西。但是后續的工作就相當地麻煩了。
作為一門lazy+pure的函數范式程序語言,我模仿了Haskell的大部分語法,加上自己的一點點修改(因為Haskell的語法實在是太詭異了),但是主要功能是沒有變化的。等上面所說的identifier完成以后,我就要開始寫Lazy的類型推導程序了。類型推導程序用于計算出代碼中省略的類型聲明,相當于把整份代碼轉換成類型方程然后求解
閱讀全文
posted @
2008-04-22 04:03 陳梓瀚(vczh) 閱讀(2577) |
評論 (4) 編輯
Vczh Lazy Script 上下文無關文法
摘要: ExpCmList -> Expression ["," ExpList]
ArrCmList -> [LeftValue "<-"] Expression ["," ArrList]
CaseList -> LeftValue ":" Expression ";" [CaseList]
DoList -> ([LeftValue "="]Expression | LeftValue "::" TypeDes ) ";" [DoList]
WhereList -> (FuncHead | FuncBody) ";" [WhereList]
Exp0 ->
Exp0 -> FuncName
Exp0 -> "(" [ExpCmList] ")"
Exp0 -> "[" [ExpCmList] "]"
Exp0 -> "[" Expression "|" ArrCmList "]"
Exp0 閱讀全文
posted @
2008-04-20 20:50 陳梓瀚(vczh) 閱讀(1886) |
評論 (3) 編輯