SourceRange
A half-open source range [start, end) in the original character input.
Every Lexeme carries a SourceRange so that downstream stages (lexer, parser, highlighter) can map any token back to exact character positions without source maps or position-shifting.