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

C# 數學運算式解析器實作

     編輯:關於C#

功能展示

支援變數指派與基本四則運算優先序,測試輸入:

a=2+3*2; b=2*(2+3);

核心解析流程

  1. 讀取文字檔,逐行處理。
  2. analyse:以分號分割多語句。
  3. analyseExpA:以等號分割左值與運算式,檢測變數名稱,非變數則呼叫 EvalExpress 計算。
private void analyse(string line) {
  string[] expA = line.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
  for (int i = 0; i < expA.Length; i++) analyseExpA(expA[i]);
}

private void analyseExpA(string expA) {
  string[] expB = expA.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
  for (int i = 0; i < expB.Length; i++) {
    Regex reg = new Regex("[a-zA-Z]");
    if (!reg.IsMatch(expB[i])) {
      object obj = EvalExpress(expB[i]);
      if (obj != null) textBox1.Text += expA + " = " + obj.ToString() + "\r\n";
      else textBox1.Text += expA + ",無法識別的運算式\r\n";
    }
  }
}

EvalExpress 實作略(可用 DataTable.Compute 或自行實作遞迴下降解析器)。

原始碼下載

C# 數學運算式解析器原始碼

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