diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
index 65ea8df..9d489e0 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
@@ -121,18 +121,22 @@
     Object rval = rhs.eval(env);
 
     switch (operator) {
-      case PLUS: {
+      case PLUS:
         return plus(lval, rval);
-      }
 
-      case MINUS: {
+      case PIPE:
+        if (lval instanceof SkylarkNestedSet) {
+          return new SkylarkNestedSet((SkylarkNestedSet) lval, rval, getLocation());
+        }
+        break;
+
+      case MINUS:
         if (lval instanceof Integer && rval instanceof Integer) {
           return ((Integer) lval).intValue() - ((Integer) rval).intValue();
         }
         break;
-      }
 
-      case MULT: {
+      case MULT:
         // int * int
         if (lval instanceof Integer && rval instanceof Integer) {
           return ((Integer) lval).intValue() * ((Integer) rval).intValue();
@@ -148,9 +152,8 @@
           return Strings.repeat((String) rval, ((Integer) lval).intValue());
         }
         break;
-      }
 
-      case DIVIDE: {
+      case DIVIDE:
         // int / int
         if (lval instanceof Integer && rval instanceof Integer) {
           if (rval.equals(0)) {
@@ -163,9 +166,9 @@
           // We want to follow Python semantics, so we use float division and round down.
           return (int) Math.floor(new Double((Integer) lval) / (Integer) rval);
         }
-      }
+        break;
 
-      case PERCENT: {
+      case PERCENT:
         // int % int
         if (lval instanceof Integer && rval instanceof Integer) {
           if (rval.equals(0)) {
@@ -207,43 +210,33 @@
           }
         }
         break;
-      }
 
-      case EQUALS_EQUALS: {
+      case EQUALS_EQUALS:
         return lval.equals(rval);
-      }
 
-      case NOT_EQUALS: {
+      case NOT_EQUALS:
         return !lval.equals(rval);
-      }
 
-      case LESS: {
+      case LESS:
         return compare(lval, rval) < 0;
-      }
 
-      case LESS_EQUALS: {
+      case LESS_EQUALS:
         return compare(lval, rval) <= 0;
-      }
 
-      case GREATER: {
+      case GREATER:
         return compare(lval, rval) > 0;
-      }
 
-      case GREATER_EQUALS: {
+      case GREATER_EQUALS:
         return compare(lval, rval) >= 0;
-      }
 
-      case IN: {
+      case IN:
         return evalIn(lval, rval);
-      }
 
-      case NOT_IN: {
+      case NOT_IN:
         return !evalIn(lval, rval);
-      }
 
-      default: {
+      default:
         throw new AssertionError("Unsupported binary operator: " + operator);
-      }
     } // endswitch
 
     // NB: this message format is identical to that used by CPython 2.7.6 or 3.4.0,
@@ -310,6 +303,7 @@
           getLocation());
     }
 
+    // TODO(bazel-team): Remove this case. Union of sets should use '|' instead of '+'.
     if (lval instanceof SkylarkNestedSet) {
       return new SkylarkNestedSet((SkylarkNestedSet) lval, rval, getLocation());
     }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java b/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
index 90b40e3..9d14886 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
@@ -698,6 +698,10 @@
         addToken(new Token(TokenKind.MINUS, pos - 1, pos));
         break;
       }
+      case '|': {
+        addToken(new Token(TokenKind.PIPE, pos - 1, pos));
+        break;
+      }
       case '=': {
         addToken(new Token(TokenKind.EQUALS, pos - 1, pos));
         break;
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Operator.java b/src/main/java/com/google/devtools/build/lib/syntax/Operator.java
index 73b37cf..218eee8 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Operator.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Operator.java
@@ -33,6 +33,7 @@
   NOT_IN("not in"),
   OR("or"),
   PERCENT("%"),
+  PIPE("|"),
   PLUS("+");
 
   private final String name;
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
index 8f59047..6334673 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -134,6 +134,7 @@
           .put(TokenKind.PERCENT, Operator.PERCENT)
           .put(TokenKind.SLASH, Operator.DIVIDE)
           .put(TokenKind.PLUS, Operator.PLUS)
+          .put(TokenKind.PIPE, Operator.PIPE)
           .put(TokenKind.STAR, Operator.MULT)
           .build();
 
@@ -151,6 +152,7 @@
       EnumSet.of(Operator.NOT),
       EnumSet.of(Operator.EQUALS_EQUALS, Operator.NOT_EQUALS, Operator.LESS, Operator.LESS_EQUALS,
           Operator.GREATER, Operator.GREATER_EQUALS, Operator.IN, Operator.NOT_IN),
+      EnumSet.of(Operator.PIPE),
       EnumSet.of(Operator.MINUS, Operator.PLUS),
       EnumSet.of(Operator.DIVIDE, Operator.MULT, Operator.PERCENT));
 
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java b/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java
index 0ada226..18ba037 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/TokenKind.java
@@ -67,6 +67,7 @@
   OUTDENT("outdent"),
   PASS("pass"),
   PERCENT("%"),
+  PIPE("|"),
   PLUS("+"),
   PLUS_EQUALS("+="),
   RAISE("raise"),
