These guys do this:

JS> (ps a!)
"abang;"
JS> (ps a!!)
"abangbang;"

JS> (ps a%)
"apercent;"
JS> (ps a%%)
"apercentpercent;"

But these guys do this:

JS> (ps a+)
"aplus;"
JS> (ps a++)
";"

JS> (ps a*)
"astar;"
JS> (ps a**)
";"

I'm sure this has something to do with translation of *NAMES-LIKE-THIS* and +NAMES-LIKE-THIS+.  But presumably those should be special cases where * and + are truly delimiting the name?