How do you evaluate arbitrary math expressions using temporary variables instead of a stack? What I'm talking about is translating an expression into an array of simple operations- each that change one variable based on the second argument.
An example list of operations might be:
= += -= *= /=
Notice how each operation changes the first argument. (none of them "return" anything)
Here's a simple expression: (I have postfix with depth written under it as well)
x=2+a*(b+c) x 2 a b c + * + = 0 1 2 3 4 3 2 1 0 x=c x+=b x*=a x+=2
Notice how you don't need temporary variables.
Here's an expression that requires a temporary variable:
x=a*(b+c)+d*(e+f) x a b c + * d e f + * + = 0 1 2 3 2 1 2 3 4 3 2 1 0 x=b x+=c x*=a tmp=e tmp+=f tmp*=d x+=tmp
I can't seem to figure out an algorithmic solution for obtaining these sets of operations. Needing temporary variables seems to have something to do with lower-precedence operators that have the result of higher-precedence operators as arguments, but I can't tell.
I feel stupid... The way seems right in front of me but I can't see it. Obviously you could do it the "easy" way; AKA, make a temporary variable to store the result of each operation so no operations are destructive to anything but what you put before the
=, but that's bad and I don't like it. How can you get the "algorithm" for an expression in simplest form?
EDIT: Due to my own ambiguity, I must clarify that a stack is allowed in translation, but not in the end psuedo-language I'm producing.