code: Rule PartsPlayOrder() {
  		return OneOrMore(FirstOfS(
  				CharRange('A', 'Z').label("ALPHA").suppressSubnodes(),
  				DIGITS(),
  				String("("),
  				String(")"),
  				suppr("."),
  				suppr("\""),//found P:"AABBCCAA"...
  				suppr(WSPS())
  		)).label(PartsPlayOrder);
  		//return OneOrMore(AnyOf("1234567890().ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
  		//	.label("PartsPlayOrder").suppressSubnodes();
  //		if (cachedPartsPlayOrder == null) {
  //			//cachedPartsPlayOrder = String("building...");
  //			cachedPartsPlayOrder =
  //				FirstOfS(
  //					OneOrMoreS(
  //						SequenceS(
  //							FirstOfS(CharRange('A', 'Z').label("ALPHA"),
  //									Sequence('(', cachedPartsPlayOrder, ')')
  //									),
  //							ZeroOrMore(DIGIT()).label("DIGIT").suppressSubnodes()
  //						)
  //					),
  //					suppr(".")
  //				).label("PartsPlayOrder");
  //		}
  //		return cachedPartsPlayOrder;
  	}
docs: dots are ignored - for legibility only
  parts-play-order ::= 1*( ALPHA / ( "(" parts-play-order ")" ) *DIGIT) / "."