private Expression ParseTarget() {
Token t = PeekToken();
switch (t.Kind) {
case TokenKind.LeftParenthesis: // parenth_form or generator_expression
case TokenKind.LeftBracket: // list_display
Eat(t.Kind);
bool trailingComma;
Expression res = MakeTupleOrExpr(ParseTargetList(out trailingComma), trailingComma);
if (t.Kind == TokenKind.LeftParenthesis) {
Eat(TokenKind.RightParenthesis);
} else {
Eat(TokenKind.RightBracket);
}
return res;
default: // identifier, attribute ref, subscription, slicing
return AddTrailers(ParsePrimary(), false);
}
}