Lexer
A Lexer is a data class that contains the states that will be used for the lexing process. It is the main entry for using a constructed lexer.
The class itself only contains states and not much else.
The function tokenize can be used to use the lexer on a string