public ParseException fail(string fmt, params object[] args)
{
var errorMsg = string.Format(fmt, args);
var line = LineSoFar;
var w = new StringWriter();
w.WriteLine("{0}({1}): {2}", Filename, LineNumber, errorMsg);
var ln = LineNumber - previousLines.Count;
foreach(var l in previousLines)
w.WriteLine("{0}({1}): {2}", Filename, ln++, l);
w.WriteLine("{0}({1}): {2}", Filename, ln++, line);
w.WriteLine("{0}({1}): {2}^: {3}", Filename, ln++, new string(' ', line.Length), errorMsg);
w.Flush();
var msg = w.ToString();
return new ParseException(msg);
}
}