static void Main(string[] args) { var sw = new Stopwatch(); sw.Start(); var parser = new Parser(); var rootAST = parser.ParseProgramAsync("src/hello.ryu").Result; var symTableManager = new SymbolTableManager(rootAST); symTableManager.GenerateSymbolTables(); var typeInferer = new TypeInferer(symTableManager); var typeChecker = new TypeChecker(symTableManager); var codeGen = new CodeGenVisitor(symTableManager); typeInferer.InferTypes(); typeChecker.TypeCheck(); codeGen.CodeGen(); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); Console.ReadKey(); }
private IEnumerable <string> GetSymbolsAsList(string f) { var physFile = new PhysicalFile { Filepath = f, Sourcecode = File.ReadAllText(f) }; var dtu = new DafnyTranslationUnit(physFile); var dafnyProg = dtu.Verify().DafnyProgram; ISymbolTableGenerator st = new SymbolTableGenerator(dafnyProg); ISymbolInformation root = st.GenerateSymbolTable(); ISymbolTableManager sm = new SymbolTableManager(root); ISymbolNavigator navigator = new SymbolNavigator(); List <ISymbolInformation> symbols = new List <ISymbolInformation>(); foreach (var modul in root.Children) { symbols.AddRange(navigator.TopDownAll(modul)); } var actual = symbols.Select(x => x.ToDebugString()).ToList(); Console.WriteLine("SymboleTable for " + f); Console.Write(((SymbolTableManager)sm).CreateDebugReadOut()); return(actual); }
void DoDispose() { if (!is_forked) { if (architecture != null) { architecture.Dispose(); architecture = null; } if (mono_language != null) { mono_language.Dispose(); mono_language = null; } if (native_language != null) { native_language.Dispose(); native_language = null; } if (os != null) { os.Dispose(); os = null; } if (symtab_manager != null) { symtab_manager.Dispose(); symtab_manager = null; } } if (breakpoint_manager != null) { breakpoint_manager.Dispose(); breakpoint_manager = null; } if (thread_db != null) { thread_db.Dispose(); thread_db = null; } if (thread_lock_mutex != null) { thread_lock_mutex.Dispose(); thread_lock_mutex = null; } exception_handlers = null; manager.RemoveProcess(this); }
static void Main(string[] args) { try { string path; if (args.Length == 0) { Console.WriteLine("Please enter a filepath: "); path = Console.ReadLine(); } else { path = args[0]; } ErrorManager em = new ErrorManager(); Lexer lexer = new Lexer(new FileSource(path)); Parser parser = new Parser(lexer); parser.HookTo(em); AST program = parser.parse(); SymbolTableBuildingVisitor tableBuilder = new SymbolTableBuildingVisitor(); tableBuilder.HookTo(em); SymbolTableManager stm = tableBuilder.buildTables(program); IdentifierUsageCheckingVisitor idChecker = new IdentifierUsageCheckingVisitor(stm); idChecker.HookTo(em); idChecker.check(program); TypeCheckingVisitor typeChecker = new TypeCheckingVisitor(stm); typeChecker.HookTo(em); typeChecker.check(program); if (!em.areErrors()) { CodeGeneratingVisitor cgv = new CodeGeneratingVisitor(stm); CProgram cProgram = cgv.generate(program); cProgram.generateFile(); Console.WriteLine("Build successful."); } else { Console.WriteLine("Build failed."); } Console.ReadLine(); } catch (Exception ex) { Console.WriteLine(ex); return; } }
internal Process(ThreadManager manager, ProcessStart start) : this(manager, start.Session) { this.start = start; is_attached = start.PID != 0; breakpoint_manager = new BreakpointManager(); exception_handlers = new Dictionary <int, ExceptionCatchPoint> (); symtab_manager = new SymbolTableManager(session); os = Inferior.CreateOperatingSystemBackend(this); native_language = new NativeLanguage(this, os, target_info); session.OnProcessCreated(this); }
private Process(Process parent, int pid) : this(parent.manager, parent.session) { this.start = new ProcessStart(parent.ProcessStart, pid); this.is_forked = true; this.initialized = true; this.parent = parent; breakpoint_manager = new BreakpointManager(parent.breakpoint_manager); exception_handlers = new Dictionary <int, ExceptionCatchPoint> (); foreach (KeyValuePair <int, ExceptionCatchPoint> catchpoint in parent.exception_handlers) { exception_handlers.Add(catchpoint.Key, catchpoint.Value); } symtab_manager = parent.symtab_manager; native_language = parent.native_language; os = parent.os; }
internal void ChildExecd(SingleSteppingEngine engine, Inferior inferior) { is_execed = true; if (!is_forked) { if (mono_language != null) { mono_language.Dispose(); } if (native_language != null) { native_language.Dispose(); } if (os != null) { os.Dispose(); } if (symtab_manager != null) { symtab_manager.Dispose(); } } if (breakpoint_manager != null) { breakpoint_manager.Dispose(); } session.OnProcessExecd(this); breakpoint_manager = new BreakpointManager(); exception_handlers = new Dictionary <int, ExceptionCatchPoint> (); symtab_manager = new SymbolTableManager(session); os = Inferior.CreateOperatingSystemBackend(this); native_language = new NativeLanguage(this, os, target_info); Inferior new_inferior = Inferior.CreateInferior(manager, this, start); try { new_inferior.InitializeAfterExec(inferior.PID); } catch (Exception ex) { if ((ex is TargetException) && (((TargetException)ex).Type == TargetError.PermissionDenied)) { Report.Error("Permission denied when trying to debug exec()ed child {0}, detaching!", inferior.PID); } else { Report.Error("InitializeAfterExec() failed on pid {0}: {1}", inferior.PID, ex); } new_inferior.DetachAfterFork(); return; } SingleSteppingEngine new_thread = new SingleSteppingEngine( manager, this, new_inferior, inferior.PID); ThreadServant[] threads; lock (thread_hash.SyncRoot) { threads = new ThreadServant [thread_hash.Count]; thread_hash.Values.CopyTo(threads, 0); } for (int i = 0; i < threads.Length; i++) { if (threads [i].PID != inferior.PID) { threads [i].Kill(); } } thread_hash [inferior.PID] = new_thread; inferior.Dispose(); inferior = null; manager.Debugger.OnProcessExecdEvent(this); manager.Debugger.OnThreadCreatedEvent(new_thread.Thread); initialized = is_forked = false; main_thread = new_thread; if ((engine.Thread.ThreadFlags & Thread.Flags.StopOnExit) != 0) { new_thread.Thread.ThreadFlags |= Thread.Flags.StopOnExit; } CommandResult result = engine.OnExecd(new_thread); new_thread.StartExecedChild(result); }
public TypeCheckingVisitor(SymbolTableManager stm) { this.stm = stm; hook = new ErrorHook(); }
public IdentifierUsageCheckingVisitor(SymbolTableManager stm) { this.stm = stm; this.hook = new ErrorHook(); }
public CodeGeneratingVisitor(SymbolTableManager stm) { this.stm = stm; this.generatedCode = new StringBuilder(); }