public object visitStmtWhileStmt(StmtWhile stmt) { while (isTruthy(evaluate(stmt.condition))) { execute(stmt.body); } return(null); }
Stmt forStatement() { consume(TokenType.LEFT_PAREN, "Expected '(' after 'for'."); Stmt initStmt; if (match(TokenType.SEMICOLON)) { initStmt = null; } else if (match(TokenType.VAR)) { initStmt = varDeclaration(); } else { initStmt = exprStatement(); } Expr condition = null; if (!check(TokenType.SEMICOLON)) { condition = expression(); } consume(TokenType.SEMICOLON, "Expected ';' after loop condition"); Expr increment = null; if (!check(TokenType.RIGHT_PAREN)) { increment = expression(); } consume(TokenType.RIGHT_PAREN, "Expected ')' after for clauses"); Stmt body = statement(); if (increment != null) { body = new StmtBlock(new List <Stmt>() { body, new StmtExpression(increment) }); } if (condition == null) { condition = new ExprLiteral(true); } body = new StmtWhile(condition, body); if (initStmt != null) { body = new StmtBlock(new List <Stmt>() { initStmt, body }); } return(body); }
public object visitStmtWhileStmt(StmtWhile stmt) { resolve(stmt.condition); resolve(stmt.body); return(null); }