Объединенный Открытый Проект - Сайт для Настоящих Компьютерщиков

Объединенный Открытый Проект

Сайт для Настоящих Компьютерщиков

; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
 
Объединенный Открытый Проект »   Программирование »   С/C++ »   Comand Line Interface
RSS

Comand Line Interface

Текущий рейтинг темы: Нет

<<Назад  Вперед>>Модератор: wsxПечать
 
wsx
Модератор раздела
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
Собсна CLI.
В перле, всё просто. Там просто используется соответственный модуль.
А вот в сях как быть ? getchar'ом ?

p.s. Под CLI я подрузомеваю оболочку типа bash, zsh, sh, csh или же Cisco like console...

4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Собственно, так и не понял, в чем проблема. По идее, все сводится к написанию достаточно простого анализатора выражений, который разобьет командную строку на массив строк по пробелам (правда, придется учитывать символы кавычек и апострофов, а также производить замену $var на содержимое этой самой var).
Короче, работать это будет примерно так: в основном цикле идешь по строке и делаешь такой case:
while (i<strlen(buffer)) {
switch (buffer[ i ]) {
case " " : i=i+NextLine(buffer+i); break;
case "\\" : i=i+SpecialSymbol(buffer+i); break;
case "\" " : i=i+Quote(buffer+i); break;
case "$" : i=i+Variable(buffer+i); break;
else i=CommonChar(buffer+i); break;
}
}
Соответственно, функция Quote делает почти такой же парсинг, но без учета пробелов, зато выходит, если ей встретится символ ". Функция NextLine берет символ, стоящий по смещению 1 относительно buffer+i, выполняет преобразование в соответствии с обозначениями спецсимволов (это обработка всяких \n, \t, \", \') и засовывает в новый буфер. Функция CommonChar просто помещает текущий символ в новый буфер, а функция NextLine производит смену буфера в массиве.
Ну и естественно, по хорошему, надо бы добавить обработчики различных ошибочных ситуаций...
Оффтопик: Надо же, я наконец-то сам разобрался, как пишутся парсеры...

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Соответственно, в качестве возвращаемого каждой функцией значения должно быть количество символов, которое она обработала и на которое требуется сместиться для дальнейшей обработки.

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
wsx
Модератор раздела
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
мдя..а можно на русском ?
wsx
Модератор раздела
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
Тьфу! млять!
Command Line Interface*


Надо завязывать с выпивкой...
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Короче, как выяснилось, изначально речь шла не о том, как парсить. а о том, как вводить...

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
wsx
Модератор раздела
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
угу...и вроде уже дошло что к чему.... :))

<<Назад  Вперед>>Модератор: wsxПечать
Объединенный Открытый Проект »   Программирование »   С/C++ »   Comand Line Interface
RSS
Быстрый переход в раздел:


Время выполнения скрипта: 0.0362. Количество выполненных запросов: 18, время выполнения запросов 0.0263