private void ComSymbolList() { int i, j, a1, a2, b1, b2; mysymbol p1, p2, ps1, ps2; mysymbol symbol; ps1 = new mysymbol(); ps1.flag = 0; ps1.value = "+"; symbol = ps1; for (i = 0; i <= mSblList.Count - 1; i++) { p1 = mSblList[i]; p1.used = 0; } for (i = 0; i <= mSblList.Count - 1; i++) { p1 = mSblList[i]; if (p1.used == 1) { continue; } if (p1.flag == 0) { ps1 = p1; continue; } if (p1.flag != 2) { continue; } } }
public void SimpleParse(string str) { ClearSblList(); if (str == null) { return; } char[] buf = str.ToCharArray(); int len = Length(str); int i = 0; int j = 0; int flag = 0; char[] tmp = new char[64]; char[] OpSymbolArray = { '.', '*', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; mysymbol p; myvariable v; while (i < len) { if (buf[i] == '+' || buf[i] == '-') { p = new mysymbol(); tmp[0] = buf[i]; p.value = new string(tmp); p.flag = 0; mSblList.Add(p); i = i + 1; continue; } j = i; while (j <= len) { if ((buf[i] == '+' || buf[i] == '-') || (j == len)) { p = new mysymbol(); p.value = new string(tmp); GetVariantValueSign(p.value, ref p); p.flag = flag; mSblList.Add(p); i = j; break; } if (!OpSymbolArray.Contains(buf[i])) { p.flag = 2; } tmp[j - i] = buf[j]; j = j + 1; } } }
private void GetVariantValueSign(string str, ref mysymbol p) { char[] OpSymbolArray = { '.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; int i = 0, j = 0, len = 0, flag = 0; string lastsign = ""; char[] tmp = new char[64]; char[] buf = new char[512]; p.value = ""; p.var1 = ""; p.var2 = ""; p.value2 = ""; lastsign = "*"; buf = str.ToCharArray(); len = Length(str); i = 0; while (i < len) { if (buf[i] == '*' || buf[i] == '/') { tmp[0] = buf[i]; lastsign = new string(tmp); i = i + 1; continue; } j = i; flag = 1; while (j <= len) { if ((buf[i] == '*' || buf[i] == '/') || (j == len)) { if (flag == 1) //数值 { if (lastsign == "*") { if (p.value == "") { p.value = new string(tmp); } else { p.value = IntToStr(MyStrToInt(p.value, 1) * MyStrToInt(new string(tmp), 1)); } } if (lastsign == "/") { if (p.value2 == "") { p.value2 = new string(tmp); } else { p.value2 = IntToStr(MyStrToInt(p.value2, 1) * MyStrToInt(new string(tmp), 1)); } } } if (flag == 2) //数值 { if (lastsign == "*") { if (p.var1 == "") { p.var1 = new string(tmp); } else { p.var1 = p.var1 + '*' + new string(tmp); } } if (lastsign == "/") { if (p.var2 == "") { p.var2 = new string(tmp); } else { p.var2 = p.var2 + '*' + new string(tmp); } } } i = j; break; } if (!(OpSymbolArray.Contains(buf[j]))) { flag = 2; } tmp[j - i] = buf[j]; j = j + 1; } } if ((p.value != "") && (p.value2 != "")) { i = MyStrToInt(p.value, 1); j = MyStrToInt(p.value2, 1); if ((i % j) == 0) { p.value = IntToStr(i / j); p.value2 = ""; } } if ((p.var1 != "1") && (p.var2 != "")) { p.value = ""; } if (p.value == "1") { p.value2 = ""; } if ((p.var1 == "") && (p.var2 == "") && (p.value == "") && (p.value2 == "")) { p.value = str; } }
private void Parse(string str) { ClearSblList(); if (str == null) { return; } char[] buf = str.ToCharArray(); int len = Length(str); int i = 0; int j = 0; char[] tmp = new char[64]; char[] OpSymbolArray = { '+', '-', '*', '/', '(', ')' }; mysymbol p; myvariable v; while (i < len) { if (buf[i] == ' ' || buf[i] == '\r' || buf[i] == '\n') { i = i + 1; continue; } if (OpSymbolArray.Contains(buf[i])) { p = new mysymbol(); tmp[0] = buf[i]; p.value = new string(tmp); p.flag = 0; mSblList.Add(p); i = i + 1; continue; } j = i; while (j <= len) { if ((OpSymbolArray.Contains(buf[i])) || (j == len)) { p = new mysymbol(); p.value = new string(tmp); p.flag = 1; if (!IsNumeric(tmp)) { p.flag = 2; } mSblList.Add(p); i = j; break; } tmp[j - i] = buf[j]; j = j + 1; } } for (i = 0; i <= mSblList.Count - 1; i++) { p = mSblList[i]; for (j = 0; j <= mVarList.Count - 1; j++) { v = mVarList[j]; if (v.value == "") { continue; } if (p.value == v.name) { p.value = v.value; if (v.value == "-10001") //特殊变量 { p.value = IntToStr(mBHValue); } break; } } } }