Lexer changes

Mostly minor things that rebasing is becoming painful.
`s.char_at_reverse(s.len())`.