I concur on the stack machine.  About 14 years ago, I wrote a tiny ugly
language compiler for the System 38 - just for fun.  All the books that I
had on expression evaluation stated that recursive trees were the way to go.
I tried to build one and I'm sure that I had the tree right in memory but I
could never get it to generate the right code.  I spent more than a week on
it.  I changed tacks and tried a stack and had it done and working in less
than two days.  It generated properly-sized declarations for the
intermediate terms and the whole 9 yards.  Try a stack machine.

If you aren't familiar with the idea, go to the store and buy an inexpensive
calculator that uses "reverse Polish notation" (RPN).  If you don't have any
books on this, looks for titles in the "compiler writing" subject area by
authors Sethi, Aho, Ullman, or Hopcroft.  I have three and they are all
good.  They are generically known as the "Dragon Books".  I also used a book
named "Compiler Writing" by Tremblay and Sorenson.  If I recall correctly,
the stack machine is a little less powerful than the tree technique but it
will handle any simple Boolean expression without modification.  With a
little fiddling you can make it exit as soon as it knows the truth or
falsity of the expression and a few other improvements.

I would try to put this into an ILE service program function.  First because
that makes it a lot easier to reuse.  Second because the call cost will be
lower.

Richard Jackson
mailto:richardjackson@richardjackson.net
http://www.richardjacksonltd.com
Voice: 1 (303) 808-8058
Fax:   1 (303) 663-4325

-|-----Original Message-----
-|From: owner-midrange-l@midrange.com
-|[mailto:owner-midrange-l@midrange.com]On Behalf Of edfishel@us.ibm.com
-|Sent: Monday, October 23, 2000 11:39 AM
-|To: MIDRANGE-L@midrange.com
-|Subject: Re: Evaluate complex conditions
-|
-|
-|Terry,
-|
-|The way I have done this in the past is to create a stack machine. Then to
-|evaluate a statement like (a = b and ( c = d or e = f)) you would read the
-|statement and create a stack program. Then use the stack machine
-|to run the
-|stack program for each record to be queried.
-|
-|>Terry Grider wrote:
-|>
-|>Sorry guys,  I didn't do a very good job of explaining what I was looking
-|for.
-|>I don't mean I want code that is an example of testing for complex
-|conditions, I
-|>mean I'm looking for code that will evaluate statements like the
-|one in my
-|>original example and determine the truth of the statement.  You see, I'm
-|writing
-|>a query tool and I want the user to be able to provide selection criteria
-|in an
-|>english style IF format similar to cobol or other query tools I've seen.
-|I can
-|>currently handle simple criteria with "and/or" connectors, but I can't
-|seem to
-|>come up with a good method for handling multiple levels of parenthesis.
-|>
-|>> Has anyone ever written or seen an example of program code designed to
-|>> evaluate complex conditions?  For example, if you wanted to
-|evaluate a =
-|>> b and (c = d or c = e or c = f).  I'm looking for something that can do
-|>> multiple levels of parenthesis and all "and/or" combinations.
-|
-|Ed Fishel,
-|edfishel@US.IBM.COM      >
-|
-|
-|+---
-|| This is the Midrange System Mailing List!
-|| To submit a new message, send your mail to MIDRANGE-L@midrange.com.
-|| To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com.
-|| To unsubscribe from this list send email to
-|MIDRANGE-L-UNSUB@midrange.com.
-|| Questions should be directed to the list owner/operator:
-|david@midrange.com
-|+---

+---
| This is the Midrange System Mailing List!
| To submit a new message, send your mail to MIDRANGE-L@midrange.com.
| To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com.
| To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.