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;
 }