Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка синтаксиса команды


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 команд и я делал их анализ в коде программы, т.е. не универсально. Плюс заключается в большей гибкости.


Наверх

Титульная страница Поиск, карта сайта Написать письмо