воскресенье, 9 сентября 2007 г.

Новый движок для скриптов готов!

    Сегодня великий день :) Я окончательно доделал новый движок скриптов (скрипты даже компилируются и работают в основной программе-переводчике!). Теперь скрипты пишутся исключительно на на языке C#. Применяться он будет в составе алгоритма синтаксического анализа предложений вместо уже существующего.

    Наверное стоит рассказать, чем же меня не устраивала предыдущая версия. Пожалуй самая основная ее проблема в том, что предыдущий движок был декларативным. Фактически, любое правило описывало жестко заданный алгоритм: 

  1. поиск слов имеющих заданные параметры и замена в строке-представлении предложения символа в соответствующей позиции (равной номеру слова в предложении) на заданный симво
  2. поиск в предложении участка по заданному регулярному выражению
  3. если поиск увенчался успехом, то производятся заданные действия - например, установка у указанных слов определенных параметров, добавление связей между словами и т.п.

где разработчик правила мог указывать необходимый (и строго фиксированный!) набор параметров.

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

На этот раз я постарался разработать более гибкую систему. Пока сложно сказать насколько она удачна, т.к. правил там на данный момент нет :)

На данный момент запланированы следующие задачи:

  1. реализовать поддержку нескольких библиотек скриптов в редакторе с соответствующей компиляцией в разные .dll
  2. сконвертировать все старые скрипты к новому виду - т.е. фактически написать алгоритм генерации класса по описанию правила.
  3. разработать набор визардов для автоматической генерации простых скриптов (лень - двигатель прогресса!)

    Ну и как не похвалиться? На скриншоте можно посмотреть структуру стандартного скрипта:

    Функция Init используется для инициализации. Там необходимо выполнять те действия, которые можно сделать один раз и потом пользоваться результатом В частности я предполагаю выполнять там действия по инициализации алгоритма поиска.

    Ну и самая главная функция - Run - которая вызывается в цикле до тех пор пока возвращает true (ну о том, как именно работает алгоритм анализа я расскажу по-позже).

Комментариев нет:

Отправить комментарий