Интерпретируй ЭТО! Диман Dr.X (xdiman@mail.ru) Xakep, номер #067, стр. 067-086-2 Теперь дадим названия контролам: Label1 -< "Путь к скрипту, обрабатывающему текст" Label2 -< "Обрабатываемый текст" Button1 -< "Обработать текст c использованием скрипта" Люблю я все-таки длинные названия на кнопках и метках :) . Теперь, когда GUI создан, можно приступать к написанию кода самого обработчика. Создание обработчика скриптов Лично я делю интерпретатор скрипта на три основных модуля: парсер, анализатор и исполнитель команд. Первый модуль, парсер, предназначен для разделения строки с командой, т.е записи в разных переменных названия функции и параметров. На входе парсер получает строку, а на выходе дает несколько различных переменных. У нас максимальное количество параметров - 3, поэтому заголовок функции парсера будет выглядеть следующим образом: procedure parser(inp:string; var func,param1,param2,param3:string); inp - это строка на входе парсера, func - полученное в результате обработки название функции, param1, param2, param3 - параметры функции. Так как имя функции и параметры разделяются пробелом, то дйствия парсера сведутся к поиску символа пробела, копированию части строки до пробела, удалению этой части и повтору процедуры. Цикл завершается, когда в строке не остается ни одного пробела. И только тогда оставшаяся часть строки присваивается последнему параметру. Всю процедуру ты можешь видеть на врезке "Листинг процедуры parser": Листинг процедуры parser procedure parser(inp:string; var func,param1,param2,param3:string); var a, i : integer; begin a:=1; while pos(' ',inp)<0 do begin i:=pos(' ',inp); case a of 1: func:=copy(inp,1,i-1); 2: param1:=copy(inp,1,i-1); 3: param2:=copy(inp,1,i-1); 4: param3:=copy(inp,1,i-1); end; a:=a+1; inp:=copy(inp,i+1,length(inp)-i); end; if a=1 then func:=inp; if a=2 then param1:=inp; if a=3 then param2:=inp; if a=4 then param3:=inp; end; Переменная A нужна для обработки функций с числом параметров меньше 3. Теперь на выходе мы получаем переменные func и param с названием функции и параметрами соответственно. Их мы и будем использовать для исполнения команд по обработке скриптов. Самое время перейти к следующей части нашего обработчика - анализатору. В сложных интерпретаторах для анализа скриптов пишутся километровые модули, осуществляющие поиск ошибки в команде, затем прерывающие процесс исполнения или перенаправляющие команду на исполнительный модуль. В нашем случае писать дополнительный модуль не придется, надо всего лишь создать вот такую конструкцию: Небольшая конструкция if func='REPLACE' then begin {Твои действия по замене} end; else if func='FIND' then begin |