支援變數指派與基本四則運算優先序,測試輸入:
a=2+3*2; b=2*(2+3);
analyse:以分號分割多語句。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 或自行實作遞迴下降解析器)。