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