implement some parts of the lexer + test cases