internal bool ParseText(ProgramName name, string programText, Span location, System.Threading.CancellationToken ctok, out ParseResult pr) { parseResult = new ParseResult(new Program(name)); pr = parseResult; bool result; try { var str = new System.IO.MemoryStream(System.Text.Encoding.ASCII.GetBytes(programText)); ((Scanner)Scanner).SetSource(str); ((Scanner)Scanner).ParseResult = parseResult; ResetState(); result = Parse(ctok); str.Close(); } catch (Exception e) { var badFile = new Flag( SeverityKind.Error, default(Span), Constants.BadFile.ToString(e.Message), Constants.BadFile.Code, parseResult.Program.Node.Name); parseResult.AddFlag(badFile); parseResult.Program.Node.GetNodeHash(); return(false); } if (ctok.IsCancellationRequested) { var badFile = new Flag( SeverityKind.Error, default(Span), Constants.OpCancelled.ToString(string.Format("Cancelled parsing of {0}", name.ToString(envParams))), Constants.OpCancelled.Code, parseResult.Program.Node.Name); parseResult.AddFlag(badFile); parseResult.Program.Node.GetNodeHash(); return(false); } parseResult.Program.Node.GetNodeHash(); return(result); }
internal bool ParseFile(ProgramName name, string referrer, Span location, System.Threading.CancellationToken ctok, out ParseResult pr) { parseResult = new ParseResult(new Program(name)); pr = parseResult; bool result; try { var fi = new System.IO.FileInfo(name.Uri.AbsolutePath); if (!fi.Exists) { var badFile = new Flag( SeverityKind.Error, default(Span), referrer == null ? Constants.BadFile.ToString(string.Format("The file {0} does not exist", name.ToString(envParams))) : Constants.BadFile.ToString(string.Format("The file {0} referred to in {1} ({2}, {3}) does not exist", name.ToString(envParams), referrer, location.StartLine, location.StartCol)), Constants.BadFile.Code, parseResult.Program.Node.Name); parseResult.AddFlag(badFile); parseResult.Program.Node.GetNodeHash(); return(false); } var str = new System.IO.FileStream(name.Uri.AbsolutePath, System.IO.FileMode.Open, System.IO.FileAccess.Read); ((Scanner)Scanner).SetSource(str); ((Scanner)Scanner).ParseResult = parseResult; ResetState(); result = Parse(ctok); str.Close(); } catch (Exception e) { var badFile = new Flag( SeverityKind.Error, default(Span), referrer == null ? Constants.BadFile.ToString(e.Message) : Constants.BadFile.ToString(string.Format("{0} referred to in {1} ({2}, {3})", e.Message, referrer, location.StartLine, location.StartCol)), Constants.BadFile.Code, parseResult.Program.Node.Name); parseResult.AddFlag(badFile); parseResult.Program.Node.GetNodeHash(); return(false); } if (ctok.IsCancellationRequested) { var badFile = new Flag( SeverityKind.Error, default(Span), referrer == null ? Constants.OpCancelled.ToString(string.Format("Cancelled parsing of {0}", name.ToString(envParams))) : Constants.OpCancelled.ToString(string.Format("Cancelled parsing of {0} referred to in {1} ({2}, {3})", name.ToString(envParams), referrer, location.StartLine, location.StartCol)), Constants.OpCancelled.Code, parseResult.Program.Node.Name); parseResult.AddFlag(badFile); parseResult.Program.Node.GetNodeHash(); return(false); } parseResult.Program.Node.GetNodeHash(); return(result); }