parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

и ещё в догонку

Misha v.3 16.06.2011 03:04 / 16.06.2011 03:11

мне не нравится, что во многих местах происходит поиск по шаблону (с запоминанием), а затем замена с подстановкой только-что найденного.

по моему лучше сделать, чтобы работало как-то так (пока опускаю детали реализации, о них позже):
^str.match[(?:<=hive)^$][]{s}]
т.е. этот код просто подставит 's', если непосредственно перед концом строки есть шаблон "hive".
при этом, как видно, не требуется ковыряться в строке-заменителе и поставлять в неё содержимое $match.1

да, вижу, что в некоторых случаях действительно требуются эти ковыряния, поэтому в хэшах можно иметь пару ключей, например:
  $.6[
    $.regex[(?:<=hive)^$]
    $.param[i]
    $.addition[s]
  ]
  $.7[
    $.regex[(?:([^^f])fe|([lr])f)^$]
    $.param[i]
    $.replacement[^$1^$2ves]
  ]
а в "мясе" добавить проверку:
...
        $result[^str.match[$value.regex][$value.param]{^if(def $value.addition){$value.addition}{то что было раньше}}]
...
P.S. а ещё внутренности основных foreach-циклов в pluralize и singularize так и просятся, чтобы их вынесли в отдельный метод (с избавлением от выполнения двух одинаковых match-ей), ведь они-же копии с точностью до символа.