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