Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.10.24;
Скачать: CL | DM;

Вниз

Проверка синтаксиса команды   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
2-1280840158
mylasthit
2010-08-03 16:55
2010.10.24
Создание N кол-ва обьектов, кодом и редактирование каждого обьект


10-1169154882
sinys
2007-01-19 00:14
2010.10.24
Вынос сессии на COM сервер


2-1280225843
KilkennyCat
2010-07-27 14:17
2010.10.24
Ограничение области перемещения контрола в рантайме


2-1280431419
MAXHO
2010-07-29 23:23
2010.10.24
Как вравнить дату ?


15-1279398576
Юрий
2010-07-18 00:29
2010.10.24
С днем рождения ! 18 июля 2010 воскресенье