code: public Rule labelledStatement() {
  		return Sequence(
  				ZeroOrMore(Sequence(
  						group.basics.identifier().label("labelName"),
  						Ch(':'),
  						group.basics.optWS())),
  				FirstOf(
  						blockStatement(),
  						localClassDeclaration(),
  						localVariableDeclaration(),
  						emptyStatement(),
  						expressionStatement(),
  						ifStatement(),
  						assertStatement(),
  						switchStatement(),
  						caseStatement(),
  						defaultStatement(),
  						whileStatement(),
  						doWhileStatement(),
  						basicForStatement(),
  						enhancedForStatement(),
  						breakStatement(),
  						continueStatement(),
  						returnStatement(),
  						synchronizedStatement(),
  						throwStatement(),
  						tryStatement(),
  						explicitAlternateConstructorInvocation(),
  						explicitSuperConstructorInvocation()
  				).label("statement"),
  				set(actions.createLabelledStatement(values("ZeroOrMore/Sequence/labelName"), value("statement"))));
  	}
docs: Labels aren't statements; instead they can prefix any statement. Something like {@code if (1 == 1) foo: a();} is legal.
  Multiple labels for the same statement is also legal.
  
  @see <a href="http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.7">JLS section 14.7</a>