首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

仿查詢分析器的 C# 計算器(三):詞法分析與 Token 工廠

     編輯:關於C#

將輸入字串逐字元掃描,識別關鍵字、運算符、字串常值、數值常值,產出 TokenRecord 列表。採用工廠模式,依字元類型分派給對應工廠類別處理。

總工廠:TokenFactory

LexicalAnalysis 為唯一入口,依當前字元分派:

  • 字母 → TokenKeywordFactory
  • 引號 → TokenStringFactory
  • 數字 → TokenNumberFactory
  • 運算符字元 → TokenSymbolFactory
  • 空白 → 忽略
  • 其他 → 拋出 SyntaxException

另提供 GetOperateTokenDictionary 從 XML 載入關鍵字/運算符對應類別名稱,實現「依賴注入」:新增運算子只需修改 XML,無需改程式碼。

XML 設定範例

<TokenRecord>
  <TokenKeyword>
    <Token Word="sin" Class="TokenSin" Example="sin(30) = 0.5" />
    <Token Word="pi" Class="TokenValue" Example="pi*1 = 3.1415926" />
    ...
  </TokenKeyword>
  <TokenSymbol>
    <Token Word="+" Class="TokenPlus" Example="2+3 = 5" />
    <Token Word=">=" Class="TokenGreatOrEqual" />
    ...
  </TokenSymbol>
</TokenRecord>

四大工廠實作細節

  • TokenKeywordFactory:向後讀取字母/數字組成單詞,查字典反射建立實例。常數 pi、e、true、false 特殊處理,直接設定 TokenValue 與 TokenValueType。
  • TokenSymbolFactory:優先嘗試雙字元運算符(如 >=),失敗退回單字元。查字典反射建立實例。
  • TokenStringFactory:支援單/雙引號,引號內同類引號需雙寫轉義(如 'it''s')。截取內容建立 TokenValue,型別設為 string。
  • TokenNumberFactory:讀取數字與小數點,double.TryParse 轉換,建立 TokenValue,型別設為 double。

所有工廠方法均為 static,避免實例化開銷。索引參數 ref int Index 如指標般追蹤掃描位置。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved