/// <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); }
public static BekProgram BekFileToBekProgram(string file) { var sw = new System.IO.StreamReader(file); string bek = sw.ReadToEnd(); sw.Close(); return(BekParser.BekFromString(bek)); }
/// <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()); }
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(); } }