# evaluating logical boolean expressions

• January 10th, 2013, 10:18 AM
tuli
evaluating logical boolean expressions
hi,

I am looking for a library to aid me in evaluating Boolean expressions.
For example, i have an expression like this:

Quote:

(1*(5+3)+9*65/5-(354*4565*5643+98) >= 12345) && ( 654*987+123 || (2345 > 23423 && 1 != 2)))
(it can alos be much longer!)

and would like to evaluate them to a true/false boolean.
My dear gcc would kick some *** here with its static evaluation, but it`s way too complicated to use a compiler or the like for this.

There are tons of libraries to calculate the (numerical) result of a mathematical expression, but this is not what i want to do.
• January 10th, 2013, 10:35 AM
laserlight
Re: evaluating logical boolean expressions
Perhaps you should start by defining the grammar of these boolean expressions. After that, it becomes a question of whether you want to write your own parser or use some tool to create a parser for you.
• January 10th, 2013, 01:15 PM
tuli
Re: evaluating logical boolean expressions
forgot that, sorry. :)

Standard math/c++ set of expressions, i would say, ie:

<,>,>=,<=,&&,||, nested brevets,*,+,-,/, etc.

If i was to write my own parser, would you know of any "reference" project i could learn from or base on?
• January 10th, 2013, 02:38 PM
Paul McKenzie
Re: evaluating logical boolean expressions
Quote:

Originally Posted by tuli
forgot that, sorry. :)

Standard math/c++ set of expressions, i would say, ie:

<,>,>=,<=,&&,||, nested brevets,*,+,-,/, etc.

If i was to write my own parser, would you know of any "reference" project i could learn from or base on?

Look up "grammar" and "recursive descent parsers". You need to formally define the grammar first, then from the grammar (production) rules, you create the parser.

Regards,

Paul McKenzie
• January 11th, 2013, 05:14 AM
superbonzo
Re: evaluating logical boolean expressions
Quote:

Originally Posted by tuli
I am looking for a library to aid me in evaluating Boolean expressions.

you can use the boost.Spirit library to write a BNRF based parser relatively quickly ( the "Qi" library component, more specifically; there are also a lexer and an output generator library components but you'll probably not need them ... ). Used in conjunction with boost.Phoenix you can process the expression in-place while parsing, including grammar error handling.

Quote:

Originally Posted by tuli
(it can alos be much longer!)

so, are those expressions human or computed generated ? in the latter case you don't need a parser, just store the expression in a computer-understandable representation directly.
• January 11th, 2013, 05:38 AM
OReubens
Re: evaluating logical boolean expressions
An alternative approach would be to load a linkable script language. Writing your own expression parser of "mini language" to do this will take a considerable amount of development time.

One example is LUA (www.lua.org) which is pretty easy to integrate into a C/C++ program. But there are many others.

Another way out would be to take the expression and form it into a VBScript or javascript and use the wscript.exe to evaluate it for you.