private void addASTNode(CmdTreeNode parent, BJKCore.Cmd c) { CmdTreeNode child = null; if (c.IsChoice) { child = new CmdTreeNode("Choose {...} or {...}"); BJKCore.Cmd.Choice choice = c as BJKCore.Cmd.Choice; addASTNode(child, choice.Item1); addASTNode(child, choice.Item2); } else if (c.IsAssume) { BJKCore.Cmd.Assume assume = c as BJKCore.Cmd.Assume; string boolExpr = boolExprString(assume.Item); child = new CmdTreeNode("Assume (" + boolExpr + ")"); } else if (c.IsAssumeNot) { BJKCore.Cmd.AssumeNot assumeNot = c as BJKCore.Cmd.AssumeNot; string coBoolExp = coBoolExprString(assumeNot.Item); child = new CmdTreeNode("Assume (" + coBoolExp + ")"); } else if (c.IsWhile) { BJKCore.Cmd.While whle = c as BJKCore.Cmd.While; string boolExpr = boolExprString(whle.Item1); child = new CmdTreeNode("While (" + boolExpr + ")"); addASTNode(child, whle.Item2); } else if (c.IsSeq) { child = new CmdTreeNode("Sequence"); BJKCore.Cmd.Seq seq = c as BJKCore.Cmd.Seq; addASTNode(child, seq.Item1); addASTNode(child, seq.Item2); } else if (c.IsSkip) { child = new CmdTreeNode("Skip"); } else if (c.IsAsgn) { BJKCore.Cmd.Asgn asgn = c as BJKCore.Cmd.Asgn; string expr = exprString(asgn.Item2); int varIndex = asgn.Item1; string varName = getVarNameByVarIndex(varIndex); child = new CmdTreeNode(varName + " := " + expr); } else if (c.IsLoop) { BJKCore.Cmd.Loop loop = c as BJKCore.Cmd.Loop; child = new CmdTreeNode("Loop*"); addASTNode(child, loop.Item); } else if (c.IsWidening) { child = new CmdTreeNode("Widening"); } parent.Nodes.Add(child); }
private string exprString(BJKCore.Expr expr) { string res = null; if (expr.IsFix) { BJKCore.Expr.Fix f = expr as BJKCore.Expr.Fix; res = f.Item.ToString(); } else if (expr.IsVar) { BJKCore.Expr.Var v = expr as BJKCore.Expr.Var; res = getVarNameByVarIndex(v.Item); } else if (expr.IsPlus) { BJKCore.Expr.Plus plus = expr as BJKCore.Expr.Plus; res = exprString(plus.Item1) + " + " + exprString(plus.Item2); } else if (expr.IsMinus) { BJKCore.Expr.Minus minus = expr as BJKCore.Expr.Minus; res = exprString(minus.Item1) + " - " + exprString(minus.Item2); } else if (expr.IsTimes) { BJKCore.Expr.Times times = expr as BJKCore.Expr.Times; res = exprString(times.Item1) + " * " + exprString(times.Item2); } return res; }
private void updateAST(BJKCore.Cmd ast) { ASTreeView.Nodes.Clear(); ASTreeView.Nodes.Add(new CmdTreeNode("Program")); addASTNode(ASTreeView.TopNode as CmdTreeNode, ast); ASTreeView.ExpandAll(); }
private string coBoolExprString(BJKCore.BoolExp boolExpr) { string res = null; if (boolExpr.IsTrue) { res = "FALSE"; } else if (boolExpr.IsFalse) { res = "TRUE"; } else if (boolExpr.IsEqual) { BJKCore.BoolExp.Equal b = boolExpr as BJKCore.BoolExp.Equal; res = exprString(b.Item1) + " != " + exprString(b.Item2); } else if (boolExpr.IsNotEqual) { BJKCore.BoolExp.NotEqual b = boolExpr as BJKCore.BoolExp.NotEqual; res = exprString(b.Item1) + " == " + exprString(b.Item2); } else if (boolExpr.IsGreat) { BJKCore.BoolExp.Great b = boolExpr as BJKCore.BoolExp.Great; res = exprString(b.Item1) + " <= " + exprString(b.Item2); } else if (boolExpr.IsGreatEqual) { BJKCore.BoolExp.GreatEqual b = boolExpr as BJKCore.BoolExp.GreatEqual; res = exprString(b.Item1) + " < " + exprString(b.Item2); } else if (boolExpr.IsLess) { BJKCore.BoolExp.Less b = boolExpr as BJKCore.BoolExp.Less; res = exprString(b.Item1) + " >= " + exprString(b.Item2); } else if (boolExpr.IsLessEqual) { BJKCore.BoolExp.LessEqual b = boolExpr as BJKCore.BoolExp.LessEqual; res = exprString(b.Item1) + " > " + exprString(b.Item2); } return res; }