lexer first attempt