separate lexer module, add Makefile