use bison (todo: ensure linear time)
quick hack to avoid "\b" popping up out of nowhere
better error types, and fixed a bug where (1+x)^2 + (1+y)^2 would create two temp variables with the same name
Use extend() function instead of setting prototype directly.

Fixed NR <, <=, etc.
Fixed M(3=2).s