private Statement arrayStatment(String varName, Vector<Expression> expressions,
	                                Vector<Integer> lengths, OperationExpression rhs) {
		int[] indexes = new int[lengths.size()];

		for (int i = 0; i < lengths.size(); i++)
			indexes[i] = 0;

		BlockStatement statement = new BlockStatement();
		String[] varNameSplited = varName.split("\\$");

		@SuppressWarnings("unused")
		int lengthOfLast =
			lengths.elementAt(lengths.size() - 1);

		do {
			String str = new String();

			for (int i = 0; i < indexes.length; i++)
				str += (varNameSplited[i] + indexes[i]);

			if (varNameSplited.length > indexes.length) {
				str += varNameSplited[varNameSplited.length - 1];
			}

			BinaryOpExpression op =
				new BinaryOpExpression(new EqualOperator(),
				                       new IntConstant(BigInteger.valueOf(indexes[0])),
				                       expressions.elementAt(0));

			for (int i = 1; i < indexes.length; i++) {
				BinaryOpExpression op2 =
					new BinaryOpExpression(new EqualOperator(),
					                       new IntConstant(BigInteger.valueOf(indexes[i])),
					                       expressions.elementAt(i));
				op = new BinaryOpExpression(new PrimitiveOperator(PrimitiveOperator.AND_OP),
					                        op, op2);
			}

			statement.addStatement(new IfStatement(op,
			                                       new AssignmentStatement(Function.getVar(str),
			                                                               rhs),
			                                       null));
		} while (advanceIndexes(indexes, lengths));

		return statement;
	}