First version of the Lexer interface. Please review (and change?)