} // NT_Calc private static void NT_Expr(out int e) { int t = 0; e = 0; for (;;) { switch (Syn.Interpret()) { case 0: return; case 1: NT_Term(out e); break; case 2: NT_Term(out t); break; case 3: // SEM e = e + t; break; case 4: NT_Term(out t); break; case 5: // SEM e = e - t; break; } // switch } // for } // NT_Expr
} // NT_Expr private static void NT_Term(out int t) { int f = 0; t = 0; for (;;) { switch (Syn.Interpret()) { case 0: return; case 1: NT_Fact(out t); break; case 2: NT_Fact(out f); break; case 3: // SEM t = t * f; break; case 4: NT_Fact(out f); break; case 5: // SEM t = t / f; break; } // switch } // for } // NT_Term
public static void StartSem() { //-----------------------------------|---------------------------------------- for (;;) { switch (Syn.Interpret()) { case 0: return; case 1: NT_Calc(); break; } // switch } // for } // StartSem
} // NT_Term private static void NT_Fact(out int f) { f = 0; for (;;) { switch (Syn.Interpret()) { case 0: return; case 1: Lex.GETnumberAttr(out f); break; case 2: NT_Expr(out f); break; } // switch } // for } // NT_Fact
} // CalcSemMethod // *** start of global SYN and SEM declarations from ATG *** // *** end of global SYN and SEM declarations from ATG *** private static void NT_Calc() { int e = 0; for (;;) { switch (Syn.Interpret()) { case 0: return; case 1: NT_Expr(out e); break; case 2: // SEM Console.WriteLine(e); break; } // switch } // for } // NT_Calc
private int CompileFile(String expression) { try { Lex.src = new StringReader(expression); //Console.WriteLine("parsing ..."); Syn.Parse(); Lex.src.Close(); Lex.src.Dispose(); Lex.src = null; } finally { if (Lex.src != null) { Lex.src.Close(); Lex.src.Dispose(); Lex.src = null; } // if Utils.Modules(Utils.ModuleAction.resetModule); } // try/finally to make sure srcFs and srcReader are closed return(Utils.EXIT_SUCCESS); } // CompileFile
} // Abort private static int CompileFile(String srcFileName) { FileStream srcFs = null; try { srcFs = new FileStream(srcFileName, FileMode.Open); } catch (Exception) { Console.WriteLine("*** file \"{0}\" not found", srcFileName); return(Utils.EXIT_FAILURE); } // try/catch try { Lex.src = new StreamReader(srcFs); Console.WriteLine("parsing ..."); Syn.Parse(); Lex.src.Close(); Lex.src.Dispose(); Lex.src = null; if (Errors.NumOfErrors() > 0) { Console.WriteLine("listing ..."); String lstFileName = Path.ChangeExtension(srcFileName, ".lst"); FileStream lstFs = null; try { lstFs = new FileStream(lstFileName, FileMode.Create); } catch (Exception) { Utils.FatalError(NAME, "CompileFile", "file \"{0}\" not created", lstFileName); return(Utils.EXIT_FAILURE); } // try/catch StreamWriter lstWriter = null; try { lstWriter = new StreamWriter(lstFs); StreamReader srcFsReader = null; try { // open the source file a second time to generate the error listing srcFsReader = new StreamReader(new FileStream(srcFileName, FileMode.Open)); lstWriter.WriteLine(NAME + " (file: \"{0}\")", srcFileName); Errors.GenerateListing(srcFsReader, lstWriter, Errors.ListingShape.longListing); } finally { srcFsReader.Close(); srcFsReader.Dispose(); } // try/finally Console.WriteLine("{0} error(s) detected", Errors.NumOfErrors()); } finally { lstWriter.Close(); lstWriter.Dispose(); } // try/finally } else { Console.WriteLine("no errors detected"); } } finally { if (Lex.src != null) { Lex.src.Close(); Lex.src.Dispose(); Lex.src = null; } // if Utils.Modules(Utils.ModuleAction.resetModule); } // try/finally to make sure srcFs and srcReader are closed return(Utils.EXIT_SUCCESS); } // CompileFile