docs: @SuppressWarnings("checkstyle:cyclomaticcomplexity")
  	protected XExpression _generate(XBinaryOperation operation, IAppendable it, IExtraLanguageGeneratorContext context) {
  		appendReturnIfExpectedReturnedExpression(it, context);
  		final String operator = getOperatorSymbol(operation);
  		if (operator != null) {
  			it.append("("); //$NON-NLS-1$
  			generate(operation.getLeftOperand(), it, context);
  			switch (operator) {
  			case "-": //$NON-NLS-1$
  			case "+": //$NON-NLS-1$
  			case "*": //$NON-NLS-1$
  			case "/": //$NON-NLS-1$
  			case "%": //$NON-NLS-1$
  			case "-=": //$NON-NLS-1$
  			case "+=": //$NON-NLS-1$
  			case "*=": //$NON-NLS-1$
  			case "/=": //$NON-NLS-1$
  			case "%=": //$NON-NLS-1$
  			case "<": //$NON-NLS-1$
  			case ">": //$NON-NLS-1$
  			case "<=": //$NON-NLS-1$
  			case ">=": //$NON-NLS-1$
  			case "==": //$NON-NLS-1$
  			case "!=": //$NON-NLS-1$
  			case "<<": //$NON-NLS-1$
  			case ">>": //$NON-NLS-1$
  				it.append(" ").append(operator).append(" "); //$NON-NLS-1$ //$NON-NLS-2$
  				break;
  			case "&&": //$NON-NLS-1$
  				it.append(" and "); //$NON-NLS-1$
  				break;
  			case "||": //$NON-NLS-1$
  				it.append(" or "); //$NON-NLS-1$
  				break;
  			case "===": //$NON-NLS-1$
  				it.append(" is "); //$NON-NLS-1$
  				break;
  			case "!==": //$NON-NLS-1$
  				it.append(" is not "); //$NON-NLS-1$
  				break;
  			default:
  				throw new IllegalArgumentException(MessageFormat.format(Messages.PyExpressionGenerator_0, operator));
  			}
  			generate(operation.getRightOperand(), it, context);
  			it.append(")"); //$NON-NLS-1$
  		}
  		return operation;
  	}