コード例 #1
0
        // 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);
        }
コード例 #2
0
        public static BoolAlgebraWord[] parseIntoBoolAlgebra(Logic[] logicOrder, int lineNumber, Scope currentScope)
        {
            List <BoolAlgebraWord> algebraList = new List <BoolAlgebraWord> ();

            int lastOperatorPos = -1;

            for (int i = 0; i < logicOrder.Length; i++)
            {
                if (logicOrder [i] is AndOrOperator)
                {
                    Logic[] partStatement = InternalParseFunctions.getSubArray(logicOrder, lastOperatorPos + 1, i - 1, lineNumber);

                    bool tempResult = StatementParser.parseExpression(partStatement, lineNumber, currentScope);
                    algebraList.Add(new BoolAlgebraWord(tempResult.ToString()));
                    algebraList.Add(new BoolAlgebraWord(logicOrder [i].word));

                    lastOperatorPos = i;
                }
            }


            Logic[] finalStatement = InternalParseFunctions.getSubArray(logicOrder, lastOperatorPos + 1, logicOrder.Length - 1, lineNumber);
            bool    finalResult    = StatementParser.parseExpression(finalStatement, lineNumber, currentScope);

            algebraList.Add(new BoolAlgebraWord(finalResult.ToString()));

            return(algebraList.ToArray());
        }
コード例 #3
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);
        }
コード例 #4
0
 public BooleanValue parseExpression()
 {
     return(new BooleanValue(StatementParser.parseStatement(logicOrder, lineNumber, currentScope)));
 }
コード例 #5
0
 public bool makeComparison(int lineNumber, bool changeValue = true)
 {
     return(StatementParser.parseStatement(theStatement, lineNumber, getTargetScope()));
 }