![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка синтаксиса команды
Scot Storch © (2010-07-30 11:44:00)Для приложения необходимо реализовать поддержку командной строки. Каждая команда будет иметь список обязательных параметров (см. ниже). Для начала требуется сделать проверку синтаксиса команды. К примеру, если приложение запускается с командой check и не указан параметр -opt получаем сообщение типа: "Ошибка в синтаксисе команды".
-------------------------
Command | Attr |
-------------------------
check | |
| -upddir="..." |
| -opt="..." |
-------------------------
append | |
| -upddir="..." |
| -files="..." |
-------------------------
Пока что представляется такое:
Хранить список комманд, каждая комманда (item) которого будет хранить список параметров. Дальше будем парсить командную строку:
1. Извлекаем команду
2. Проверяем, есть ли она в списке команд
3. Проверяем существование параметров.
Нужен ваш совет по организации логики проверки.
Игорь Шевченко (2010-07-30 18:37:00) [1]SysUtils.FindCmdLineSwitch
Юрий Зотов (2010-07-30 14:24:00) [2]Если делать нормальный парсер, а не суррогат, то цепочку входных символов он будет преобразовывать в цепочку токенов. Связать каждый токен "команда такая-то" с соответствующей процедурой его обработки - не проблема.
> Scot Storch (30.07.10 11:44)
Мой совет - начните с описания входного языка в виде БНФ. После этого все станет намного проще.
И. Павел (2010-07-30 12:58:00) [3]> А как вы делали их анализ в коде программы, расскажите подробней.
Главная функция считывает имя команды и в зависимости от него вызывает функцию для обработки этой команды (т.е. просто "case"). А функция обработки читает аргументы, проверяет их корректность (заодно и корректируется смысл, если команда перегружена и например, может содержать первым аргументом строку или число и по разному при этом выполняться) и потом исполняет команду.
Правда, у меня была не командная строка, а свой формат, так что команда предварительно проверялась и “компилировалась” еще на этапе создания.
12 (2010-07-30 12:30:00) [4]немного не то, но вдруг, просто идея
Писал как-то немаленькую программу, с кнопочками, и проч.
GUI
потом нужно было сделать через ком.стр. Чего сделал - всем кнопочкам, вводам и т.п. присвоил уникальные тэги, ввод символа - ">X"
далее, просто
name.exe 1 2 5 >"так надо" 6 9
жмакнуть на компаненте 1, потом на два, потом на 5, в 5 ввести "так надо", жмакнуть 6й и 9й :)
Scot Storch (2010-07-30 12:13:00) [5]2 это так, для примера. на самом деле их 10-15. Использование таблиц слишком накладно. А как вы делали их анализ в коде программы, расскажите подробней.
И. Павел (2010-07-30 12:07:00) [6]Можно в одну таблицу поместить список команд и каждую команду связать с несколькими строками из таблицы парметров (например через еще одну таблицу). В таблице параметров для каждого параметра указывать его тип, который будет определять список допустимых значений. Хотя, когда я писал подобную штуку, у меня было 15-20 команд и я делал их анализ в коде программы, т.е. не универсально. Плюс заключается в большей гибкости.