Форум программистов, компьютерный форум CyberForum.ru

Реализовать командный интерпретатор - C++

Восстановить пароль Регистрация
 
Max_92
 Аватар для Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
28.05.2013, 23:30     Реализовать командный интерпретатор #1
Пользователь вводит в консольное приложение команду (в дальнейшем которая будет выполнять операции с виртуальной файловой системой VFS), например, COPY test1 /temp или MD temp1, а программа должна распознать команду и аргументы и выполнить её. пока меня интересует просто нормальный удобный алгоритм отделения одного от другого и распознавание. кроме того, должно быть подключение к серверу (это я сделал, через сокеты, обмен идёт), но опять же задание адреса и порта пользователем должно идти по команде: connect <address>:<port>. бился час с такой простой командой. и в итоге не работает.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    string input = "", addr_str = "", port_str = "";
    char * _input = new char[50];
    int i = 0;
 
bool flag = true;
    while(flag)
    {
    cout<<endl;
    cout<<"enter the server address <connect ip_address:port>"<<endl;
    cout<<">> ";
    cin>>input;
    cout<<endl;
    if (input == "quit") {closesocket(clientSock); return 0;}
    
    strcpy(_input,input.c_str());
    
    
    if (strncmp(_input, "connect", 7))
    {
    i = 8; do {addr_str += _input[i]; cout<<_input[i]<<endl; i++; } while( (_input[i] != ' ') || (_input[i] != ':') );
    if (_input[i] == ':') { for (i=i; i<strlen(_input); i++) {port_str += input[i];} }
    input = port_str.c_str();
    port = atoi(_input);
    flag = false;
    }
    else {printf("try again"); addr_str = ""; port_str = ""; cout<<endl;}
    }
    
    cout<<addr_str<<endl;
    cout<<port_str<<endl;
    cin.get();
как это можно реализовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 23:30     Реализовать командный интерпретатор
Посмотрите здесь:

C++ Интерпретатор(asm)
C++ Подскажите! Интерпретатор форматов...
интерпретатор cmd C++
Интерпретатор C++
командный интерпретатор C++
C++ Простенький интерпретатор
C++ Написать интерпретатор
C++ Командный интерпретатор для Linux и Windows

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,919
Записей в блоге: 1
29.05.2013, 05:17     Реализовать командный интерпретатор #2
Цитата Сообщение от Max_92 Посмотреть сообщение
как это можно реализовать?
Пишете грамматику, генерируете парсер. Теория программирования. Парсеры и парсер-генераторы
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
29.05.2013, 05:51     Реализовать командный интерпретатор #3
gazlan, оно, может, и правильно-грамотно-пафосно, но... Во-первых, в данном случае можно обойтись простейшими операциями со строками. Во-вторых, если посмотрите в код, то увидите, что проблемы как раз с ними - т.е. явно рано хвататься за полноценные парсеры.

Max_92, вообще правильно выше сказали: в предельном случае для анализа токенов пишется полноценный парсер. Но что-то мне подсказывает, что вряд ли стоит хвататься за известную толстенну книгу ради такого сейчас.
По коду ряд претензий.
Во-первых, оформление. Самому-то нормально читается такая каша?
Во-вторых, полный бардак со строками. Т.е. сначала считали в string, потом сохранили в char* и уже работаем с ним. Зачем? Я где-то в соседней теме уже говорил, что можно всегда работать с std::string. Т.е. char* _input можно убрать. И так, к слову, имена, начинающиеся с символа нижнего подчеркивания, зарезервированы, не нужно их использовать.
Теперь про разбор строк... Если формат достаточно простой, то хватит методов std::string: find, size, compare. А для преобразования строки в число - std::stringstream.
Yandex
Объявления
29.05.2013, 05:51     Реализовать командный интерпретатор
Ответ Создать тему
Опции темы

Текущее время: 08:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru