The parser/evaluator in jme.js is significantly more sophisticated than the parser I am currently using. The expression rewriting system in jme-display.js looks like it is very useful, and I especially like the way pattern-matching rules are defined in it. I think there is quite a bit I can use in this code. Thank you for making me aware of it.
The pattern-matching system I have been using for my prototype work is the one that is in the MathPiper CAS. However, it is a fairly simple pattern matcher that does not “know” about the commutativity and associativity of addition and multiplication. PRESS has two pattern matchers. The simpler matcher (which is the one it uses by default) is aware of the commutativity and associativity of addition and multiplication. A more powerful experimental matcher was also created for PRESS, and it is described in the following paper: