示例#1
0
 public VMRoutine Assemble(BHAV bhav)
 {
     lock (_Assembled)
     {
         if (_Assembled.ContainsKey(bhav))
         {
             return(_Assembled[bhav]);
         }
         var routine = VMTranslator.Assemble(this, bhav);
         _Assembled.Add(bhav, routine);
         return(routine);
     }
 }
示例#2
0
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                throw new Ufer(AppDomain.CurrentDomain.FriendlyName + " <xxx.vm>");
            }

            var st = Path.GetFullPath(args[0]);

            string[] rgfpatIn;
            string   fpatOut;

            var translator = new VMTranslator();


            if (Directory.Exists(args[0]))
            {
                foreach (var dpat in args[0].EnCons(Directory.EnumerateDirectories(st, "*.*", SearchOption.AllDirectories)).ToArray())
                {
                    rgfpatIn = Directory.EnumerateFiles(dpat, "*.vm").ToArray();
                    if (rgfpatIn.Any())
                    {
                        Console.WriteLine(rgfpatIn.StJoin("\n"));
                        fpatOut = Path.Combine(dpat, Path.GetFileName(dpat)) + ".asm";
                        Console.WriteLine(">> " + fpatOut);
                        File.WriteAllLines(fpatOut, translator.ToAsm(rgfpatIn));
                        Console.WriteLine();
                    }
                }
            }
            else
            {
                if (!args[0].EndsWith(".vm", StringComparison.InvariantCultureIgnoreCase))
                {
                    throw new Ufer("Not a vm file");
                }

                rgfpatIn = new[] { st };
                fpatOut  = Path.GetFileNameWithoutExtension(st) + ".asm";
                File.WriteAllLines(fpatOut, translator.ToAsm(rgfpatIn));
            }
        }
示例#3
0
        static void Main(string[] args)
        {
            if (args.Length != 1)
                throw new Ufer(AppDomain.CurrentDomain.FriendlyName + " <xxx.vm>");

            var st = Path.GetFullPath(args[0]);
            string[] rgfpatIn;
            string fpatOut;

            var translator = new VMTranslator();

            if (Directory.Exists(args[0]))
            {
                foreach (var dpat in args[0].EnCons(Directory.EnumerateDirectories(st, "*.*", SearchOption.AllDirectories)).ToArray())
                {
                    rgfpatIn = Directory.EnumerateFiles(dpat, "*.vm").ToArray();
                    if (rgfpatIn.Any())
                    {
                        Console.WriteLine(rgfpatIn.StJoin("\n"));
                        fpatOut = Path.Combine(dpat, Path.GetFileName(dpat)) + ".asm";
                        Console.WriteLine(">> " + fpatOut);
                        File.WriteAllLines(fpatOut, translator.ToAsm(rgfpatIn));
                        Console.WriteLine();
                    }
                }
            }
            else
            {
                if (!args[0].EndsWith(".vm", StringComparison.InvariantCultureIgnoreCase))
                    throw new Ufer("Not a vm file");

                rgfpatIn = new[] {st};
                fpatOut = Path.GetFileNameWithoutExtension(st) + ".asm";
                File.WriteAllLines(fpatOut, translator.ToAsm(rgfpatIn));
            }
        }