diff --git a/cmd/cue/cmd/import.go b/cmd/cue/cmd/import.go
index 5ead4fd..b42a788 100644
--- a/cmd/cue/cmd/import.go
+++ b/cmd/cue/cmd/import.go
@@ -405,21 +405,6 @@
 				case *ast.Ident, *ast.BasicLit:
 					pathElems = append(pathElems, x)
 
-				case *ast.ExprLabel:
-					v := inst.Eval(x.Label)
-					switch v.Kind() {
-					case cue.StringKind:
-						pathElems = append(pathElems, v.Syntax().(ast.Label))
-					case cue.NullKind,
-						cue.NumberKind,
-						cue.BoolKind:
-						pathElems = append(pathElems, newString(fmt.Sprint(v)))
-					case cue.BottomKind:
-						return v.Err()
-					default:
-						return fmt.Errorf("expression %q in path is not a label", internal.DebugStr(v.Syntax()))
-					}
-
 				case *ast.TemplateLabel:
 					return fmt.Errorf("template labels not supported in path flag")
 				}
diff --git a/cmd/cue/cmd/testdata/trim/trim.cue b/cmd/cue/cmd/testdata/trim/trim.cue
index 816af3f..db0ca2e 100644
--- a/cmd/cue/cmd/testdata/trim/trim.cue
+++ b/cmd/cue/cmd/testdata/trim/trim.cue
@@ -7,7 +7,7 @@
 	b: string
 	d: 8
 	e: "foo"
-	f: ">> \( _value ) <<"
+	f: ">> \( _value) <<"
 	n: 5
 
 	list: ["foo", 8.0]
