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

仿查詢分析器的C#計算器——3.詞法分析(3)

編輯:關於C語言

在LexicalAnalysis方法中,只需要判斷當前字符是否符合一定的起始規則,如果符合起始規則,就交給對應的工廠類去處理。

下面用例子來講吧,比如123.3*2-(24+34),分析成記號對象如下:

記號對象

對應表達式

TokenValue

123.3

TokenMultiply

*

TokenValue

2

TokenMinus

-

TokenLeftBracket

(

TokenValue

24

TokenPlus

+

TokenValue

34

TokenRightBracket

)

這裡的處理過程是

1.取字符“1”,轉到TokenNumberFactory,把分析取到的字符串“123.3”轉換為TokenNumber並存到TokenList中

2.取字符“*”,轉到TokenSymbolFactory,把“*”轉換成TokenMultiply並存到TokenList中

3.取字符“2”,轉到TokenNumberFactory,把分析取到的字符串“2”轉換為TokenNumber並存到TokenList中

4.取字符“- ”,轉到TokenSymbolFactory,把“-”轉換成TokenMinus並存到TokenList中

5.取字符“( ”,轉到TokenSymbolFactory,把“(”轉換成TokenLeftBracket並存到TokenList中

6.取字符“2”,轉到TokenNumberFactory,把分析取到的字符串“24”轉換為TokenNumber並存到TokenList中

7.取字符“+”,轉到TokenSymbolFactory,把“+”轉換成TokenPlus並存到TokenList中

8.取字符“3”,轉到TokenNumberFactory,把分析取到的字符串“34”轉換為TokenNumber並存到TokenList中

9.取字符“) ”,轉到TokenSymbolFactory,把“)”轉換成TokenRightBracket並存到TokenList中

至於各個工廠類中怎麼分析提取出對應的字符串,則有各自不同的規則。如果符合規則就繼續向後分析,否則代表分析結束,然後從源字符 串中截取開始分析的序號到結束分析的序號之間的字符串即可。這裡的Index參數相當於C++中的指針,指示當前分析到哪一個字符。因為各個 “工廠”類需要在分析完一個記號後將指針後移,這裡就將Index設置為ref類型。

另一個方法GetOperateTokenDictionary是用來獲取記號字典的,字典的Key是運算符和關鍵字,Value是對應的類名稱。在分析中遇到運算 符和關鍵字的時候,通過查詢字典就可以獲取對應的類名稱,然後通過反射生成類的實例,這樣就可以靈活將操作符和類對應起來。字典的來 源是本地的一個XML文件,當新增一個操作符的時候,到XML文件裡注冊一下,程序就可以識別出新操作符了,“工廠”類不需要做 任何修改。如果需要修改操作符,可以直接在XML文件裡面修改,程序也能識別,比如把mid改成substring,程序照樣可以運行。這就是 “依賴注入”的實際應用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved