代碼含詳細註釋,此處簡要說明。未選取輸入框文字則執行全部代碼,否則執行選取部分。將要執行代碼依是否多行分解,存入字串陣列。對運算式陣列迴圈計算。實現選取部分計算與多行運算式計算。錯誤定位透過捕獲錯誤:程式定義 Exception 類別,詞法/語法分析出錯時拋出該異常。透過異常類別中的錯誤序號與長度,選中輸入框中錯誤部分。但只能選中第一次發生的錯誤,無法像 VS.NET IDE 捕獲所有錯誤。SyntaxException 定義如下:
public class SyntaxException : Exception
{
private int m_Index;
public int Index { get { return m_Index; } }
private int m_Length;
public int Length { get { return m_Length; } }
private string m_Message;
public override string Message { get { return m_Message; } }
public SyntaxException(int Index, int Length, string ErrorInformation)
{ this.m_Index = Index; this.m_Length = Length; this.m_Message = ErrorInformation; }
}
單行/多行切換只需設定表單 AcceptButton 為「計算按鈕」,單行狀態下按 Enter 相當於點擊計算。按「F5」鍵執行計算則透過檢測輸入框 KeyUp 事件,釋放 F5 時代碼觸發「計算」按鈕 Click 實現。另有一語法樹分析用於顯示語法樹結構,以更直觀方法驗證分析正確性。樹節點文字調用 TokenRecord.ToString 取得,需顯示其他資訊可自行修改。