Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #67, ИЮЛЬ 2004 г.

Интерпретируй ЭТО!

Диман Dr.X (xdiman@mail.ru)

Xakep, номер #067, стр. 067-086-1

vs. min@y (minay-tm@mail.ru)

Обработка скриптов в Delphi

В последнее время разработчики софта стремятся снизить количество ручной работы пользователей до минимума с помощью скриптов и макросов. Например, макросы в Word (пишутся на VBA), сценарии подключения SCP в Windows и всякого рода терминальных программах, скрипты в mIRC... Внедрение такой технологии избавляет пользователя от монотонной работы, улучшает производительность. В этой статье мы расскажем тебе о создании небольшой программы для работы с текстом. Естественно, что для обработки текстов будут использоваться скрипты.

Скрипты vs. макросы

Макрос - это способ автоматического создания скрипта при помощи записи производимых пользователем действий. Отличным примером могут послужить макросы в Ворде, о которых я сказал выше: достаточно нажать на кнопку записи - и встроенный механизм будет транслировать все действия пользователя на язык VBA. Конечно, создание подобной системы значительно облегчит труд юзера, но мы ограничимся созданием обработчика скриптов. Перед этим надо уяснить еще одну деталь. Язык скриптов, каким бы он ни был простым, имеет много общего с полноценными языками программирования: например, схожее модульное построение обработчика, дифференциация команд и т.д.

Компилятор vs. интерпретатор

Если ты не прогуливал информатику, то знаешь, что компилятор анализирует весь код полностью, выявляя ошибки, и создает исполняемый код. Интерпретатор же считывает код построчно, анализирует каждую строку и исполняет заданные в ней инструкции. Примером интерпретатора может служить язык Perl, а компилятора - язык C++. Наш обработчик скриптов будет строиться по принципу интерпретатора: сперва считывается строка, далее она разбивается на части, по ним определяется заключенная в ней команда, и в конечном итоге происходит вызов функции с параметрами, полученными при обработке строки.

Правила описания инструкций

Итак, определимся с правилами написания инструкций, или, иными словами, синтаксисом языка. Скрипт у нас будет храниться в plain text, в каждой строчке будет расположена только одна команда. Команды будут оформляться следующим образом:

>название_команды< >параметр1< >параметр2< >параметр3<

Функция и параметры разграничиваются через пробел, следовательно, он и будет разделителем в процедуре обработки строки. Эту идею я взял из асма (mov eax, ebx :)), только в нем параметры разделяются запятой. Теперь нужно определиться с набором команд. Первые две - FIND и REPLACE - отвечают за поиск текста и замену соответственно. Первая команда будет иметь один параметр - строку, которую необходимо найти, а вторая команда - два параметра: искомую строку и замену для нее. Еще четыре команды будут отвечать за перемещение по тексту: GOLINE, GOCHAR, END, HOME. Первая выполняет перемещение курсора на строку с нужным номером, вторая - на определенное количество символов в строке, а третья и четвертая - в конец и начало текста соответственно. Ну и еще три главные команды - INSERT, DELBEFORE и DELAFTER. Первая добавляет в место, на котором находится курсор, строку символов, вторая и третья удаляют указанное количество символов до и после курсора. Вот и весь набор команд. Он легко дополним, и ты в любое время сможешь добавить в него нужную тебе команду. Так, со всеми основными моментами мы определились, можно приступать к созданию интерфейса проги и написанию кода. Создавай новый проект и кидай на форму 2 Label, 1 Edit, 1 Memo и одну кнопку, как показано на рисунке 1.

Содержание  Вперед на стр. 067-086-2
ttfb: 8.6719989776611 ms