首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

仿 SQL 查詢分析器的 C# 計算器(十五):SyntaxAnalyse 入口類別與詞法/語法分析串聯流程

     編輯:關於C語言

前幾篇介紹各種分析過程,本篇作為完結篇前奏,介紹如何調用先前代碼、實現多行運算式或選取部分運算、以及錯誤定位。

本程式可無需 UI 介面,獨立成模組。若將運算式分析計算功能打包成 DLL,入口只有一個:SyntaxAnalyse 類別。new 一個 SyntaxAnalyse 後,調用其 Analyse 方法,將要計算的運算式作為參數傳入,回傳一個頂層 TokenRecord 物件,再根據回傳物件的值類型取得結果,整個計算過程即完成,使用非常方便。

public class SyntaxAnalyse
{
    public SyntaxAnalyse() { }

    public TokenRecord Analyse(string Code)
    {
        if (Code.Trim().Equals(string.Empty)) return new TokenValue(0, 1);

        List<TokenRecord> ListToken = new List<TokenRecord>();
        int intIndex = 0;
        TokenFactory.LexicalAnalysis(ListToken, Code, ref intIndex); // 詞法分析

        // 語法樹分析,依優先級轉樹
        TokenRecord TokenTop = SyntaxTreeAnalyse.SyntaxTreeGetTopTokenAnalyse(ListToken, 0, ListToken.Count - 1);
        TokenTop.Execute();
        return TokenTop;
    }
}

代碼流程:先詞法分析得 TokenRecord 清單,再語法分析調用 SyntaxTreeAnalyse.SyntaxTreeGetTopTokenAnalyse 得頂層記號物件,一棵樹誕生。接著執行頂層節點 Execute,該方法先遞歸執行下層節點 Execute,再針對下層值執行自身運算。所有 TokenRecord 皆此模式,逐級遞歸,最終得計算結果。TokenRecord 基類含 object 型別 Value 屬性與 Type 型別 TokenValueType 屬性,透過兩者取得具體值及類型,進行後續處理。因支援字串與邏輯值運算,必須透過 TokenValueType 確定值類型。若只需數學運算,程式會更簡單。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved