A Span represents a span of a SourceInput. Either both start and end are known, or both are unknown. If end is unknown but not the start, they are made equal (the span is a single position). If start is unknown but not the end, the end is considered an incorrect value, and made unknown.
A SourceSpan delimitates a span in a SourceReader.SourceInput. To do that, it has start and end positions, indicating where the span of input starts and ends, respectively.
REPRESENTATION INVARIANT: (not verified)
Private Remarks
Properties start and end indicate where the span of input starts and ends, respectively. If the span only spans over 1 characters, the end position may not be specified. If the start position is unknown, the end position should also be unknown. Those conditions are guaranteed on construction.