程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 仿查詢分析器的C#計算器——5.計算求值(3)

仿查詢分析器的C#計算器——5.計算求值(3)

編輯:關於C語言

代碼中包含詳細的注釋,這裡做簡要說明。未選中輸入框中的文本則執行全部代碼,否則執行選中部分的代碼。將要執行的代碼根據是否計 算多行進行分解,存放在一個字符串數組中。然後對表達式數組循環計算。如此實現了選擇部分表達式計算以及多行表達式計算。另外如何實 現錯誤定位,則是通過捕獲錯誤。程序中定義了一個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;
        }
    }

單行多行切換只需要設置窗體的AcceptButton屬性為“計算按鈕”即可,這樣在單行狀態下,用戶回車就相當於點擊“計算按鈕”。而按“ F5”鍵執行計算則是通過檢測輸入框的KeyUp事件,當釋放“F5”鍵時用代碼去執行“計算”按鈕的Click操作實現計算。

另外這裡有一個語法樹分析,是為了顯示語法樹的結構,用更直觀的方法來驗證分析是否正確。樹節點的文本是調用TokenRecord的 ToString方法得到的,如果需要顯示為其他信息,也可以自行修改

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved