我正在创建一个允许用户汇总逻辑表达式的应用。同一个应用程序也将在以后评估这些逻辑表达式,引用内存中的变量。解决这种问题的一般方法是什么?
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
我考虑过使用正则表达式,反射或编写编译器或解析器。 因为所有这些选择都很困难"对于我的经验,我想知道哪个会对我的问题最有意义,或者是否有更合适的方法?
答案 0 :(得分:1)
以Excel的语法存储表达式并使用Excel.Evaluate
使用布尔值标记哪些变量值是数字,并且应该省略逻辑字符串中的引号。
使用元字符表示变量(即" @" char),并在评估之前用它们的值替换它们。 这种方法易于实现,并且允许用户访问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))