Should add more information in lexer::TokType, it's useful to track the token position in file when the compiler fails to compile the source code, I think file name, line number, character position should be enough. And should print them in a more elegent way in parser error message.