2014-07-11 52 views
2

我正在創建一個允許用戶使用邏輯表達式的應用程序。同樣的應用程序也將在稍後評估這些邏輯表達式,引用內存中的變量。這種性質的問題的一般方法是什麼?將邏輯表達式保存到可以稍後評估的文件

Variables in memory (example) 
Variable Type  Value 
height  string tall 
plans  integer 3 

Examples of logical expressions a user may have entered: 
height = "tall" 
plans > 3 
Left(height, 1) = "s" 
height = "tall" AND plans > 3 

我考慮過使用正則表達式,反射或編寫編譯器或解析器。 由於所有這些選項對於我的經驗的人來說都是「困難的」,我想知道哪個對我的問題最有意義,或者如果有更合適的方法?在Excel中的語法

+0

像「plans =」tall「'這樣的表達會發生什麼? –

+0

優選地,它將評估爲除真/假之外的第三個值,或者拋出錯誤。當用戶創建表達式時,我可以檢查類型一致性。 – Greg

回答

1

商店的表情和使用Excel.Evaluate

使用布爾標記哪個變量的值是數字,應該忽略在邏輯串的報價。

使用元字符表示變量(即「@」字符),並在評估之前用它們的值替換它們。 這種方法很容易實現,並會讓用戶訪問Excel的公式。

Imports Microsoft.Office.Interop 

Dim xlApp As Excel.Application 
Dim variables As DataTable 
Dim initialString As String 'this is the logic string 
    For Each row As DataRow In variables.Rows 
     If DirectCast(row.Item("Numeric"), Boolean) Then 
      initialString = Strings.Replace(initialString, _ 
       "@" & DirectCast(row.Item("Variable"), String), _ 
       DirectCast(row.Item("VarValue"), String)) 
     Else 
      initialString = Strings.Replace(initialString, _ 
       "@" & DirectCast(row.Item("Variable"), String), _ 
       """" & DirectCast(row.Item("VarValue"), String) & """") 
     End If 
    Next 
    MsgBox(xlApp.Evaluate(initialString)) 
+0

IIRC,這要求用戶安裝了Excel/Office。確保列出任何依賴關係。 – user2864740