Profile cover photo
Profile photo
李祐棠
152 followers
152 followers
About
Posts

Post has attachment
寫了一個不知道幹什麼用的 regex library 跟 parser
故事是這樣子的,之前寫 understanding computation 的時候,發現 regular expression 的實作,只有最基本的五種:empty 匹配空字串,literal 匹配文字、repeat * 匹配零個或多個 regex、concatenate 匹配連續的 regex、choose 匹配嘗試數個 regex。 大約幾天前想到也許可以把這個 project 拓展一些,讓它威力更強力一點點,順便當個練習。 預計要加入的東西有: 支援 +, ? 兩種擴展的重複方式。 支援 “.” 匹配 ...
Add a comment...

Post has attachment
把 NFA 轉成 DFA 這檔事
故事是這樣子的,最近在時寫一些跟 Regex 相關的程式碼,無意間發現我之前understanding computation 這本書的實作中,並沒有實作非確定有限自動機(下稱 NFA)轉成有限自動機 的程式碼。 所以說我們這次就來試做一下。 概念很簡單,我們手上有一個,我們可以把這個 NFA 拿來,從開始狀態開始,將這個狀態可以接受的字元都走走看,把每一個字元輸入之後的狀態組合都記下來(因為是NFA,同時可以存在許多狀態上),重複這個流程直到所有狀態組合都被記錄過之後, 就能產生對應的 DFA,這個新的 D...
Add a comment...

Post has attachment
開始使用 Google Test:基本設定
故事是這樣子,最近突發奇想用一些零碎時間寫了一個 C++ 的 regex project,因為已經好久沒有寫 C++ 都在寫 Rust,回鍋發現 C++ 怎麼可以廢話這麼多,長得又醜,以後哪個人再跟我說 Rust 的的生命週期很醜的,我就叫你去看 C++ 的 template code,看你還敢不敢再說 Rust 醜。 扯遠了,總之這次寫的 C++ 專案,其實只是當個練習,看能不能藉由實作專案熟悉 C++ 11、14的功能,也決定引入 CMake 和 Google test 等等我之前一直都沒有學會的東西,從...
Add a comment...

Post has attachment
有關 Rust test 的那些奇奇怪怪的東西
有關 Rust test 的那些奇奇怪怪的東西 最近因為在寫 Rust code,想到那句朗朗上口的口號「原碼未動,測試先行」,想說就來寫點測試,嘗試一下傳說中的 TDD 開發, 連路上的計程車也愈來愈多 TDD 了你還不 TDD 。 想說就來整理一下 Rust 測試相關的編排,還有我遇到那堆奇奇怪怪的開發經驗。 簡而言之,我們先放掉什麼把 test 寫在 comment 裡面的設計,那東西我至今沒用過也不太看人用過, 註解跟文件什麼的只是裝飾而已,上面的大人物是不會懂的 。 我們只看兩個:單元測試跟整合測試...
Add a comment...

Post has attachment
不正經,關箱文
故事是這樣子的,2012 年8月資訊展的時候,因為舊筆電面臨解體,那時入手了一台新筆電,宏碁的 Aspire V3-571g,當時還寫了 開箱文 ,算是 blog 非常早期的文章之一,後來好像也沒什麼人看這台筆電就過氣了QQ。 算算到今天,再過一個月也要滿六年了,老到我現在連官網上都找不到相關介紹了,大約兩個月前決定將他出售,主要理由有幾個: 第一是畢竟用的六年,累積下來的傷痕也不少,下面會詳細討論這點。 再來雖然已經拆開過兩次用空氣噴槍清除灰塵,但處理器附近的機殼打不開,散熱膏也沒有換,現在用起來容易過熱。...
不正經,關箱文
不正經,關箱文
yodalee.blogspot.com
Add a comment...

Post has attachment
實作麻雀雖小五臟俱全的程式語言
故事是這樣子的,很早以前曾經看過 understanding computation 這本書 ,這本書第二章的內容,是利用操作語義(operational semantic)的方式,自訂一款極簡程式語言,非常簡單但已經有 if 判斷式,while 迴圈等功能。 最近剛修完 coursera 上面的 programming language ,其中有一個作業也是用 racket 的操作語義定義一款程式語言, 這個程式語言更複雜,在資料結構上支援 pair -> list,同時還支援函式,這是之前 Underst...
Add a comment...

Post has attachment
實作麻雀雖小五臟俱全的程式語言
故事是這樣子的,很早以前曾經看過 understanding computation 這本書 ,這本書第二章的內容,是利用操作語義(operational semantic)的方式,自訂一款極簡程式語言,非常簡單但已經有 if 判斷式,while 迴圈等功能。 最近剛修完 coursera 上面的 programming language ,其中有一個作業也是用 racket 的操作語義定義一款程式語言, 這個程式語言更複雜,在資料結構上支援 pair -> list,同時還支援函式,這是之前 Underst...
Add a comment...

Post has attachment
東京區知性學習之旅
故事是這樣子的,四月看完了上季霸權之一<比宇宙更遠的地方>,隨意瀏覽相關資料時,發現第三集的極地科學館在東京立川,而且初代南極探測船宗谷,一直都擺在台場的船之科學館進行公開展示,之前去的時候竟然都不知道,點進 船之科學館的網站 看到正好到 6/10 有特展,當下感到一陣衝動,就訂下五月底為期四天的東京 宅爆聖地巡禮 知性學習之旅。 機票: 機票選用香草航空,它的好處是有紅眼班,可以最大化旅行的時間效率 去程 JW100 0150 台北 -> 0610 成田 回程 JW107 2200 成田 -> 1255 台...
東京區知性學習之旅
東京區知性學習之旅
yodalee.blogspot.com
Add a comment...

Post has attachment
使用 procedence climbing 正確處理運算子優先順序
上一篇我們說完如何用 Rust 的 PEG 套件 pest 生成簡單的程式碼分析器,但其實還有一些沒有解決的問題,像是 1 * 2 + 3 * 4 = 20,這是因為我們在處理 expression 時沒有處理運算子優先次序,只是從左到右掃過一遍。 真正的 parsing 要考慮運算子優先權跟括號等等,例如: 1 + 2 + 3 -> ((1 + 2) + 3) : Left associative(左相依) 1 + 2 * 3 -> (1 + (2 * 3)) : * 優先權高於 + 2 ^ 3 ^ 4 -...
Add a comment...

Post has attachment
使用 rust pest 實作簡單的 PEG simple 剖析器
上一篇我們看了 PEG 相關的內容,這篇我們就來介紹該如何用 PEG 寫一個簡單的剖析器,當初會開始這系列文章,是因為自己 computation book rust 實作中,並沒有像原 作者的 ruby 實作 ,有用 treetop 這個 PEG parser 寫一個剖析器,剖析文法變成裡面的程式,例如 simple, regupar expression, pushdown automata, lambda calculus 等等,最近想說把這部分補上,結果在第一關 simple 上就研究了好一陣子。 本...
Add a comment...
Wait while more posts are being loaded