예제 #1
0
 private void updateAST(BJKCore.Cmd ast)
 {
     ASTreeView.Nodes.Clear();
     ASTreeView.Nodes.Add(new CmdTreeNode("Program"));
     addASTNode(ASTreeView.TopNode as CmdTreeNode, ast);
     ASTreeView.ExpandAll();
 }
예제 #2
0
 private void Analyze()
 {
     try
     {
         m_lastAST = BJKParse.astBreakNestedExpressions(BJKParse.aString(CodeTextBox.Text));
         updateAST(m_lastAST);
         textBoxAnalysisResult.Clear();
         textBoxAnalysisResult.Text = "Analysing...\n";
         Analysis.AbstractSemantics.resultType result = Analysis.AbstractSemantics.analyse(m_lastAST);
         Console.WriteLine(result.toString());
         textBoxAnalysisResult.Multiline = true;
         textBoxAnalysisResult.Text      = result.toString();
     }
     catch (Util.Fail f)
     {
         MessageBox.Show(f.Data0, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
예제 #3
0
        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);
        }
예제 #4
0
 private void Analyze()
 {
     try
     {
         m_lastAST = BJKParse.astBreakNestedExpressions(BJKParse.aString(CodeTextBox.Text));
         updateAST(m_lastAST);
         textBoxAnalysisResult.Clear();
         textBoxAnalysisResult.Text = "Analysing...\n";
         Analysis.AbstractSemantics.resultType result = Analysis.AbstractSemantics.analyse(m_lastAST);
         Console.WriteLine(result.toString());
         textBoxAnalysisResult.Multiline = true;
         textBoxAnalysisResult.Text = result.toString();
     }
     catch (Util.Fail f)
     {
         MessageBox.Show(f.Data0, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }