Example #1
0
        /// <summary>
        /// Converts a given bek program (given as a string) to an STb by using the given solver.
        /// </summary>
        /// <param name="solver">given solver</param>
        /// <param name="bek">given bek program as a string</param>
        /// <returns>STb encoding of the bek program</returns>
        public static STbModel BekToSTb(IContext <FuncDecl, Expr, Sort> solver, string bek)
        {
            var pgm  = BekParser.BekFromString(bek);
            var conv = BekConverter.MkBekToSTbConverter(solver, pgm.ast.funcs, pgm.ast.name);
            var st   = conv.Convert(pgm);

            return(st);
        }
Example #2
0
        public static BekProgram BekFileToBekProgram(string file)
        {
            var    sw  = new System.IO.StreamReader(file);
            string bek = sw.ReadToEnd();

            sw.Close();
            return(BekParser.BekFromString(bek));
        }
Example #3
0
        /// <summary>
        /// Converts a given bek program (given as a string) to an ST by using the given solver.
        /// </summary>
        /// <param name="solver">given solver</param>
        /// <param name="bek">given bek program</param>
        /// <returns>ST encoding of the bek program</returns>
        public static STModel BekToST(IContext <FuncDecl, Expr, Sort> solver, string bek)
        {
            var pgm = BekParser.BekFromString(bek);
            //use the STb converter so that exceptions and ite rules are supported

            var conv = BekConverter.MkBekToSTbConverter(solver, pgm.ast.funcs, pgm.ast.name);
            var stb  = conv.Convert(pgm);

            return(stb.ToST());
        }
Example #4
0
        public static void Run(string input, TextWriter tw, string bek_js_master_file)
        {
            //input = input.Replace("\t", "  ");
            input = input.Replace("\r\n", "\n");
            string input1a = (input.StartsWith("==") ? "\n" + input : input);
            string input1  = (input1a.EndsWith("\n") ? input1a : input1a + "\n");

            string[] piece = input1.Split(new string[1] {
                "\n==\n"
            }, StringSplitOptions.None);

            if (piece.Length != 2)
            {
                tw.WriteLine(@"bek.bek(1,1): error : Expecting bek programs followed by \n==\n followed by bek queries");
                return;
            }
            //remove whitespace from the start
            //piece[1] = piece[1].TrimStart('\n', '\t', '\f', '\r', '\v', ' ');

            int lines = CountLines(piece[0]);

            List <BekProgram> progs;

            if (lines == 0)
            {
                progs = new List <BekProgram>();
            }
            else
            {
                try
                {
                    progs = BekParser.DefsFromString(piece[0]);
                }
                catch (BekParseException e)
                {
                    tw.WriteLine("pgm.bek({0},{1}): error : BekParseError, {2}", min1(e.line), min1(e.pos), e.Message);
                    return;
                }
                catch (BekException e)
                {
                    tw.WriteLine("pgm.bek({0},{1}): error : BekError, {2}", 1, 1, e.Message);
                    return;
                }
                catch (Exception e)
                {
                    tw.WriteLine("pgm.bek({0},{1}): error : InternalError, {2}", 1, 1, e.Message);
                    return;
                }
            }
            List <Expression> queries;
            List <string>     queries_text;

            try
            {
                queries = Expression.ParseQueries(piece[1], out queries_text);
            }
            catch (QueryParseException e)
            {
                tw.WriteLine("query.bek({0},{1}): error : QueryParseError, {2}", e.line + lines + 2, e.pos, e.Message);
                return;
            }
            catch (Exception e)
            {
                tw.WriteLine("query.bek({0},{1}): error : QueryError, {2}", 1, 1, e.Message);
                return;
            }

            var ec = new EvaluationContext(progs, tw, bek_js_master_file);

            try
            {
                for (int i = 0; i < queries.Count; i++)
                {
                    if (i > 0)
                    {
                        tw.WriteLine();
                    }
                    tw.WriteLine(">> {0}", queries_text[i]);
                    queries[i].RunQuery(ec);
                }
                // ec.Dispose();
            }
            catch (BekParseException e) //bek pgms may be parsed as a result of exploration
            {
                tw.WriteLine("pgm.bek({0},{1}): error : ParseError, {2}", min1(e.line), min1(e.pos), e.Message);
                // ec.Dispose();
                return;
            }
            catch (BekException e)
            {
                tw.WriteLine("pgm.bek({0},{1}): error : BekError, {2}", 1, 1, e.Message);
                // ec.Dispose();
                return;
            }
            catch (QueryParseException e)
            {
                tw.WriteLine("pgm.bek({0},{1}): error : QueryParseError, {2}", e.line + lines + 2, e.pos, e.Message);
                // ec.Dispose();
                return;
            }
            catch (Exception e)
            {
                tw.WriteLine("pgm.bek({0},{1}): error : InternalError, {2}", 1, 1, e.Message);
                // ec.Dispose();
                return;
            }
            finally
            {
                //causes in some cases unhandled exception from Z3 for some reason
                //ec.Dispose();
            }
        }