Without having looked all that much at the code: When the parser sees some \blabla it will generally first have to check for a keyword and (when it has no match) afterwards for a variable with that name, and a lot of those are actually music functions these days that used to be keyword.
Wouldn't it make sense to just convert \xxx into a symbol early on in the lexer? That is essentially a hash code, and we have lookups for those. It seems wasteful to use two completely different ways of hashing a string in succession when we can just turn this into a symbol early on and work with that instead. https://codereview.appspot.com/549920043/