472,780 Members | 4,752 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,780 software developers and data experts.

boolean logic parser - need help

Has anyone worked on code that that can parse evaluation expressions
(could be numbers or strings) like

( ( "dog" = "dog" ) or "foo" = "bar" ) and ("cow" = "bat" and "bye" =
"hi") or ("math" = "fun")

or

( ( 1 = 5 ) or ( 2 < 3 ) ) and (1 <= 6)

or (here it gets a little complicated with math expressions)

( ( 1 = ((5*2)+1) ) or ( 2 < 3 ) ) and (1 <= 6)

?

I have a compare functions to evaluate <, <=, =, !=, >=, > for strings
and numbers, and a math parser, and all the values would be literal. I
am looking either to figure out how to do it, or find existing code
that would work.

I am not sure recursion is correct to do this, or how to put it all
together, parsing out the "AND"s and "OR"s, and keeping track of the
parenthesis hierarchy (while ignoring math expressions which also have
parenthesis) in the correct order of precedence, and ultimately
returning a single boolean value for the entire thing.

Here is some pseudocode I put together to work it out - any help would
be appreciated.

EVALUATE A BOOLEAN EXPRESSION IN A STRING
AND RETURN TRUE OR FALSE:
if odd # of parens (not part of quoted string) return error
if quotes, string mode, else math mode
has parens?
yes: analyze further
iPosNextEnd = next closing parens
find closing parens by adding +1 evertime an open paren
(not part of quoted text) found, -1 every time a closed
paren found. when parencount back to 0 we know we have
reached the end of the current paren block.
between iStart and iPosNextEnd
look inside (outside of quotes)
for comparison operator
yes? break down further
no? found value.
if math mode
send contents to math parser to evaluate
use string value as is
no: evaluate
look inside (outside of quotes)
for AND/OR
if 1 AND/OR
evaluate left side vs right side
else MULTIPLE AND/ORs (see below):
look for all ANDs, all ORs, store position in list (OPERATOR, VAL
1, VAL 2, RESULT)
traverse list and evaluate
evaluate ANDs, store result
evaluate ORs, store result

MULTIPLE AND/OR WITHOUT PARENS:
it seems expressions with "and" are evaluated first.
take a statement like:
If T1 = 1 And T2 = 2 Or T3 = 3 Then

T1 T2 T3 Evaluates to
-- -- -- ------------
1 2 3 true
1 2 4 true
1 5 4 false
1 5 3 true

