function ForCommand(args, define) {
    var lowerArgs = args.toLowerCase();
    var toIndex = lowerArgs.indexOf(' to ');
    if (toIndex === -1) throw new SyntaxError('FOR has no TO');
    var assignmentText = args.substring(0, toIndex).trim();

    var stepIndex = lowerArgs.indexOf(' step ');
    var upperLimitText, stepText;
    if (stepIndex === -1) {
        upperLimitText = args.substring(toIndex + 4).trim();
        stepText = '1';
    } else {
        upperLimitText = args.substring(toIndex + 4, stepIndex).trim();
        stepText = args.substring(stepIndex + 6).trim();
    }

    var assignmentEquals = assignmentText.indexOf('=');
    if (assignmentEquals === -1) throw new SyntaxError('Expected assignment');
    var variableName = assignmentText.substring(0, assignmentEquals).trim();
    var equalsExpression = assignmentText.substring(assignmentEquals + 1).trim();
    var assignmentExpr = new statements.AssignmentStatement(
            new statements.VariableStatement(variableName),
            new statements.ExpressionStatement(equalsExpression, define)
    );

    var upperLimitExpr = new statements.ExpressionStatement(upperLimitText, define);
    if (upperLimitExpr.error) throw upperLimitExpr.error;

    var stepExpr = new statements.ExpressionStatement(stepText, define);
    if (stepExpr.error) throw stepExpr.error;

    this.assignmentExpr = assignmentExpr;
    this.upperLimitExpr = upperLimitExpr;
    this.stepExpr = stepExpr;

    this.block = define({
        start: 'FOR',
        end: 'NEXT'
    });

    this.loopCount = 0;
}
function ForCommand(args, define) {
    var lowerArgs = args.toLowerCase();
    var toIndex = lowerArgs.indexOf(' to ');
    if (toIndex === -1) throw new SyntaxError('FOR has no TO');
    var assignmentText = args.substring(0, toIndex).trim();

    var stepIndex = lowerArgs.indexOf(' step ');
    var upperLimitText, stepText;
    if (stepIndex === -1) {
        upperLimitText = args.substring(toIndex + 4).trim();
        stepText = '1';
    } else {
        upperLimitText = args.substring(toIndex + 4, stepIndex).trim();
        stepText = args.substring(stepIndex + 6).trim();
    }

    var assignmentEquals = assignmentText.indexOf('=');
    if (assignmentEquals === -1) throw new SyntaxError('Expected assignment');
    var variableName = assignmentText.substring(0, assignmentEquals).trim();
    var equalsExpression = assignmentText.substring(assignmentEquals + 1).trim();
    var assignmentExpr = new statements.AssignmentStatement(
            new statements.VariableStatement(variableName),
            new statements.ExpressionStatement(equalsExpression, define)
    );

    var upperLimitExpr = new statements.ExpressionStatement(upperLimitText, define);
    if (upperLimitExpr.error) throw upperLimitExpr.error;

    var stepExpr = new statements.ExpressionStatement(stepText, define);
    if (stepExpr.error) throw stepExpr.error;

    this.assignmentExpr = assignmentExpr;
    this.upperLimitExpr = upperLimitExpr;
    this.stepExpr = stepExpr;

    this.block = define({
        start: 'FOR',
        end: 'NEXT'
    });

    this.loopCount = 0;
}
function ForCommand ( args , define ) { var lowerArgs = args . toLowerCase ( ) ; var toIndex = lowerArgs . indexOf ( ' to ' ) ; if ( toIndex === - 1 ) throw new SyntaxError ( 'FOR has no TO' ) ; var assignmentText = args . substring ( 0 , toIndex ) . trim ( ) ; var stepIndex = lowerArgs . indexOf ( ' step ' ) ; var upperLimitText , stepText ; if ( stepIndex === - 1 ) { upperLimitText = args . substring ( toIndex + 4 ) . trim ( ) ; stepText = '1' ; } else { upperLimitText = args . substring ( toIndex + 4 , stepIndex ) . trim ( ) ; stepText = args . substring ( stepIndex + 6 ) . trim ( ) ; } var assignmentEquals = assignmentText . indexOf ( '=' ) ; if ( assignmentEquals === - 1 ) throw new SyntaxError ( 'Expected assignment' ) ; var variableName = assignmentText . substring ( 0 , assignmentEquals ) . trim ( ) ; var equalsExpression = assignmentText . substring ( assignmentEquals + 1 ) . trim ( ) ; var assignmentExpr = new statements . AssignmentStatement ( new statements . VariableStatement ( variableName ) , new statements . ExpressionStatement ( equalsExpression , define ) ) ; var upperLimitExpr = new statements . ExpressionStatement ( upperLimitText , define ) ; if ( upperLimitExpr . error ) throw upperLimitExpr . error ; var stepExpr = new statements . ExpressionStatement ( stepText , define ) ; if ( stepExpr . error ) throw stepExpr . error ; this . assignmentExpr = assignmentExpr ; this . upperLimitExpr = upperLimitExpr ; this . stepExpr = stepExpr ; this . block = define ( { start : 'FOR' , end : 'NEXT' } ) ; this . loopCount = 0 ; }
Iterates over the body a certain amount of times

@param {String} args The arguments to the command
@param {Function} define
@constructor
Iterates over the body a certain amount of times