expand lexer to handle more shell-like syntax