public Type getType(Environment<Type> env) throws TypeIllegalException,
			TypeEnvironmentException {
		Token op = getChild(1).jjtGetFirstToken();

		Type left = getChild(0).getType(env);
		Type right = getChild(2).getType(env);

		if (op.kind == PseuCoParserConstants.PLUSASSIGN) {
			if (right.getKind() == Type.STRING) {
				if (left.getKind() != Type.STRING)
					throw new TypeIllegalException(left, "You tried to assign "
							+ right + " to " + left, getChild(2)
							.jjtGetFirstToken());
			} else if (right.getKind() == Type.INT) {
				if (left.getKind() != Type.INT && left.getKind() != Type.STRING)
					throw new TypeIllegalException(left, "You tried to assign "
							+ right + " to " + left, getChild(2)
							.jjtGetFirstToken());
			} else
				throw new TypeIllegalException(left,
						"Operator \"+=\" is only allowed with integers and strings, but not "
								+ right, jjtGetFirstToken());

			return left;
		} else if (op.kind != PseuCoParserConstants.ASSIGN) {
			if (left.getKind() != Type.INT)
				throw new TypeIllegalException(left, "Operator \"" + op.image
						+ "\" is only allowed with integers, but not " + left,
						jjtGetFirstToken());
		}

		if (!right.isAssignableTo(left))
			throw new TypeIllegalException(right, "You tried to assign "
					+ right + " to " + left, getChild(2).jjtGetFirstToken());

		return left;
	}