void (SyntaxTreeBuilder.Marker exprStart, SyntaxTreeBuilder.Marker sliceItemStart) { myBuilder.advanceLexer(); if (atToken(PyTokenTypes.RBRACKET)) { SyntaxTreeBuilder.Marker sliceMarker = myBuilder.mark(); sliceMarker.done(PyElementTypes.EMPTY_EXPRESSION); sliceItemStart.done(PyElementTypes.SLICE_ITEM); nextToken(); exprStart.done(PyElementTypes.SLICE_EXPRESSION); return; } else { if (atToken(PyTokenTypes.COLON)) { SyntaxTreeBuilder.Marker sliceMarker = myBuilder.mark(); sliceMarker.done(PyElementTypes.EMPTY_EXPRESSION); } else { parseSingleExpression(false); } if (!BRACKET_COLON_COMMA.contains(myBuilder.getTokenType())) { myBuilder.error(message("PARSE.expected.colon.or.rbracket")); } if (matchToken(PyTokenTypes.COLON)) { parseSingleExpression(false); } sliceItemStart.done(PyElementTypes.SLICE_ITEM); if (!BRACKET_OR_COMMA.contains(myBuilder.getTokenType())) { myBuilder.error(message("rbracket.or.comma.expected")); } } parseSliceListTail(exprStart, null); }