| 
| 
 | Вопрос # 566/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Продолжая тему "реакции" программы, назрел вопрос. Нужна реализация командного языка. допустим есть команда "Load" (будет каким-нибудь действием, например LoadFromFile), вводим в TEdit фразу "Load fail.txt". Программа должна разделить-понять фразу и выполнить LoadFromFile('file.txt'). Какие мысли по осуществлению? заранее спасибо.
 
|  |   Вопрос задал: Phoenix (статус: Посетитель)Вопрос отправлен: 10 мая 2007, 20:21
 Состояние вопроса: открыт, ответов: 3.
 |  Ответ #1. Отвечает эксперт: Сергей Устинов Здравствуйте, Phoenix!
 var comand,parametr:string;
 begin
 comand:=copy(Edit1.Text,1,pos(' ',Edit1.Text)-1);
 parametr:=copy(Edit1.Text,pos(' ',Edit1.Text)+1,length(Edit1.Text)-pos(' ',Edit1.Text));
 if comand='copy' then LoadFromFile(parametr);
 if comand='save' then SaveToFile(parametr);
 end;
 
 В Edit1 введете текст, его разбиваем на 2 части - первая - команда - содержится в переменной comand - все до первого пробела, вторая часть - все после первого пробела - содержится в переменной parametr.
 Далее в зависимости от значения переменной comand совершаем разные действия с параметром.
 
 Удачи!
 
|  | Ответ отправил: Сергей Устинов (статус: 2-ой класс)Время отправки: 10 мая 2007, 20:52
 
 |  Ответ #2. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, Phoenix!1. - Если планируется просто команды и параметры, разделяете строку по словам, проверяете первое слово, а остальные слова - параметры для команды;
 2. - Если нужно вычисление, например 1+1 должно значить 2, а 'стр1'+'стр2'='стр1стр2' возьмите что-нибудь из темы "вычисление выражений" и адаптируйте для строк, т.е. если справа и слева строка - соединение строк, если числа - сложение, иначе - ошибка;
 3. - Если нужно что-то более сложное, как условное ветвление, переменные и т.д. возьмите один из скрипт-движков и не изобретайте свой велосипед;
 
 P.S. В последнем случае могу порекомендовать скрипт движок Cajscript, прикреплённый файл. Синтаксис нативного паскаля, без объектов. Простой, понятный, не использует объектов и компонентов. Легко изменить для своих нужд.
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 Ответ #3. Отвечает эксперт: min@y™ Я имею некоторый опят по написанию командных интерпретаторов. Делал на работе программу для универсального пульта настройки устройств, изготавливаемых нашим заводиком. Изложу кратко назначение программы. В ISA-слот компа вставляется спец-плата, которая по параллельному интерфейсу (через 54-жильный жгут) связывается с универсальным пультом настройки. В этом пульте имеется 135-контактный разъём, в который, собственно, вставляется опытный образец изделия. Далее, разработчиком изделия пишется программа-скрипт для выдачи на устройство данных, их приём оттуда и анализ. Кусок типичного скрипта выглядит так://-----------------------------------
 =p0601: "Параметр 1. Проверка команд <20> и <60>.";
 =iap;
 m2       100, 001;
 =halt "Проконтролировать вольтметром на гнезде А32 относительно гнезда А33 универсального адаптера ия (2,4-5) В.";
 m2       100, 002;
 =halt "Проконтролировать на гнезде А32 относительно гнезда А33 универсального адаптера уровень напряжения (0-0,4) В.";
 m2       100, 001;
 =halt "Проконтролировать вольтметром на гнезде А32 относительно гнезда А33 универсального адаптера ия (2,4-5) В.";
 
 [Reg136]  b2?      136;                 / Чтение регистра 136 /
 {(Reg136 & $20) / $20};       / Вычисление 1 в ИМ5 /
 ~cmpf     1, 0.0001;
 
 m2       100, 010;
 =halt "Проконтролировать вольтметром на гнезде А32 относительно гнезда А33 универсального адаптера уровень напряжения (0-0,4) В.";
 [Reg136]  b2?      136;                 / Чтение регистра 136 /
 {(Reg136 & $20) / $20};       / Вычисление 0 в ИМ5 /
 ~cmpf     0, 0.0001;
 
 =halt "";
 //-----------------------------------
 
 Чтобы интерпретатор понимал и различал более сотни разных команд, у которых может быть ПЕРЕМЕННОЕ количество параметров (операндов), а также операнды разных типов, например, строки в кавычках, числа с плавающей точкой, целые, а также комментарии, пришлось некисло потрудиться. Но особенно хорошо вышла возможность быстро и без особых усилий добавлять новые команды.
 
 Эта моя программа легла в основу статьи в журнале "Хакер №67" от 07.2004 "Интерпретируй это" (я был соавтором статьи). Советую прочитать. Также ты можешь скачать хэлп от моей проги отсюда: http://sourceviewer.narod.ru/downloads/help.rar и почитать, что там как.
 
 Также, могу выслать исходники, мне не жалко, только предупреждаю, что одних *.pas файлов там пол-мегабайта.
 
 З.Ы. Если что - пиши в мыло.
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 11 мая 2007, 08:56
 
 |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |