2014年4月15日
posted @ 2014-04-15 12:30
陳梓瀚(vczh)
閱讀(6796)
推薦(1)
2014年3月23日
摘要:
文章中引用的代碼均來自https://github.com/vczh/tinymoe。看了前面的三篇文章,大家應(yīng)該基本對Tinymoe的代碼有一個初步的感覺了。在正確分析"print sum from 1 to 100"之前,我們首先得分析"phrase sum from (lower bound) to (upper bound)"這樣的聲明。Tinymoe的函數(shù)聲明又很多關(guān)于block和se...
閱讀全文
posted @ 2014-03-23 16:55
陳梓瀚(vczh)
閱讀(7579)
推薦(11)
2014年3月2日
摘要:
文章中引用的代碼均來自https://github.com/vczh/tinymoe。實現(xiàn)Tinymoe的第一步自然是一個詞法分析器。詞法分析其所作的事情很簡單,就是把一份代碼分割成若干個token,記錄下他們所在文件的位置,以及丟掉不必要的信息。但是Tinymoe是一個按行分割的語言,自然token列表也就是二維的,第一維是行,第二維是每一行的token。在繼續(xù)講詞法分析器之前,先看看Tiny...
閱讀全文
posted @ 2014-03-02 23:45
陳梓瀚(vczh)
閱讀(7285)
推薦(4)
2014年2月11日
摘要:
自從《序》胡扯了快一個月之后,終于迎來了正片。之所以系列文章叫《看實例學(xué)編譯原理》,是因為整個系列會通過帶大家一步一步實現(xiàn)Tinymoe的過程,來介紹編譯原理的一些知識點。但是第一個系列還沒到開始處理Tinymoe源代碼的時候,首先的跟大家講一講我設(shè)計Tinymoe的故事。為什么這種東西要等到現(xiàn)在才講呢,因為之前沒有文檔,將了也是白講啊。Tinymoe在github的wiki分為兩部分,一部分是介紹語法的,另一部分是介紹一個最小的標準庫是如何實現(xiàn)出來的,地址在 https://github.com/vczh/tinymoe/wiki 不帶問號的那些都是寫完了的。系列文章的目標在介紹Tinymo
閱讀全文
posted @ 2014-02-11 12:54
陳梓瀚(vczh)
閱讀(6501)
推薦(7)
2014年1月19日
摘要:
在《如何設(shè)計一門語言》里面,我講了一些語言方面的東西,還有痛快的噴了一些XX粉什么的。不過單純講這個也是很無聊的,所以我開了這個《跟vczh看實例學(xué)編譯原理》系列,意在科普一些編譯原理的知識,盡量讓大家可以在創(chuàng)造語言之后,自己寫一個原型。在這里我拿我創(chuàng)造的一門很有趣的語言 https://github.com/vczh/tinymoe/ 作為實例。商業(yè)編譯器對功能和質(zhì)量的要求都是很高的,里面大量的東西其實都跟編譯原理沒關(guān)系。一個典型的編譯原理的原型有什么特征呢?性能低 錯誤信息難看 沒有檢查所有情況就生成代碼 優(yōu)化做得爛 幾乎沒有編譯選項 等等。Tinymoe就滿足了上面的5種情況,因為我的目
閱讀全文
posted @ 2014-01-19 01:22
陳梓瀚(vczh)
閱讀(13662)
推薦(24)
2014年1月4日
摘要:
2013年我就干了兩件事情。第一件是gaclib,第二件是tinymoe。Gaclib終于做到安全的支持C++的反射、從XML加載窗口和控件了。現(xiàn)在在實現(xiàn)的東西則是一個給gaclib用的workflow小腳本,用來寫一些簡單的view的邏輯、定義viewmodel接口,還有跟WPF差不多的data binding。Tinymoe是我大二的時候就設(shè)計出來的東西,無奈以前對計算機的理論基礎(chǔ)了解的太少,以至于沒法實現(xiàn),直到現(xiàn)在才能做出來。總的來說tinymoe是一個模仿英語語法的嚴肅的編程語言——也就是說它是不基于NLP的,語法是嚴格的,寫錯一個單詞也會編譯不過。因此所有的函數(shù)都要寫成短語,包括控制
閱讀全文
posted @ 2014-01-04 21:52
陳梓瀚(vczh)
閱讀(8639)
推薦(3)
2013年11月10日
摘要:
在思考怎么寫這一篇文章的時候,我又想到了以前討論正交概念的事情。如果一個系統(tǒng)被設(shè)計成正交的,他的功能擴展起來也可以很容易的保持質(zhì)量這是沒錯的,但是對于每一個單獨給他擴展功能的個體來說,這個系統(tǒng)一點都不好用。所以我覺得現(xiàn)在的語言被設(shè)計成這樣也是有那么點道理的。就算是設(shè)計Java的那誰,他也不是傻逼,那為什么Java會被設(shè)計成這樣?我覺得這跟他剛開始想讓金字塔的底層程序員也可以順利使用Java是有關(guān)系...
閱讀全文
posted @ 2013-11-10 17:07
陳梓瀚(vczh)
閱讀(4038)
推薦(3)
2013年11月4日
摘要:
第一步:如果從未發(fā)布過博客文章的話,需要在菜單里面選這里添加博客賬號 第二步:選擇正確的設(shè)置 第三步:寫完博客之后,按這里就可以發(fā)布了! 如果以后需要寫新的博客的話,還可以直接點這里: Word 2013就是簡單好用啊,雖然Live Writer沒有了,但是有了Word 2013,其實也是一樣的。
閱讀全文
posted @ 2013-11-04 01:33
陳梓瀚(vczh)
閱讀(3818)
推薦(3)
2013年10月19日
摘要:
大家看到這個標題肯定會歡呼雀躍了,以為功能少的語言就容易學(xué)。其實完全不是這樣的。功能少的語言如果還適用范圍廣,那所有的概念必定是正交的,最后就會變得跟數(shù)學(xué)一樣。數(shù)學(xué)的概念很正交吧,正交的東西都特別抽象,一點都不直觀的。不信?出門轉(zhuǎn)左看Haskell,還有抽象代數(shù)。因此刪減語言的功能是需要高超的技巧的,這跟大家想的,還有跟go那幫人想的,可以斷定完全不一樣。首先,我們要知道到底為什么需要刪減功能。在這里我們首先要達成一個共識——人都是很賤的。一方面在發(fā)表言論的時候光面堂皇的表示,要以需求變更和可維護性位中心;另一方面自己寫代碼的時候又總是不惜“后來的維護者所支付的代價代價”進行偷懶。有些時候,人
閱讀全文
posted @ 2013-10-19 21:52
陳梓瀚(vczh)
閱讀(4488)
推薦(8)
2013年9月16日
摘要:
幾個月前就一直有博友關(guān)心DSL的問題,于是我想一想,我在gac.codeplex.com里面也創(chuàng)建了一些DSL,于是今天就來說一說這個事情。 創(chuàng)建DSL恐怕是很多人第一次設(shè)計一門語言的經(jīng)歷,很少有人一開始上來就設(shè)計通用語言的。我自己第一次做這種事情是在高中寫這個傻逼ARPG的時候了。當時做了一個超簡單的腳本語言,長的就跟匯編差不多,雖然每一個指令都寫成了調(diào)用函數(shù)的形態(tài)。雖然這個游戲需要腳本在劇情...
閱讀全文
posted @ 2013-09-16 09:27
陳梓瀚(vczh)
閱讀(11594)
推薦(10)