сильно переделал сканер (это который лексер, гыгы). ВНИМАНИЕ, несуществующие пользователи: возможны обломы с ранее работавшими правилами. зато новый сканер нужен был для нового экспандера (да, и это новое). закавыченые строки в селекторах теперь обрабатываются самим экспандером; соответственно, сканер их не должен никак преобразовывать. зачем? а вот для такого, например: $(pth:Q=\\/). эта фигня заэкранирует все слэши. раньше пришлось бы писать $(pth:Q=\\\\/). фуфуфуфу.
также добавил «~=» — сравнение строки с регуляркой. скомпилированые регулярки же теперь кэшируются, так что это весьма дёшево и зачастую быстрее, чем сравнение с shell pattern. ну, и точно быстрее, чем вызов правила Match, которое мало того, что имеет оверхэд на вызов, так ещё и формирует список-результат, который нахуй не упёрся в этом случае.
также правило Match теперь возвращает в конце списка $0 (т.е. полную отматченую строку).
заодно новый сканер будет плакать, если увидит что-то подозрительное. например, неалфавитноцифровой токен, перед которым забыли пробел. или конструкции типа (a), ($a), $a — в большинстве случаев это тупо ошибки. а если нет — достаточно в первом случае отделить скобки пробелами, а в остальных — заключить строку в двойные кавычки.
кстати, новый сканер нашёл несколько таких ошибок в Jambase.