Exemplo n.º 1
0
        public Program ParseAndTypeCheck(bool runResolver)
        {
            var errorReporter = new ConsoleErrorReporter();
            var module        = new LiteralModuleDecl(new DefaultModuleDecl(), null);
            var builtIns      = new BuiltIns();
            var parseErrors   = new Errors(errorReporter);
            var errorCount    = Parser.Parse(_snapshot.GetText(), _filename, _filename, module, builtIns, parseErrors);
            var errString     = Main.ParseIncludes(module, builtIns, new List <string>(), parseErrors);

            if (errorCount != 0 || errString != null)
            {
                return(null);
            }

            var program = new Program(_filename, module, builtIns, errorReporter);

            if (!runResolver)
            {
                return(program);
            }

            var r = new Resolver(program);

            r.ResolveProgram(program);
            return(errorReporter.Count(ErrorLevel.Error) == 0 ? program : null);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Parse a string read (from a certain file) to a Dafny Program
        /// </summary>
        public static Program?Parse(string source, string fileName = "")
        {
            ModuleDecl module   = new LiteralModuleDecl(new DefaultModuleDecl(), null);
            var        builtIns = new BuiltIns();
            var        reporter = new ConsoleErrorReporter();
            var        success  = Parser.Parse(source, fileName, fileName, null, module, builtIns,
                                               new Errors(reporter)) == 0 && Microsoft.Dafny.Main.ParseIncludes(module, builtIns,
                                                                                                                new List <string>(), new Errors(reporter)) == null;
            Program?program = null;

            if (success)
            {
                program = new Program(fileName, module, builtIns, reporter);
            }
            new Resolver(program).ResolveProgram(program);
            return(program);
        }
Exemplo n.º 3
0
        IEnumerable <BoogieProgram> GetBoogie(string dafnyProgramText)
        {
            var module       = new LiteralModuleDecl(new DefaultModuleDecl(), null);
            var fullFilePath = "foo";

            Microsoft.Dafny.Type.ResetScopes();
            var builtIns      = new BuiltIns();
            var errorReporter = new ConsoleErrorReporter();
            var parseResult   = Parser.Parse(dafnyProgramText, fullFilePath, "foo", module, builtIns, errorReporter);

            Assert.Equal(0, parseResult);
            var dafnyProgram = new Microsoft.Dafny.Program(fullFilePath, module, builtIns, errorReporter);

            Main.Resolve(dafnyProgram, errorReporter);
            var boogiePrograms = Translator.Translate(dafnyProgram, errorReporter).Select(t => t.Item2);

            return(boogiePrograms);
        }
Exemplo n.º 4
0
        public static int Parse_Verbatim_Block(string verbatim_block, string filename, int line, Dafny.ModuleDecl module,
                                               Dafny.BuiltIns builtIns, bool verifyThisFile = true)
        {
            Contract.Requires(verbatim_block != null);
            Contract.Requires(filename != null);
            Contract.Requires(module != null);

            Dafny.ErrorReporter reporter = new Dafny.ConsoleErrorReporter();
            Dafny.Errors        errors   = new Dafny.Errors(reporter);

            byte[]       buffer       = cce.NonNull(System.Text.UTF8Encoding.Default.GetBytes(verbatim_block));
            MemoryStream ms           = new MemoryStream(buffer, false);
            string       fullFilename = Path.GetFullPath(filename);

            Dafny.Scanner scanner = new Dafny.Scanner(ms, errors, fullFilename, filename, line);
            Dafny.Parser  parser  = new Dafny.Parser(scanner, errors, null, module, builtIns, verifyThisFile);
            parser.Parse();
            return(parser.errors.ErrorCount);
        }