} // ErrorWarnInfo // --- listing generation --- private static void PutMsg(TextWriter lst, ErrorWarn eow) { switch (eow.kind) { case EoWKind.lexErr: lst.Write("+LEX+"); break; case EoWKind.synErr: lst.Write("*SYN*"); break; case EoWKind.semErr: lst.Write("#SEM#"); break; case EoWKind.warn: lst.Write("!WRN!"); break; } // switch for (int i = 0; i < eow.info.col; i++) { lst.Write(" "); } lst.Write(" ^{0}", eow.info.msg); } // PutMsg
public static void ErrorsMethod(Utils.ModuleAction action, out String moduleName) { //-----------------------------------|---------------------------------------- moduleName = MODULENAME; switch (action) { case Utils.ModuleAction.getModuleName: return; case Utils.ModuleAction.initModule: aps = new AbortMethod[MAXABORTPROCS]; sp = 0; PushAbortMethod(DefaultAbort); stopParsing = null; eowCnt = new int[4]; curEoW = new ErrorWarn[4]; break; case Utils.ModuleAction.resetModule: break; case Utils.ModuleAction.cleanupModule: eowl = null; eowCnt = null; curEoW = null; return; } // switch // --- for initModule and resetModule --- eowl = null; numOfErrs = 0; numOfWarns = 0; for (int i = 0; i < 4; i++) eowCnt[i] = 0; } // ErrorsMethod
private static ErrorWarnInfo GetMessage(bool first, EoWKind knd) { ErrorWarn eow = null; ErrorWarnInfo eowi = null; if (first) { eow = eowl; } else { eow = curEoW[(int)knd].next; } while (eow != null && eow.kind != knd) { eow = eow.next; } curEoW[(int)knd] = eow; if (eow == null) { eowi = new ErrorWarnInfo(); eowi.msg = ""; eowi.line = 0; eowi.col = 0; } else { eowi = eow.info; } return(eowi); } // GetMessage
} // CallStopParsing // --- storage of errors found on compilation --- private static void EnterMessage(EoWKind knd, int line, int col, String msg) { ErrorWarn eow, prveow, nxteow; eowCnt[(int)knd]++; eow = new ErrorWarn(); eow.kind = knd; eow.info = new ErrorWarnInfo(); eow.info.line = line; eow.info.col = col; eow.info.msg = msg; prveow = null; nxteow = eowl; while (nxteow != null && nxteow.info.line <= line) { prveow = nxteow; nxteow = nxteow.next; } // while while (nxteow != null && nxteow.info.line == line && nxteow.info.col <= col) { prveow = nxteow; nxteow = nxteow.next; } // while if (prveow == null) { eowl = eow; } else { prveow.next = eow; } eow.next = nxteow; } // EnterMessage
} // CallStopParsing // --- storage of errors found on compilation --- private static void EnterMessage(EoWKind knd, int line, int col, String msg) { ErrorWarn eow, prveow, nxteow; eowCnt[(int)knd]++; if (REPORT_EOW_TO_CONSOLE) { Console.Write("(" + line + ", " + col + "): "); switch (knd) { case EoWKind.lexErr: Console.Write("+LEX+"); break; case EoWKind.synErr: Console.Write("*SYN*"); break; case EoWKind.semErr: Console.Write("#SEM#"); break; case EoWKind.warn: Console.Write("!WRN!"); break; } // switch Console.Write(" " + msg); } // if eow = new ErrorWarn(); eow.kind = knd; eow.info = new ErrorWarnInfo(); eow.info.line = line; eow.info.col = col; eow.info.msg = msg; prveow = null; nxteow = eowl; while (nxteow != null && nxteow.info.line <= line) { prveow = nxteow; nxteow = nxteow.next; } // while while (nxteow != null && nxteow.info.line == line && nxteow.info.col <= col) { prveow = nxteow; nxteow = nxteow.next; } // while if (prveow == null) { eowl = eow; } else { prveow.next = eow; } eow.next = nxteow; } // EnterMessage
public static void ErrorsMethod(Utils.ModuleAction action, out String moduleName) { //-----------------------------------|---------------------------------------- moduleName = MODULENAME; switch (action) { case Utils.ModuleAction.getModuleName: return; case Utils.ModuleAction.initModule: aps = new AbortMethod[MAXABORTPROCS]; sp = 0; PushAbortMethod(DefaultAbort); stopParsing = null; eowCnt = new int[4]; curEoW = new ErrorWarn[4]; break; case Utils.ModuleAction.resetModule: break; case Utils.ModuleAction.cleanupModule: eowl = null; eowCnt = null; curEoW = null; return; } // switch // --- for initModule and resetModule --- eowl = null; numOfErrs = 0; numOfWarns = 0; for (int i = 0; i < 4; i++) { eowCnt[i] = 0; } } // ErrorsMethod
} // ListingShape public static void GenerateListing(TextReader src, TextWriter lst, ListingShape listShape) { //-----------------------------------|---------------------------------------- ErrorWarn eow = null; int lnr, skip; String srcLine; ((StreamReader)src).BaseStream.Seek(0, SeekOrigin.Begin); eow = eowl; if (eow != null) { while (eow != null && eow.info.line < 1) { PutMsg(lst, eow); eow = eow.next; } // while lst.WriteLine(); } // if lnr = 1; for (; ;) { if (listShape == ListingShape.shortListing) { if (eow == null) { lst.WriteLine("..."); break; } // if skip = eow.info.line - lnr; if (skip > 0) { lst.WriteLine("..."); lnr = eow.info.line; while (skip-- > 0) { srcLine = src.ReadLine(); if (srcLine == null) { break; } } // while } // if } // if srcLine = src.ReadLine(); if (srcLine == null) { break; } lst.WriteLine("{0,5}| {1}", lnr, srcLine); while (eow != null && eow.info.line == lnr) { PutMsg(lst, eow); eow = eow.next; } // while lnr++; } // for lst.WriteLine(); while (eow != null) { PutMsg(lst, eow); eow = eow.next; } // while lst.WriteLine(); lst.WriteLine("error(s) and warning(s):"); lst.WriteLine("-----------------------"); lst.WriteLine(); lst.WriteLine("{0,5} lexical error(s) ", NumOfLexErrors()); lst.WriteLine("{0,5} syntax error(s) ", NumOfSynErrors()); lst.WriteLine("{0,5} semantic error(s)", NumOfSemErrors()); lst.WriteLine("{0,5} warning(s) ", NumOfWarnings()); } // GenerateListing
} // ErrorWarnInfo // --- listing generation --- private static void PutMsg(TextWriter lst, ErrorWarn eow) { switch (eow.kind) { case EoWKind.lexErr: lst.Write("+LEX+"); break; case EoWKind.synErr: lst.Write("*SYN*"); break; case EoWKind.semErr: lst.Write("#SEM#"); break; case EoWKind.warn: lst.Write("!WRN!"); break; } // switch for (int i = 0; i < eow.info.col; i++) lst.Write(" "); lst.Write(" ^{0}", eow.info.msg); } // PutMsg
} // CallStopParsing // --- storage of errors found on compilation --- private static void EnterMessage(EoWKind knd, int line, int col, String msg) { ErrorWarn eow, prveow, nxteow; eowCnt[(int)knd]++; eow = new ErrorWarn(); eow.kind = knd; eow.info = new ErrorWarnInfo(); eow.info.line = line; eow.info.col = col; eow.info.msg = msg; prveow = null; nxteow = eowl; while (nxteow != null && nxteow.info.line <= line) { prveow = nxteow; nxteow = nxteow.next; } // while while (nxteow != null && nxteow.info.line == line && nxteow.info.col <= col) { prveow = nxteow; nxteow = nxteow.next; } // while if (prveow == null) eowl = eow; else prveow.next = eow; eow.next = nxteow; } // EnterMessage