implementation for 24 game

I think a few things could be written in a more elegant way (the while in "fn e" for instance)... 
I tried using a  `for tok in self.lexer` but I got in trouble with ownership, because this borrows self mutably, so it does not allow me to borrow it again to call `self.p()`.
If you have any suggestions on how to refactor this, they would be very welcome
I personally find it more readable. I added the ret later, actually, because when I was re-reading my code it wasn't immediately clear to me what the return values were (i.e. it was easier for me to scan the function looking for where ret got assigned to than looking for lines that did not end with a ";").

But it's purely subjective (and possibly I just need to get more experience reading Rust code), so I can put it back to how it was if you prefer.