仿查询分析器的C#计算器——5.计算求值
2009-03-31 08:21:50 来源:WEB开发网代码中包含详细的注释,这里做简要说明。未选中输入框中的文本则执行全部代码,否则执行选中部分的代码。将要执行的代码根据是否计算多行进行分解,存放在一个字符串数组中。然后对表达式数组循环计算。如此实现了选择部分表达式计算以及多行表达式计算。另外如何实现错误定位,则是通过捕获错误。程序中定义了一个Exception类,但进行词法分析和语法分析的时候,如果发生错误,则会抛出该异常。通过该异常类中的错误序号以及长度,就可以选中输入框中的错误部分。但是这里只能选中第一次发生的错误,不能像VS.NET的IDE一样捕获所有错误。Exception类的定义如下:
/// <summary>
/// 语法错误类,用于发生错误时提示用户并选中错误的操作符
/// </summary>
/// <remarks>Author:Alex Leo; Date:2008-5-21;</remarks>
public class SyntaxException : Exception
{
private int m_Index;
/// <summary>
/// 错误列号
/// </summary>
/// <remarks>Author:Alex Leo; Date:2008-5-21;</remarks>
public int Index
{
get { return m_Index; }
}
private int m_Length;
/// <summary>
/// 错误操作符长度
/// </summary>
/// <remarks>Author:Alex Leo; Date:2008-5-21;</remarks>
public int Length
{
get { return m_Length; }
}
private string m_Message;
/// <summary>
/// 错误信息
/// </summary>
public override string Message
{
get { return m_Message; }
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="Index">错误处的列号(用于错误时确定错误操作符起始位置)</param>
/// <param name="Length">错误操作符长度(用于错误时选择错误操作符的长度)</param>
/// <param name="ErrorInformation">错误信息</param>
public SyntaxException(int Index, int Length, string ErrorInformation)
{
this.m_Index = Index;
this.m_Length = Length;
this.m_Message = ErrorInformation;
}
}
更多精彩
赞助商链接