Added functionality to handle zeros but in doing so created an infinite loop
whenever invalid hex, oct or binary was entered. Lexer now checks for invalid
hex, oct or binary before passing to the parser.
Added python style floor division. Also added python style exponentiation at
some point but I can't remember when.
Corrected associativity of python style power operator.
Implemented factorial operator. In doing so, however, found bug in which certain
syntax error cause infinite loops. This can be fixed by adding newlines to the end of
readline's input, but this then causes everything to be a syntax error.

While all this was going on it occurred to me that actually using two different data
types to store numbers wasn't hugely smart and since the long term goal is arbitrary
precision anyway I might as well give up on long long.
I'm an idiot who left newlines in the whitespace section instead of moving it to
the operator section. I've decided to leave the multiple data types in since I
don't know enough about floats to know whether they can match up to integers in
all cases (I assume they can't otherwise why have the two anyway).
Why the hell was I using two different tokens for the power operator?! It's
really not my day.
Defined factorial for floats as long as they represent an integer as decided by
fmod.
Adjusted yyerror to act like printf.
Added absolute operator as |expr|.
Tried to avoid changing ints to floats wherever possible.