Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1280840158
mylasthit
2010-08-03 16:55
2010.10.24
Создание N кол-ва обьектов, кодом и редактирование каждого обьект


15-1279225777
Юрий
2010-07-16 00:29
2010.10.24
С днем рождения ! 16 июля 2010 пятница


2-1280146994
nordford
2010-07-26 16:23
2010.10.24
Обход препятсвия


3-1246966734
Alexander_K
2009-07-07 15:38
2010.10.24
Тип поля


6-1227811974
stas
2008-11-27 21:52
2010.10.24
Проверить наличие коннекта к определенному IP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский