// Could be optimized so that we save left, right and operators for next comparision so we do not need to parse every loop instance!


        public static Logic parseWhileLoop(Logic[] logicOrder, int lineNumber, Scope currentScope)
        {
            if (logicOrder.Length < 3)
            {
                ErrorMessage.sendErrorMessage(lineNumber, ErrorType.WhileLoop, WhileErrorType.unknownFormat.ToString(), null);
            }

            if (logicOrder [logicOrder.Length - 1].currentType != WordTypes.indentOperator)
            {
                ErrorMessage.sendErrorMessage(lineNumber, ErrorType.WhileLoop, WhileErrorType.missingIndentOperator.ToString(), null);
            }

            Logic[] statementLogic = new Logic[logicOrder.Length - 2];
            for (int i = 1; i < logicOrder.Length - 1; i++)
            {
                statementLogic [i - 1] = logicOrder [i];
            }


            WhileLoop returnLoop = new WhileLoop();

            returnLoop.setTargetScope((logicOrder [0] as ScopeStarter).getTargetScope());
            returnLoop.getTargetScope().theScoopLoop = returnLoop;


            returnLoop.doEnterScope = StatementParser.parseAndCheckStatement(statementLogic, lineNumber, currentScope);
            returnLoop.theStatement = statementLogic;


            return(returnLoop);
        }
Exemple #2
0
        public static Logic parseStatement(Logic[] logicOrder, int lineNumber, Scope currentScope)
        {
            if (logicOrder.Length < 3)
            {
                ErrorMessage.sendErrorMessage(lineNumber, ErrorType.IfStatements, IfErrorType.unknownFormat.ToString(), null);
            }

            if (logicOrder [logicOrder.Length - 1].currentType != WordTypes.indentOperator)
            {
                ErrorMessage.sendErrorMessage(lineNumber, ErrorType.IfStatements, IfErrorType.missingIndentOperator.ToString(), null);
            }


            Logic[] statementLogic = InternalParseFunctions.getSubArray(logicOrder, 1, logicOrder.Length - 2, lineNumber);
            (logicOrder [0] as ScopeStarter).doEnterScope = StatementParser.parseAndCheckStatement(statementLogic, lineNumber, currentScope);
            (logicOrder [0] as ComparisonScope).initNextstatement();

            if (logicOrder[0] is IfStatement)
            {
                return(logicOrder[0] as IfStatement);
            }

            return(logicOrder[0] as ElifStatement);
        }