I’m going to venture a guess that you have a directory named lexer at the top level. Since git checkout is used both to switch branches and to reset files in the tree, it’s probably detecting that you don’t have a branch called lexer but you do have a path and selects the second mode.
It works for your friend because he already has a lexer branch.
Easiest workaround is probably to create the branch using git branch instead.
git branch --track lexer origin/lexer
should do that for you. You can then use git checkout to switch to it.
Another option might be to use the -- flag to git checkout. I haven’t tried it but I think it should work:
git checkout lexer --
When you add --, the word before it is always considered a branch/commit/tree and the word after a path.