timezone: improve lexer and parser