日期:2008-10-07  浏览次数:20416 次

using System;
using System.Collections;

namespace XXXXX
{
 public class Expression
 {
  private Expression() {}

  #region No01.表达式分割为ArrayList形式
  /// <summary>
  /// 要求表达式以空格\t作为分隔符
  /// 转换表达式折分为:
  /// 变量及数值 ,变量不允许为@
  /// 字符串“”
  /// 运算符号{+、-、*、/、++、+=、--、-=、*=、/=、!、!=、>、>=、>>、<、<=、<>、|、|=、||、&、&=、&&}
  /// 括号{包括(、)}
  /// </summary>
  /// <param name="sExpression"></param>
  /// <returns></returns>
  public static ArrayList ConvertExpression(string sExpression)
  {
   ArrayList alist = new ArrayList();

   string word = null;
   int    i    = 0;
   string   c    = "";
 
   while(i < sExpression.Length)
   {
    #region "
    if (word != null && word != "")
    if (word.Substring(0,1) == "\"")
    {
     do
     {
      c = sExpression[i++].ToString();
      if (c == "\"") {  alist.Add(word + c); word = c =  null; break;}
      else { word += c; c = null; }
     }while(i < sExpression.Length);
    }
    if (i > sExpression.Length -1)
    { alist.Add(word); alist.Add(c); word = c= null; break;}
    #endregion

    #region 字符判别
    switch (c = sExpression[i++].ToString())
    {
      #region ( )
     case "\"":
      if (i > sExpression.Length -1)
      { alist.Add(word); alist.Add(c); word = c= null; break;}
      else
      {
       word = c; c= null;
       do
       { c = sExpression[i++].ToString();
        if (c == "\"") {  alist.Add(word + c); word = c =  null; break;}
        else { word += c; c = null; }
       }while(i < sExpression.Length );
       break;
      }

     case "(": alist.Add(word); alist.Add(c); word = c= null;  break;
     case ")": alist.Add(word); alist.Add(c); word = c= null;  break;
     case " ": alist.Add(word); word = c= null;  break;
      #endregion

      #region + - * / %
     case "+":
      if (i > sExpression.Length -1)
      { alist.Add(word); alist.Add(c); word = c= null; }
      else
       switch (c = sExpression[i++].ToString())
       {
        case "+": ali