public Lexer(string source, string filePath = null)
{
if (source == null)
throw new ArgumentNullException("source");
this.filePath = filePath ?? "<no file>";
sourceChars = source.ToCharArray();
totalChars = sourceChars.Length;
currentChar = totalChars == 0
? Eof
: sourceChars[0];
}