Index: src/Boo.AntlrParser/boo.g
===================================================================
--- src/Boo.AntlrParser/boo.g	(revision 1250)
+++ src/Boo.AntlrParser/boo.g	(working copy)
@@ -1900,12 +1900,55 @@
 	;
 	
 protected
-slicing_expression returns [Expression e]
+slice returns [Slice slice]
 	{
-		e = null;
+		slice = null;
 		Expression begin = null;
 		Expression end = null;
 		Expression step = null;		
+	} :
+	(
+		( 
+			// [:
+			COLON { begin = OmittedExpression.Default; }
+			(
+				// [:end]
+				end=expression
+				|
+				(
+					// [::step]
+					COLON { end = OmittedExpression.Default; }
+					step=expression
+				)
+				|
+				// [:]
+			)			
+		) |
+		// [begin
+		begin=expression
+		(
+			// [begin:
+			COLON
+			(
+				end=expression | { end = OmittedExpression.Default; } 
+			)
+			(
+				COLON
+				step=expression
+			)?
+		)?
+	)
+	{
+		slice = new Slice(begin, end, step);
+	}
+	;
+
+protected
+slicing_expression returns [Expression e]
+	{
+		e = null;
+		Slice item = null;
+		SlicingExpression se = null;
 		MethodInvocationExpression mce = null;
 		Token memberName = null;
 	} :
@@ -1915,43 +1958,22 @@
 			lbrack:LBRACK
 			(
 				( 
-					// [:
-					COLON { begin = OmittedExpression.Default; }
+					item=slice
 					(
-						// [:end]
-						end=expression
-						|
+						{
+							se = new SlicingExpression(ToLexicalInfo(lbrack));
+							se.Target = e;
+							se.Indices.Add(item);
+							e = se;
+						}
 						(
-							// [::step]
-							COLON { end = OmittedExpression.Default; }
-							step=expression
-						)
-						|
-						// [:]
-					)			
-				) |
-				// [begin
-				begin=expression
-				(
-					// [begin:
-					COLON
-					(
-						end=expression | { end = OmittedExpression.Default; } 
+							COMMA item=slice { se.Indices.Add(item); }
+						)*
 					)
-					(
-						COLON
-						step=expression
-					)?
-				)?
+				)
+				|
+				{ e = new SlicingExpression(ToLexicalInfo(lbrack)); }
 			)
-			{
-				SlicingExpression se = new SlicingExpression(ToLexicalInfo(lbrack));				
-				se.Target = e;
-				se.Indices.Add(new Slice(begin, end, step));
-				e = se;
-				
-				begin = end = step = null;
-			}
 			RBRACK
 		)
 		|

