format code
optimal site generating
more robust: accept tab as 2 spaces
change env to contain the scanner for warning report
separate env building
use a stack for logging parser positions
turn syntax errors into env.warn