The QQ class has the following interface:

    foreach T in SourceFile ClassDecl ClassMember Expr Stmt TypeNode

        public T parseT(String fmt);
        public T parseT(String fmt, Object o1);
        public T parseT(String fmt, Object o1, Object o2);
        ...
        public T parseT(String fmt, Object o1, ..., Object o9);

        public T parseT(String fmt, Object[] os);
        public T parseT(String fmt, List os);

A different method for each type T is needed to tell the parser what start
rule to use.

The fmt string may contain the following patterns:

        %s - corresponding object is String (parsed as an identifier)

        %T - corresponding object is Type or TypeNode
        %E - corresponding object is Expr
        %S - corresponding object is Stmt
        %C - corresponding object is ClassDecl
        %M - corresponding object is ClassMember
        %F - corresponding object is Formal

        %LT - corresponding object is List of Type or TypeNode
        %LE - corresponding object is List of Expr
        %LS - corresponding object is List of Stmt
        %LC - corresponding object is List of ClassDecl
        %LM - corresponding object is List of ClassMember
        %LF - corresponding object is List of Formal

These patterns are recognized as tokens by the lexer--surrounding the token
with whitespace or parens may be needed to parse the string.

Example:

        Expr e;
        TypeNode t;
        Stmt s = qq.parseStmt("%T %s = new %T(%E);", t, "tmp", t, e);

