コード例 #1
0
        public static Compiler GetCompiler(string filename, CompilationOptions options = 0, string customLanguageFile = "")
        {
            var    fileInfo = new FileInfo(filename);
            Parser parser;

            if (!String.IsNullOrEmpty(customLanguageFile))
            {
                parser = new CustomLanguageParser(File.ReadAllLines(customLanguageFile));
            }
            else
            {
                switch (fileInfo.Extension.Substring(1).ToLower()) // remove the period.
                {
                case "bf": parser = new BrainfuckParser(); break;

                case "ook": parser = new OokParser(); break;

                case "sook": parser = new ShortOokParser(); break;

                default: throw new UnknownLanguageException();
                }
            }

            return(new Compiler(parser, options));
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: sergey-tihon/yabfcompiler
        private Parser GetParser(string language)
        {
            Parser parser = null;

            switch (language)
            {
            case "Brainfuck": parser = new BrainfuckParser(); break;

            case "Ook!": parser = new OokParser(); break;

            case "ShortOok!": parser = new ShortOokParser(); break;
            }

            return(parser);
        }
コード例 #3
0
        static void Main(string[] args)
        {
            //Todo Analyse args.

            var src = "+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-." +
                      "------------.<++++++++.--------.+++.------.--------.>+.#";
            var parser = new BrainfuckParser();

            using (var sr = new StringReader(src))
            {
                var tokens = parser.Parse(sr);

                foreach (var token in tokens)
                {
                    token.Do();
                }
            }
        }
コード例 #4
0
        public static Compiler GetCompiler(string filename, CompilationOptions options = 0, string customLanguageFile = "")
        {
            var fileInfo = new FileInfo(filename);
            Parser parser;

            if (!String.IsNullOrEmpty(customLanguageFile))
            {
                parser = new CustomLanguageParser(File.ReadAllLines(customLanguageFile));
            }
            else
            {
                switch (fileInfo.Extension.Substring(1).ToLower()) // remove the period.
                {
                    case "bf": parser = new BrainfuckParser(); break;
                    case "ook": parser = new OokParser(); break;
                    case "sook": parser = new ShortOokParser(); break;
                    default: throw new UnknownLanguageException();
                }
            }

            return new Compiler(parser, options);
        }
コード例 #5
0
        static void Main(string[] args)
        {
            var argsParser = new ArgsParser <Options>();

            IArgsData <Options> options;

            try
            {
                options = argsParser.Parse(args);
            }
            catch (AnalysisException ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }

            if (options.Option.Help)
            {
                throw new NotImplementedException();
            }

            if (options.Has(x => x.Code) && options.Has(x => x.Source))
            {
                throw new NotImplementedException();
            }

            string src;


            var parser = new BrainfuckParser();
            IEnumerable <BrainfuckToken> tokens;

            if (options.Has(x => x.Code))
            {
                src = options.Option.Code;
                using (var sr = new StringReader(src))
                {
                    tokens = parser.Parse(sr);
                }
            }
            else if (options.Has(x => x.Source))
            {
                using (var fs = new FileStream(options.Option.Source, FileMode.Open, FileAccess.Read, FileShare.Read))
                    using (var sr = new StreamReader(fs))
                    {
                        tokens = parser.Parse(sr);
                    }
            }
            else
            {
                throw new NotImplementedException();
            }

            var memoryTape = new BrainfuckMemoryTape();

            var stream = new BrainfuckStream();

            var steps = BrainfuckSteps.Create(tokens, memoryTape, stream);

            steps.Run();
        }