Issue #9: Separate ShaderLexer into another file