Добавил подставление шаблона объекта в шаблон в SamplesToTextsMatcher

Добавил то, что, вроде как, может быть актуальным при сопоставлении шаблона и текста: подстановку одного паттерна в другой. Например, нужно часто подставлять шаблон синонимов персоны в какой-то другой шаблон. Допустим, шаблон персоны такой:   (Иванов | Ивонов| Ivanov | Ivonov | #Ivanov | #Ivonov)

И есть другие шаблоны, в которых шаблон для этой персоны нужно использовать. Например, что-то типа этого:   (победитель | победил | (одержал /2 победу) | выиграл) /3 (соревнования | кубок | состязание) /5 (Иванов | Ивонов| Ivanov | Ivonov | #Ivanov | #Ivonov)

Вместо блока синонимов можно использовать {иванов}, предварительно дав такое название первому шаблону. В итоге запрос будет таким:

(победитель | победил | (одержал /2 победу) | выиграл) /3 (соревнования | кубок | состязание) /5  {иванов}

Подставляемых шаблонов может быть сколько угодно. Тестов для этого функционала пока мало делал — но пока что, кажись, работает. Пока не делал проверки валидности для фигурных скобок. Например, их закрытия и допустимых символов наименования шаблона и пр.

Для того чтобы использовать шаблоны в шаблонах в конструктор контекста опциональным аргументом добавляется словарь с ключом — именем шаблона и связанным списком терминалов и нетерминалов (не преобразованным в обратную польскую нотацию) из другого объекта контекста — значением.

Dictionary<string, LinkedList<Expression>> extras = null
Запись опубликована в рубрике Без рубрики. Добавьте в закладки постоянную ссылку.