I think simple arithmetic expressions were the suggestion, otherwise you are right it would definately be too large.
I would stick with one data type only, probably just floats. Adding integers more than doubles the size of the execute function because integer overflow detection is fiddly to say the least, whereas floating point error handling is trivial.Hmm... how about a new challenge: Create an expression parser and evaluate the expression in the language of your choice? Could be simple maths expressions like "x := (x + y) * (1 - sin(2 * π * t))". Assume x,y etc have values. Would have to have a somewhat weird syntax to stop people just using "eval" in their language.
Adding unsigned integers is just another complication that doesn't show any more about the parser's ability.
The program could read lines of text from a file and/or from the terminal, parse and execute them, quit on EOF.
A sample test file could be given here.
At the end of the day, people who have programmed it will have a usable calculator, which is quite satisfying.