程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 仿查詢分析器的C#計算器——2.記號對象(2)

仿查詢分析器的C#計算器——2.記號對象(2)

編輯:關於C語言

設計出基類TokenRecord後,其他記號類都可以從它繼承,然後實現自己的特定計算方法即可。那麼實際的表達式中有哪些類型的記號呢? 經過分析得出,表達式中所包含的的操作元素無非這幾種:關鍵字,運算符,字符串,數字。

關鍵字:if,sin,cos,true,false,pi等以英文字母開頭的詞,其中可以包含數字或者其他允許的符號

運算符:+,-,*,/,\,>,<,>=,<=,&&,||,!等,純符號操作元素,可以由好幾個字符組成

字符串:"hello",'good',"where's my book"等,由字符串標識符單引號或者雙引號標識的字符串。字符串中允許 包含當前字符串標識符之外另一種字符串標識符,即雙引號字符串中可以包含單引號,單引號字符串中可以包含雙引號,這一點和JavaScript 類似。如果在字符串中包含當前標識符,則必須用連續兩個標識符進行轉義。

數值:12,856,42.123,-62.45,允許包含小數點和負數。(本程序中對負數的處理在某些情況下會有錯誤,有興趣的朋友可以完善一下 )

進一步分析發現,字符串和數值有一定的相似性,就是它們並不需要計算,只需要作為一個存儲單元即可。那麼就可以將它們合並,稱為值 記號對象TokenValue。其他記號對象在Execute中實現自己的特定算法,而值記號對象的Execute方法中不做任何操作。

按照上面對操作元素的分類,從TokenRecord類衍生出一下幾個類:TokenValue(對應字符串和數值),TokenMethod(方法類,抽象類,對 應部分關鍵字而非全部,因為有些關鍵字是常量,可以用TokenValue表示),  TokenSymbol(對應運算符,抽象類)。類圖如下:

然後再從這些類中衍生出更多的具體的類,比如TokenIf, TokenSin, TokenCos, TokenPlus, TokenMinus。

以這個表達式為例,23.5+(54/3-9)*2,分析出來的TokenList記號對象列表如下: 

記號對象 對應表達式 TokenValue 23.5 TokenPlus + TokenLeftBracket ( TokenValue 54 TokenDivide / TokenValue 3 TokenMinus - TokenValue 9 TokenRightBracket ) TokenMultiply * TokenValue 2
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved