用C 實現乙個Json解析器(3) 詳細設計

2021-10-02 20:25:16 字數 835 閱讀 1318

上回我們已經得到了簡單類圖,這次就來細品一下每個類應該長什麼樣,需不需要再增加輔助類。

首先來給每個類加入成員:

lexer:詞法分析器的任務是把json字串轉換成單詞流,只有乙個方法analyze。

token:單詞顯然是乙個值物件,只有value和tokentype兩個唯讀屬性。考慮到值型別的效率比引用型別高,把token設計成結構體會更好。

parser:語法分析器的任務是把單詞流轉換成c#物件,所以應該有一系列的toobject方法。

serializer(序列化器):考慮到把序列化的責任也扔給parser並不妥當,我們新加入乙個負責序列化的類,這個類應該只有乙個tojson方法。

考慮一些實際情況,再次對系統結構進行調整:

詞法分析器無狀態,不需要多個例項,不需要使用多型,不需要暴露給外部,這樣的類最適合直接實現為靜態類。

大多數情況下,使用者都只會使用基礎功能,而不會用到自定義特性和委託這些高階功能,而高階功能的實現不免需要額外的時間和空間。如果把基礎功能和高階功能糅合在一起,就會無形中增加那些只需要基礎功能的使用者的負擔。所以我們使用多型將兩者分離開,當使用者只需要基礎功能時,就可以省下一些時間和空間了。使用策略模式,提取出兩個策略介面iparser和iserializer,每個介面下面都有兩個實現類primary***和advanced***,分別實現toobject和tojson方法。

到目前為止,我們已經得到了系統的完整結構。有了類圖之後,剩下的就是按部就班地實現每個方法了:

系統的設計到目前為止就結束了,下回正式開始實現這個解析器。

如何寫乙個json語法解析器

最近正在補習編譯原理的相關理論基礎。於是琢磨著寫個簡單的語言解析器。1.python程式設計 ply庫 2.正規表示式1.json裡的字典key必須是字串型,value可以是任意型別 2.json根基點必須是字典或者陣列 3.json支援的值包括 數字 整數或浮點數 字串 在雙引號中 邏輯值 tru...

用c實現乙個json解析 並不完善

include include include define json max 20 enum json style struct json struct json str2json char start,int len else if start 58 else if start else if ...

乙個簡單的表示式解析器

package lipeng.stringdemo 乙個簡單的表示式解析器,這個解析器可以計算由數字 運算子和括號組成的表示式的值,並能處理變數,為了處理簡單,本解析器只支援乙個字母的變數,不區分變數字母的大小寫。因此,最多只能儲存26個變數。如果使用者的變數名長度大於乙個字母,則只取第乙個字母當作...