@@ -62,7 +62,7 @@
 
 // TODO: top-level fields are currently not removed.
 group: {
-	comp [k]: v for k, v in foo
+	comp "\(k)": v for k, v in foo
 
 	comp bar: {
 		a:  4
@@ -70,4 +70,4 @@
 	}
 
 	comp baz: {} // removed: fully implied by comprehension above
-}
\ No newline at end of file
+}
diff --git a/cmd/cue/cmd/testdata/trim/trim.out b/cmd/cue/cmd/testdata/trim/trim.out
index 73f746e..70677ac 100644
--- a/cmd/cue/cmd/testdata/trim/trim.out
+++ b/cmd/cue/cmd/testdata/trim/trim.out
@@ -51,7 +51,7 @@
 
 // TODO: top-level fields are currently not removed.
 group: {
-	comp [k]: v for k, v in foo
+	comp "\(k)": v for k, v in foo
 
 	comp bar: {
 		aa: 8 // new value
diff --git a/cue/ast.go b/cue/ast.go
index 8739f0a..dcb8d1c 100644
--- a/cue/ast.go
+++ b/cue/ast.go
@@ -218,10 +218,6 @@
 			yielder.key = v.walk(x)
 			yielder.value = v.walk(field.Value)
 
-		case *ast.ExprLabel:
-			yielder.key = v.walk(x.Label)
-			yielder.value = v.walk(field.Value)
-
 		case *ast.TemplateLabel:
 			f := v.label(x.Ident.Name, true)
 
@@ -263,16 +259,6 @@
 			yielder.value = v.walk(n.Value)
 			v.comprehensions = append(v.comprehensions, sc)
 
-		case *ast.ExprLabel:
-			yielder := &yield{baseValue: newNode(x.Label)}
-			sc := &structComprehension{
-				baseValue: newDecl(n),
-				clauses:   yielder,
-			}
-			yielder.key = v.walk(x.Label)
-			yielder.value = v.walk(n.Value)
-			v.comprehensions = append(v.comprehensions, sc)
-
 		case *ast.TemplateLabel:
 			f := v.label(x.Ident.Name, true)
 
@@ -332,8 +318,6 @@
 		yielder.value = v.walk(n.Expr)
 		return lc
 
-	case *ast.ExprLabel:
-
 	// Expressions
 	case *ast.Ident:
 		if n.Node == nil {
diff --git a/cue/ast/ast.go b/cue/ast/ast.go
index cea67d9..64ac5fb 100644
--- a/cue/ast/ast.go
+++ b/cue/ast/ast.go
@@ -120,18 +120,12 @@
 func (n *Interpolation) labelName() (string, bool) {
 	return "", false
 }
-func (n *ExprLabel) labelName() (string, bool) {
-	return "", false
-}
 
 // LabelName reports the name of a label, if known, and whether it is valid.
 func LabelName(x Label) (name string, ok bool) {
 	return x.labelName()
 }
 
-// As for now, a ExprLabel is not a label, as it can only use used in
-// struct comprehensions.
-
 // Clause nodes are part of comprehensions.
 type Clause interface {
 	Node
@@ -375,14 +369,6 @@
 	Rangle token.Pos
 }
 
-// An ExprLabel is an expression to create a label in struct comprehensions.
-type ExprLabel struct {
-	comments
-	Lbrack token.Pos
-	Label  Expr
-	Rbrack token.Pos
-}
-
 // An Ellipsis node stands for the "..." type in a
 // parameter list or the "..." length in an array type.
 type Ellipsis struct {
@@ -515,7 +501,6 @@
 func (x *BadExpr) Pos() token.Pos       { return x.From }
 func (x *Ident) Pos() token.Pos         { return x.NamePos }
 func (x *TemplateLabel) Pos() token.Pos { return x.Langle }
-func (x *ExprLabel) Pos() token.Pos     { return x.Lbrack }
 func (x *Ellipsis) Pos() token.Pos      { return x.Ellipsis }
 func (x *BasicLit) Pos() token.Pos      { return x.ValuePos }
 func (x *Interpolation) Pos() token.Pos { return x.Elts[0].Pos() }
@@ -544,7 +529,6 @@
 	return x.NamePos.Add(len(x.Name))
 }
 func (x *TemplateLabel) End() token.Pos { return x.Rangle }
-func (x *ExprLabel) End() token.Pos     { return x.Rbrack }
 func (x *Ellipsis) End() token.Pos {
 	if x.Elt != nil {
 		return x.Elt.End()
diff --git a/cue/ast/walk.go b/cue/ast/walk.go
index be492e3..b505d75 100644
--- a/cue/ast/walk.go
+++ b/cue/ast/walk.go
@@ -108,9 +108,6 @@
 	case *BottomLit, *BadExpr, *Ident, *BasicLit:
 		// nothing to do
 
-	case *ExprLabel:
-		walk(v, n.Label)
-
 	case *TemplateLabel:
 		walk(v, n.Ident)
 
diff --git a/cue/ast_test.go b/cue/ast_test.go
index 1f6ae18..bbee836 100644
--- a/cue/ast_test.go
+++ b/cue/ast_test.go
@@ -204,20 +204,20 @@
 		out: `<0>{a: <1>{<>: <2>(name: string)-><3>{n: <2>.name}, k: 1}, b: <4>{<>: <5>(x: string)-><6>{x: 0, y: 1}, v: <7>{}}}`,
 	}, {
 		in: `
-		a: { [k]: v for k, v in b if b.a < k }
+		a: { "\(k)": v for k, v in b if b.a < k }
 		b: {
 			a: 1
 			b: 2
 			c: 3
 		}
 		`,
-		out: `<0>{a: { <1>for k, v in <0>.b if (<0>.b.a < <1>.k) yield (<1>.k): <1>.v }, b: <2>{a: 1, b: 2, c: 3}}`,
+		out: `<0>{a: { <1>for k, v in <0>.b if (<0>.b.a < <1>.k) yield (""+<1>.k+""): <1>.v }, b: <2>{a: 1, b: 2, c: 3}}`,
 	}, {
 		in: `
-			a: { [v]: v for k, v in b }
+			a: { "\(v)": v for k, v in b }
 			b: { a: "aa", b: "bb", c: "cc" }
 			`,
-		out: `<0>{a: { <1>for k, v in <0>.b yield (<1>.v): <1>.v }, b: <2>{a: "aa", b: "bb", c: "cc"}}`,
+		out: `<0>{a: { <1>for k, v in <0>.b yield (""+<1>.v+""): <1>.v }, b: <2>{a: "aa", b: "bb", c: "cc"}}`,
 	}, {
 		in: `
 			a: [ v for _, v in b ]
diff --git a/cue/builtins.go b/cue/builtins.go
index b7c920f..62a0ed0 100644
--- a/cue/builtins.go
+++ b/cue/builtins.go
@@ -8,14 +8,10 @@
 	"crypto/sha1"
 	"crypto/sha256"
 	"crypto/sha512"
-	"cuelang.org/go/cue/parser"
-	"cuelang.org/go/cue/token"
-	"cuelang.org/go/internal/third_party/yaml"
 	"encoding/csv"
 	"encoding/hex"
 	"encoding/json"
 	"fmt"
-	goyaml "github.com/ghodss/yaml"
 	"html"
 	"io"
 	"math"
@@ -28,6 +24,11 @@
 	"text/tabwriter"
 	"text/template"
 	"unicode"
+
+	"cuelang.org/go/cue/parser"
+	"cuelang.org/go/cue/token"
+	"cuelang.org/go/internal/third_party/yaml"
+	goyaml "github.com/ghodss/yaml"
 )
 
 func init() {
diff --git a/cue/format/node.go b/cue/format/node.go
index cb138c7..537e3e9 100644
--- a/cue/format/node.go
+++ b/cue/format/node.go
@@ -272,11 +272,6 @@
 	case *ast.Interpolation:
 		f.expr(n)
 
-	case *ast.ExprLabel:
-		f.print(n.Lbrack, token.LBRACK, indent)
-		f.expr(n.Label)
-		f.print(unindent, n.Rbrack, token.RBRACK)
-
 	default:
 		panic(fmt.Sprintf("unknown label type %T", n))
 	}
diff --git a/cue/format/testdata/expressions.golden b/cue/format/testdata/expressions.golden
index 7754540..2300559 100644
--- a/cue/format/testdata/expressions.golden
+++ b/cue/format/testdata/expressions.golden
@@ -103,21 +103,21 @@
 		for x in someObject
 		if x > 9
 	]
+	"\(k)": v for k, v in someObject
 
-	[k]: v for k, v in someObject
-	[k]: v <-
+	"\(k)": v <-
 		for k, v in someObject
 
-	e: {[k]: v <-
+	e: {"\(k)": v <-
 			for k, v in someObject
 			if k > "a"
 	}
 
-	e: {[k]: v for k, v in someObject if k > "a"}
-	e: {[k]: v <-
+	e: {"\(k)": v for k, v in someObject if k > "a"}
+	e: {"\(k)": v <-
 			for k, v in someObject if k > "a"}
 
-	e: {[k]: v <-
+	e: {"\(k)": v <-
 			for k, v in someObject
 			if k > "a"}
 
diff --git a/cue/format/testdata/expressions.input b/cue/format/testdata/expressions.input
index 9fba541..d330b86 100644
--- a/cue/format/testdata/expressions.input
+++ b/cue/format/testdata/expressions.input
@@ -103,21 +103,21 @@
     for x in someObject
     if x > 9
     ]
+    "\(k)": v for k, v in someObject
 
-    [k]: v for k, v in someObject
-    [k]: v <-
+    "\(k)": v <-
     for k, v in someObject
 
-    e: { [k]:v <-
+    e: { "\(k)":v <-
     for k, v in someObject
     if k > "a"
     }
 
-    e: { [k]:v for k, v in someObject if k > "a"}
-    e: { [k]:v <-
+    e: { "\(k)":v for k, v in someObject if k > "a"}
+    e: { "\(k)":v <-
     for k, v in someObject if k > "a"}
     
-    e: { [k]:v <-
+    e: { "\(k)":v <-
     for k, v in someObject
     if k > "a"}
 
diff --git a/cue/parser/interface.go b/cue/parser/interface.go
index 140f140..3c62eb6 100644
--- a/cue/parser/interface.go
+++ b/cue/parser/interface.go
@@ -54,6 +54,7 @@
 	return ioutil.ReadFile(filename)
 }
 
+// Option specifies a parse option.
 type Option func(p *parser)
 
 var (
diff --git a/cue/parser/parser.go b/cue/parser/parser.go
index fc12092..52a7fcb 100644
--- a/cue/parser/parser.go
+++ b/cue/parser/parser.go
@@ -884,19 +884,6 @@
 		c.closeNode(p, label)
 		f.Label = label
 
-	case token.LBRACK:
-		expr = p.parseList()
-		list, ok := expr.(*ast.ListLit)
-		if ok && len(list.Elts) == 1 && list.Ellipsis == token.NoPos {
-			f.Label = &ast.ExprLabel{
-				Lbrack: list.Lbrack,
-				Label:  list.Elts[0],
-				Rbrack: list.Rbrack,
-			}
-			break
-		}
-
-		fallthrough
 	default:
 		return expr, false
 	}
@@ -1235,8 +1222,9 @@
 	cc := p.openComments()
 
 	lit := p.lit
+	pos := p.pos
 	p.next()
-	last := &ast.BasicLit{ValuePos: p.pos, Kind: token.STRING, Value: lit}
+	last := &ast.BasicLit{ValuePos: pos, Kind: token.STRING, Value: lit}
 	exprs := []ast.Expr{last}
 
 	quote := rune(lit[0])
@@ -1257,9 +1245,10 @@
 			p.error(p.pos, "expected ')' for string interpolation")
 		}
 		lit = p.scanner.ResumeInterpolation(quote, numQuotes)
+		pos = p.pos
 		p.next()
 		last = &ast.BasicLit{
-			ValuePos: p.pos,
+			ValuePos: pos,
 			Kind:     token.STRING,
 			Value:    lit,
 		}
diff --git a/cue/parser/print.go b/cue/parser/print.go
index e9ebd55..b02efcc 100644
--- a/cue/parser/print.go
+++ b/cue/parser/print.go
@@ -156,12 +156,6 @@
 	case *ast.Ident:
 		return v.Name
 
-	case *ast.ExprLabel:
-		out := "["
-		out += debugStr(v.Label)
-		out += "]"
-		return out
-
 	case *ast.TemplateLabel:
 		out := "<"
 		out += debugStr(v.Ident)
diff --git a/cue/parser/resolve.go b/cue/parser/resolve.go
index 32eb7e5..1ce01b2 100644
--- a/cue/parser/resolve.go
+++ b/cue/parser/resolve.go
@@ -120,8 +120,6 @@
 		switch label := x.Label.(type) {
 		case *ast.Interpolation:
 			walk(s, label)
-		case *ast.ExprLabel:
-			walk(s, x.Label)
 		case *ast.TemplateLabel:
 			s := newScope(s.file, s, x, nil)
 			name, _ := ast.LabelName(label)
diff --git a/cue/parser/walk.go b/cue/parser/walk.go
index 39ec801..1765ee8 100644
--- a/cue/parser/walk.go
+++ b/cue/parser/walk.go
@@ -102,9 +102,6 @@
 	case *ast.BottomLit, *ast.BadExpr, *ast.Ident, *ast.BasicLit:
 		// nothing to do
 
-	case *ast.ExprLabel:
-		walk(v, n.Label)
-
 	case *ast.TemplateLabel:
 		walk(v, n.Ident)
 
diff --git a/cue/resolve_test.go b/cue/resolve_test.go
index e213760..6f9f12d 100644
--- a/cue/resolve_test.go
+++ b/cue/resolve_test.go
@@ -998,7 +998,7 @@
 	}, {
 		desc: "resolutions in struct comprehension keys",
 		in: `
-			a: { [b + "."]: "a" for _, b in ["c"] }
+			a: { "\(b + ".")": "a" for _, b in ["c"] }
 			`,
 		out: `<0>{a: <1>{c.: "a"}}`,
 	}, {
diff --git a/cue/types_test.go b/cue/types_test.go
index c130d66..dfb77c0 100644
--- a/cue/types_test.go
+++ b/cue/types_test.go
@@ -567,7 +567,7 @@
 		value: `{_a:"a"}`,
 		res:   "{}",
 	}, {
-		value: `{[k]: v for k, v in y if v > 1}
+		value: `{"\(k)": v for k, v in y if v > 1}
 		y: {a:1,b:2,c:3}`,
 		res: "{b:2,c:3,}",
 	}, {
@@ -835,7 +835,7 @@
 		dst:   &fields{},
 		want:  &fields{A: 1, B: 2, C: 3},
 	}, {
-		value: `{[k]: v for k, v in y if v > 1}
+		value: `{"\(k)": v for k, v in y if v > 1}
 		y: {a:1,b:2,c:3}`,
 		dst:  &fields{},
 		want: &fields{B: 2, C: 3},
