private DoWhileNode DoWhile() throws SyntaxException {
        try {
            Position pos = iterator.current().coordinates().starting();
            nextToken();

            BlockNode<Statement> block = Code();
            ExpressionNode cond = null;
            if (checkTokens(iterator.current(), Token.Type.WHILE)) {
                nextToken();

                LeftBracket();
                cond = Expression();
                RightBracket();
            }

            return new DoWhileNode(cond, block, pos);
        } catch(SyntaxException ex) {
            throw ex;
        } catch(Exception ex) {
            throw (NonAnalysisException)new NonAnalysisException(ex)
                    .initPosition(iterator.current().coordinates().starting())
                    .Log("ru.bmstu.iu9.compiler.syntax");
        }
    }