Example #1
0
        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();
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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;
            }
        }
Example #5
0
        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);
        }
Example #6
0
        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;
        }
Example #7
0
        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);
        }
Example #8
0
 public TypeCheckingVisitor(SymbolTableManager stm)
 {
     this.stm = stm;
     hook     = new ErrorHook();
 }
Example #9
0
 public IdentifierUsageCheckingVisitor(SymbolTableManager stm)
 {
     this.stm  = stm;
     this.hook = new ErrorHook();
 }
Example #10
0
 public CodeGeneratingVisitor(SymbolTableManager stm)
 {
     this.stm           = stm;
     this.generatedCode = new StringBuilder();
 }