| 
| 
 | Вопрос # 1 435/ вопрос открыт / | 
 |  Здравствуйте!
 Подскажите, как реализовать в программе работу со скриптами и с переменными? Т.е. возможность указать возможные действия программы в виде списка операторов, каждый из которых содержит разные функции:
 
 Примерный скрипт:
 
 1. Сделать это
 2. Сделать то
 ...
 n. И ещё это
 
 Каждая из этих команд может содержать разные функции.
 
 И как сделать использование переменных типа
 %Имя переменной%?
 
 Аналогичное реализовано в программе Tiger Files Renamer.
 
|  |   Вопрос задал: Фамилия Имя Отчество (статус: Посетитель)Вопрос отправлен: 20 марта 2008, 05:15
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, Emfs!В Delphi готового решения нет, Вам нужно либо написать самому простенький скрипт-движок (если требуется простое выполнение команд с параметрами, то это можно написать за пару часов, если есть еще вычисления, типа 1+2, 'aaa'+'bbb' и т.д. это займет еще некоторое время, но это все-равно вполне выполнимо, и к тому же интересно), либо взять готовый скрипт-движок и "отрезать" от него все ненужное.
 Я в таких случаях рекомендую Cajscript 2.0 (www.programmers.net/mirrors/DSP/ftp/d10free/cajscript.zip) - это простой и понятный скрипт-движок, написанный без использования классов, позволяет определять свои функции, подключать модули и т.д. только не предусматривает ООП в скриптах. Написан грамотно и понятно, сделать из него то что Вам требуется совсем не сложно.
 Ответ #2. Отвечает эксперт: DNK Здравствуйте, Emfs!Может это из пушки по воробьям, но мне понравился в использовании FastScript (http://fast-report.com/ru/products/fast-script.html). Поддерживает языки PascalScript, C++Script, JScript и BasicScript, можно добавлять свои.
 Плюс: из скрипта можно обращаться к процедурам, переменным, объектам, классам основной программы, имеется готовый редактор с поддержкой синтаксиса.
 Минус: библиотека не бесплатная, но цены в рублях.
 
|  | Ответ отправил: DNK (статус: Студент)Время отправки: 24 марта 2008, 10:31
 
 |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 21 марта 2008, 08:17; участников в обсуждении: 2. 
|   | min@y™ (статус: Доктор наук), 20 марта 2008, 08:51 [#1]:А по-конкретней можно? Например, вылодить список операторов и т.п. Просто, по работе мне нужно было написать интерпретатор скриптов вот такого, к примеру, вида:
 
 
 ; ===============================================================
 =p1002: "Параметр 2.";
 /====== Условия п. 7.1. ========= /
 =halt "Соединить на адаптере Ад 6Ф412ЕМ гнезда С18 и С1.";
 =iap;                          / Исходное /
 
 / Обнуление ОЗУ1 /
 m2       102, 002;            / Запись /
 m2       100, 040;
 m2       125, 010;
 =tz       1;                   / Задержка /
 m2       125, 000;            / Снятие команды обнуления /
 
 / В ячейку 18480 записать <1> в канал <Конец кадра>. /
 / 18480 = 044060 = 1 0010000 0110000 = 1 020 060 /
 m3       105, 001, 020, 060;  / Начальный адрес /
 m3       114, 001, 000;       / Данные /
 
 / Проверка записанного /
 m2       102, 000;            / Чтение /
 m3       105, 001, 020, 060;  / Начальный адрес /
 b82?     140;                 / Чтение данных /
 ~cmp      001;
 b82?     141;
 ~cmp      000;
 
 ;------------------------
 m3       100, 041, 024;
 b2?      100;
 ~cmp      241;
 b2?      101;
 ~cmp      224;
 m3       105, 000, 000, 000;  / Начальный адрес /
 =zap;
 
 =halt "Проконтролировать осциллографом на гнездах А14, А15, А28 относительно гнезда А16 адаптера Ад 6Ф412ЕМ импульсные сигналы амплитудой (2,4-5) В.><><Проконтролировать частотомером на гнездах А14, А15 относительно гнезда А16 длительность отрицательных сигналов (45,62 ± 0,4) мкс, на гнезде А28 длительность отрицательных импульсов (418,49 ± 0,4) мкс.";
 =halt "Проконтролировать частотомером паузу между положительным сигналом на гнезде А12 и отрицательным сигналом на гнезде А14 адаптера Ад 6Ф412ЕМ. Измерение производить относительно гнезда A16.><><Пауза должна быть равна (95,396 ±0,4) мкс.";
 
 =halt "";
 =endp "Конец параметра";
 
 
 C интерпретатором этим я справился и прога моя пользуется успехом (какой я скромный
  ). 
 Так к чему это я клонирую?.. А, ну да! Пример твой
 
 Цитата: 1. Сделать это
 2. Сделать то
 ...
 n. И ещё это
 
 в контексте вопроса не смотрится (ну, или можно тебя направить изучать теорию конечных автоматов). Ты для начала сформулируй (хотя бы для себя) требования формирования скриптов (список операций, количество и типы опрерандов каждой операции и т.п.). Иначе получишь только ОБЩИЙ ответ, который тебе ничего не даст.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Фамилия Имя Отчество (статус: Посетитель), 20 марта 2008, 10:38 [#2]:Точно не могу сказать. Например, найти по регекспу подстроку и сделать с ней что либо
 Далее, найти другую подстроку с другими условиями и сделать с ней что-нибудь другое.
 |  
|   | min@y™ (статус: Доктор наук), 21 марта 2008, 08:17 [#3]: Цитата: Точно не могу сказать. Пойди туда, не знаю куда?...
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |