/// <summary> /// PRIM /// </summary> /// <param name="ts"></param> /// <returns></returns> IBoolExpr Prim(TokenStream ts) { switch (ts.Current.kind) { case Kind.VAR: string varName = ts.Current.nString.ToString(); ts.MoveNext(); return(BoolExpr.CreateVariable(varName)); case Kind.POS: ts.MoveNext(); return(BoolExpr.CreateTrueVariable()); case Kind.NEG: ts.MoveNext(); return(BoolExpr.CreateFalseVariable()); case Kind.LPAR: ts.MoveNext(); IBoolExpr ev = Exists(ts); if (ts.Current.kind != Kind.RPAR) { throw new ApplicationException("Expected Kind.RPAR"); } ts.MoveNext(); return(ev); case Kind.RPAR: ts.MoveNext(); return(null); } return(null); }
IBoolExpr BimpOpt(IBoolExpr inStr, TokenStream ts) { if (ts.Current.kind == Kind.BIMP) { ts.MoveNext(); return(BimpOpt(new Bin(Kind.BIMP, inStr, Impl(ts)), ts)); } else { return(inStr); } }
IBoolExpr DisjOpt(IBoolExpr inStr, TokenStream ts) { if (ts.Current.kind == Kind.DIS) { ts.MoveNext(); return(DisjOpt(new Bin(Kind.DIS, inStr, Nor(ts)), ts)); } else { return(inStr); } }
IBoolExpr InvImplOpt(IBoolExpr inStr, TokenStream ts) { if (ts.Current.kind == Kind.INV_IMPL) { ts.MoveNext(); return(InvImplOpt(new Bin(Kind.INV_IMPL, inStr, Xor(ts)), ts)); } else { return(inStr); } }
IBoolExpr XorOpt(IBoolExpr inStr, TokenStream ts) { if (ts.Current.kind == Kind.XOR) { ts.MoveNext(); return(XorOpt(new Bin(Kind.XOR, inStr, Not(ts)), ts)); } else { return(inStr); } }
IBoolExpr NotOpt(IBoolExpr inStr, TokenStream ts) { if (ts.Current.kind == Kind.NOT) { ts.MoveNext(); return(NotOpt(new Bin(Kind.NOT, null, Prim(ts)), ts)); } else { return(inStr); } }
IBoolExpr NandOpt(IBoolExpr inStr, TokenStream ts) { if (ts.Current.kind == Kind.NAND) { ts.MoveNext(); return(NandOpt(new Bin(Kind.NAND, inStr, Bimp(ts)), ts)); } else { return(inStr); } }
IBoolExpr ConjOpt(IBoolExpr inStr, TokenStream ts) { if (ts.Current.kind == Kind.CON) { ts.MoveNext(); return(ConjOpt(new Bin(Kind.CON, inStr, Nand(ts)), ts)); } else { return(inStr); } }
/// <summary> /// Returns the Scanner input in the form of an abstract syntax tree. /// </summary> /// <param name="ts"></param> /// <returns></returns> public IBoolExpr Parse(TokenStream ts) { ts.MoveNext(); IBoolExpr result = Exists(ts); //return result; switch (ts.Current.kind) { case Kind.EOF: return(result); default: throw new ApplicationException("Parse error: " + ts.Current); } }
private void Debug_Click(object sender, EventArgs e) { BddSharp.AST.VarList.ResetDic(); BoolParser parser = new BoolParser(); Scanner sc = new Scanner(); TextReader tr = new StringReader(ExpressionBox.Text); CategorizeVariables(VarsBox.Text); Ast = parser.Parse(sc.Scan(tr)); DebugBox.Text = Ast.print(); }
public void ParseTest() { BoolParser target = new BoolParser(); System.Collections.Generic.IEnumerator <BddSharp.Parser.Token> ts = null; // TODO: Initialize to an appropriate value IBoolExpr expected = null; IBoolExpr actual; actual = target.Parse(ts); Assert.AreEqual(expected, actual, "BddSharp.Parser.BoolParser.parse did not return the expected value."); Assert.Inconclusive("Verify the correctness of this test method."); }
public static Bdd execute(IBoolExpr AST, string filename) { if (AST == null) { return(null); //Nothing written in textbox, or parser failed. } BDD.Setup(); Bdd result = AST.execute(); result.Serialize(filename, 12); return(result); }
IBoolExpr ExistsOpt(IBoolExpr inStr, TokenStream ts) { if (ts.Current.kind == Kind.EXISTS) { ts.MoveNext(); if (ts.Current.kind != Kind.LPAR) { throw new ApplicationException("Expected Kind.LPAR"); } else { return(VarList(ts, Kind.EXISTS)); } } else { return(inStr); } }
IBoolExpr ForallOpt(IBoolExpr inStr, TokenStream ts) { if (ts.Current.kind == Kind.FORALL) { //vars.Clear(); ts.MoveNext(); if (ts.Current.kind != Kind.LPAR) { throw new ApplicationException("Expected Kind.LPAR"); } else { return(VarList(ts, Kind.FORALL)); } } else { return(inStr); } }
private void Execute_Click(object sender, EventArgs e) { BddSharp.AST.VarList.ResetDic(); BoolParser parser = new BoolParser(); Scanner sc = new Scanner(); TextReader tr = new StringReader(ExpressionBox.Text); CategorizeVariables(VarsBox.Text); Ast = parser.Parse(sc.Scan(tr)); BoolExpr.execute(Ast, "foo"); if (ExpressionBox.Text == string.Empty) { MessageBox.Show("Error: No expression provided."); } else { Thread.Sleep(4000); System.Diagnostics.Process.Start("results\\foo.jpg", null); } }
public Forall(List <Var> Vars, IBoolExpr Body) { this.body = Body; this.vars = Vars; }
public Exists(List <Var> Vars, IBoolExpr Body) { this.body = Body; this.vars = Vars; }
public Bin(Kind op, IBoolExpr l, IBoolExpr r) { this.op = op; this.left = l; this.right = r; }