Re: Writing a Boolean Statement Parser/Engine - Need help



Hi,

Paul Engel wrote:

I'm not sure I'm following you. Do you have some code that illustrates this?

My parser is a class named CEval. Example code for using it would be:

Dim Eval As CEval, Expression As String, Res() As Variant

Expression = "(($wallace OR $walters) AND " & _
"($fire AND $truck)) AND NOT " & _
" ($water OR $wet OR $foam)"

Set Eval = New CEval

With Eval
.Var("$wallace") = True
.Var("$walters") = False
.Var("$fire") = False
.Var("$truck") = True
.Var("$water") = False
.Var("$wet") = True
.Var("$foam") = False
.Evaluate Expression, Res, False
End With

If Res(0) Then
'Result is True
Else
'Result is False
Endif

Of course one can reuse the expression with new values for the variables. For new variable values just set them and call the parser again. Eg. continue with

Eval.Var("$wallace") = False
Eval.Evaluate Expression, Res, False

Or, if the same expression shall be repeatedly evaluated, use:

Dim Eval As CEval, Expression As String, Res() As Variant, i as Long

Expression = "(($wallace($i) OR $walters($i)) AND " & _
"($fire($i) AND $truck($i))) AND NOT " & _
" ($water($i) OR $wet($i) OR $foam($i))"

Set Eval = New CEval

With Eval
.Var("$wallace") = Wallace
.Var("$walters") = Walters
.Var("$fire") = Fire
.Var("$truck") = Truck
.Var("$water") = Water
.Var("$wet") = Wet
.Var("$foam") = Foam
.Preparse Expression, Res, False
End With

For i = 0 To UBound(Wallace)
.Var("$i") = i
.EvaluatePreparsed Res, False
If Res(0) Then
Else
EndIf
Next i

where Wallace, Walters and so on are one dim arrays of Booleans.

--
Ulrich Korndoerfer

VB tips, helpers, solutions -> http://www.proSource.de/Downloads/
.



Relevant Pages


Quantcast