PS I found some Java code on a Deutch site that looks like it might be
similar to what I need to do. I know vb.net not Java, and the comments
aren't in English, so I don't really understand all it is doing, but I
see it is using some kind of lists or tokens (what's a token?) to keep
track of things. Can anyone convert this to .NET without too much
trouble?

http://www.brian-schroeder.de/parser/

Jul 21 '05 #1
5 3527
You can try http://babelfish.altavista.com to translate the German to
English (or whatever other language you'd prefer), try it, it's quite good.

As for what tokens are, in java speak, a token is a part of something. If
for instance you have a string "abc,def,ghi" (comma-seperated), you can use
what Java calls a StringTokenizer to break the string up into it's parts (or
tokens). It is similar to string.Split, which returns an array, the
StringTokenizer however returns a collection which you can iterate through
using methods like NextToken().
"Mad Scientist Jr" <us*************@yahoo.com> wrote in message
news:11*********************@g14g2000cwa.googlegro ups.com...
Has anyone worked on code that that can parse evaluation expressions
(could be numbers or strings) like

( ( "dog" = "dog" ) or "foo" = "bar" ) and ("cow" = "bat" and "bye" =
"hi") or ("math" = "fun")

or

( ( 1 = 5 ) or ( 2 < 3 ) ) and (1 <= 6)

or (here it gets a little complicated with math expressions)

( ( 1 = ((5*2)+1) ) or ( 2 < 3 ) ) and (1 <= 6)

?

I have a compare functions to evaluate <, <=, =, !=, >=, > for strings
and numbers, and a math parser, and all the values would be literal. I
am looking either to figure out how to do it, or find existing code
that would work.

I am not sure recursion is correct to do this, or how to put it all
together, parsing out the "AND"s and "OR"s, and keeping track of the
parenthesis hierarchy (while ignoring math expressions which also have
parenthesis) in the correct order of precedence, and ultimately
returning a single boolean value for the entire thing.

Here is some pseudocode I put together to work it out - any help would
be appreciated.

EVALUATE A BOOLEAN EXPRESSION IN A STRING
AND RETURN TRUE OR FALSE:
if odd # of parens (not part of quoted string) return error
if quotes, string mode, else math mode
has parens?
yes: analyze further
iPosNextEnd = next closing parens
find closing parens by adding +1 evertime an open paren
(not part of quoted text) found, -1 every time a closed
paren found. when parencount back to 0 we know we have
reached the end of the current paren block.
between iStart and iPosNextEnd
look inside (outside of quotes)
for comparison operator
yes? break down further
no? found value.
if math mode
send contents to math parser to evaluate
use string value as is
no: evaluate
look inside (outside of quotes)
for AND/OR
if 1 AND/OR
evaluate left side vs right side
else MULTIPLE AND/ORs (see below):
look for all ANDs, all ORs, store position in list (OPERATOR, VAL
1, VAL 2, RESULT)
traverse list and evaluate
evaluate ANDs, store result
evaluate ORs, store result

MULTIPLE AND/OR WITHOUT PARENS:
it seems expressions with "and" are evaluated first.
take a statement like:
If T1 = 1 And T2 = 2 Or T3 = 3 Then

T1 T2 T3 Evaluates to
-- -- -- ------------
1 2 3 true
1 2 4 true
1 5 4 false
1 5 3 true

PS I found some Java code on a Deutch site that looks like it might be
similar to what I need to do. I know vb.net not Java, and the comments
aren't in English, so I don't really understand all it is doing, but I
see it is using some kind of lists or tokens (what's a token?) to keep
track of things. Can anyone convert this to .NET without too much
trouble?

http://www.brian-schroeder.de/parser/

Jul 21 '05 #2
Aha.. thanks for that explanation.

Jako Menkveld wrote:
You can try http://babelfish.altavista.com to translate the German to English (or whatever other language you'd prefer), try it, it's quite good.
As for what tokens are, in java speak, a token is a part of something. If for instance you have a string "abc,def,ghi" (comma-seperated), you can use what Java calls a StringTokenizer to break the string up into it's parts (or tokens). It is similar to string.Split, which returns an array, the
StringTokenizer however returns a collection which you can iterate through using methods like NextToken().
"Mad Scientist Jr" <us*************@yahoo.com> wrote in message
news:11*********************@g14g2000cwa.googlegro ups.com...
Has anyone worked on code that that can parse evaluation expressions (could be numbers or strings) like

( ( "dog" = "dog" ) or "foo" = "bar" ) and ("cow" = "bat" and "bye" = "hi") or ("math" = "fun")

or

( ( 1 = 5 ) or ( 2 < 3 ) ) and (1 <= 6)

or (here it gets a little complicated with math expressions)

( ( 1 = ((5*2)+1) ) or ( 2 < 3 ) ) and (1 <= 6)

?

I have a compare functions to evaluate <, <=, =, !=, >=, > for strings and numbers, and a math parser, and all the values would be literal. I am looking either to figure out how to do it, or find existing code
that would work.

I am not sure recursion is correct to do this, or how to put it all
together, parsing out the "AND"s and "OR"s, and keeping track of the parenthesis hierarchy (while ignoring math expressions which also have parenthesis) in the correct order of precedence, and ultimately
returning a single boolean value for the entire thing.

Here is some pseudocode I put together to work it out - any help would be appreciated.

EVALUATE A BOOLEAN EXPRESSION IN A STRING
AND RETURN TRUE OR FALSE:
if odd # of parens (not part of quoted string) return error
if quotes, string mode, else math mode
has parens?
yes: analyze further
iPosNextEnd = next closing parens
find closing parens by adding +1 evertime an open paren
(not part of quoted text) found, -1 every time a closed
paren found. when parencount back to 0 we know we have
reached the end of the current paren block.
between iStart and iPosNextEnd
look inside (outside of quotes)
for comparison operator
yes? break down further
no? found value.
if math mode
send contents to math parser to evaluate
use string value as is
no: evaluate
look inside (outside of quotes)
for AND/OR
if 1 AND/OR
evaluate left side vs right side
else MULTIPLE AND/ORs (see below):
look for all ANDs, all ORs, store position in list (OPERATOR, VAL 1, VAL 2, RESULT)
traverse list and evaluate
evaluate ANDs, store result
evaluate ORs, store result

MULTIPLE AND/OR WITHOUT PARENS:
it seems expressions with "and" are evaluated first.
take a statement like:
If T1 = 1 And T2 = 2 Or T3 = 3 Then

T1 T2 T3 Evaluates to
-- -- -- ------------
1 2 3 true
1 2 4 true
1 5 4 false
1 5 3 true

PS I found some Java code on a Deutch site that looks like it might be similar to what I need to do. I know vb.net not Java, and the comments aren't in English, so I don't really understand all it is doing, but I see it is using some kind of lists or tokens (what's a token?) to keep track of things. Can anyone convert this to .NET without too much
trouble?

http://www.brian-schroeder.de/parser/


Jul 21 '05 #3
you don't happen to know any java to vb.net conversion programs?
: )

Jul 21 '05 #4
No, sorry, I don't.

What I can suggest is write psuedo code for the java and then try to write
VB from that. If you have problems understanding any of the java logic,
please feel free to ask! (I know this isn't a java newsgroup, but I'm sure
nobody would mind...)

"Mad Scientist Jr" <us*************@yahoo.com> wrote in message
news:11*********************@f14g2000cwb.googlegro ups.com...
you don't happen to know any java to vb.net conversion programs?
: )

Jul 21 '05 #5
Found it !

The Microsoft Script Control has an Eval function.
http://www.devx.com/vb2themax/Tip/18773

It works like a charm ... it even compares string expressions. All you
have to do is parse your expression for your variable names and drop in
the values (if strings drop in quoted values).

Does anyone know of a native .NET version?

Jul 21 '05 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: Mad Scientist Jr | last post by:
Has anyone worked on code that that can parse evaluation expressions (could be numbers or strings) like ( ( "dog" = "dog" ) or "foo" = "bar" ) and ("cow" = "bat" and "bye" = "hi") or ("math" =...
8
by: shawnk | last post by:
Given several nullable boolean flags; bool? l_flg_01 = true; bool? l_flg_02 = false; bool? l_flg_03 = true; bool? l_result_flg = null; I would have liked...
16
by: Shawnk | last post by:
I would like to perform various boolean operations on bitmapped (FlagsAttribute) enum types for a state machine design as in; ------------------- enum portState { Unknown, Open,
10
by: Simon Brooke | last post by:
The DOM API has included public Node importNode(Node,boolean) as a method of the Document interface for a long time. Does anything actually implement it? Xerces 2 is giving me: ...
5
by: Abandoned | last post by:
Hi.. I try a boolean parser in python since 1 weak.. But i can't do this because this is very complicated :( Do you know any blooean parser script in python or how do i write a boolean parser ?...
4
by: =?Utf-8?B?ZGF2ZWJ5dGhlc2Vh?= | last post by:
Hi folks, Boolean.Parse("true") returns true, but what if you need to parse something such as - Boolean.Parse("(false && false) || (false || (true && true))"); Does something exist in the...
4
by: Bartc | last post by:
"vaib" <vaibhavpanghal@gmail.comwrote in message news:26a44cc5-0f08-41fe-859b-0d27daf3ca1d@f24g2000prh.googlegroups.com... I don't know the formal approach to these things but I haven't come...
3
by: Kevin Audleman | last post by:
I wrote a piece of boolean logic that doesn't work and I don't know why. The code should ONLY do something if the session variable is equal to 900123: if( ! $_SESSION == '900123') { //do some...
1
by: sunil | last post by:
Hello, I have a boolean expression thats specified in pre/in/post fix notations, lets assume infix for the sake of this argument. The expression can be in any of the following forms: Form A:...
0
by: erikbower65 | last post by:
Using CodiumAI's pr-agent is simple and powerful. Follow these steps: 1. Install CodiumAI CLI: Ensure Node.js is installed, then run 'npm install -g codiumai' in the terminal. 2. Connect to...
0
linyimin
by: linyimin | last post by:
Spring Startup Analyzer generates an interactive Spring application startup report that lets you understand what contributes to the application startup time and helps to optimize it. Support for...
0
by: erikbower65 | last post by:
Here's a concise step-by-step guide for manually installing IntelliJ IDEA: 1. Download: Visit the official JetBrains website and download the IntelliJ IDEA Community or Ultimate edition based on...
0
by: Taofi | last post by:
I try to insert a new record but the error message says the number of query names and destination fields are not the same This are my field names ID, Budgeted, Actual, Status and Differences ...
14
DJRhino1175
by: DJRhino1175 | last post by:
When I run this code I get an error, its Run-time error# 424 Object required...This is my first attempt at doing something like this. I test the entire code and it worked until I added this - If...
0
by: Rina0 | last post by:
I am looking for a Python code to find the longest common subsequence of two strings. I found this blog post that describes the length of longest common subsequence problem and provides a solution in...
5
by: DJRhino | last post by:
Private Sub CboDrawingID_BeforeUpdate(Cancel As Integer) If = 310029923 Or 310030138 Or 310030152 Or 310030346 Or 310030348 Or _ 310030356 Or 310030359 Or 310030362 Or...
0
by: Mushico | last post by:
How to calculate date of retirement from date of birth
2
by: DJRhino | last post by:
Was curious if anyone else was having this same issue or not.... I was just Up/Down graded to windows 11 and now my access combo boxes are not acting right. With win 10 I could start typing...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.