Пример #1
0
        /// <summary>
        /// Executes an if statement
        /// </summary>
        /// <param name="tree">Tree to be executed</param>
        private void IfStatement(KermitAST tree)
        {
            KermitAST condition = (KermitAST)tree.GetChild(0);
            KermitAST code      = (KermitAST)tree.GetChild(1);
            KermitAST elseCode  = tree.ChildCount == 3 ? (KermitAST)tree.GetChild(2) : null;

            KBool cres = TypeHelper.ToBool(Execute(condition));

            if (cres)
            {
                Execute(code);
            }
            else if (elseCode != null)
            {
                Execute(elseCode);
            }
        }
Пример #2
0
        /// <summary>
        /// Performs a while loop
        /// </summary>
        /// <param name="tree">Tree to be executed</param>
        private void WhileLoop(KermitAST tree)
        {
            KermitAST condition = (KermitAST)tree.GetChild(0);
            KermitAST code      = (KermitAST)tree.GetChild(1);

            ScopeSpace  sp   = new ScopeSpace("while", _currentSpace);
            MemorySpace save = _currentSpace;

            try
            {
                _currentSpace = sp;
                KBool cond = Execute(condition).Cast <KBool>();
                while (cond)
                {
                    Execute(code);
                    cond = Execute(condition).Cast <KBool>();
                }
            }
            finally
            {
                _currentSpace = save;
            }
        }