def countedArray( expr, intExpr=None ):
arrayExpr = Forward()<EOL>def countFieldParseAction(s,l,t):<EOL><INDENT>n = t[<NUM_LIT:0>]<EOL>arrayExpr << (n and Group(And([expr]*n)) or Group(empty))<EOL>return []<EOL><DEDENT>if intExpr is None:<EOL><INDENT>intExpr = Word(nums).setParseAction(lambda t:int(t[<NUM_LIT:0>]))<EOL><DEDENT>else:<EOL><INDENT>intExpr = intExpr.copy()<EOL><DEDENT>intExpr.setName("<STR_LIT>")<EOL>intExpr.addParseAction(countFieldParseAction, callDuringTry=True)<EOL>return ( intExpr + arrayExpr )<EOL>
Helper to define a counted list of expressions.
       This helper defines a pattern of the form::
           integer expr expr expr...
       where the leading integer tells how many expr expressions follow.
       The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.