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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cpp_job
4 / 4 / 1
Регистрация: 25.11.2013
Сообщений: 108
#1

Как написать анализатор команд? - C++

04.11.2015, 21:33. Просмотров 268. Ответов 11
Метки нет (Все метки)

Как написать анализатор команд?

-[команда]

Ну например

-call_calculator -module_plus -first_var 10 -second 5


Значит разбить на подстроки по пробелам?
Что делать если юзать сложную конструкцию с используя 2+ параметров?
-first_var 10

В кодесе не нуждаюсь, просто хочу узнать правильность хода мыслей.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2015, 21:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как написать анализатор команд? (C++):

Анализатор команд - C++
помогите написать анализатор команд на с++

Написать анализатор кода, определяющий тип лексем - C++
Допустим есть строка и мне нужно её поделить на точки, запятые, else и так далее, как это сделать на c++ Добавлено через 1 минуту if...

Написать программу результатов матчей футбольных команд (Используя контейнер map) - C++
Помогите пожалуйста, никогда не имела дела с контейнерами((( Задание: футбольные команды (через map). Пользователь вводит название...

Написать программу, работающую со спортивным клубом, состоящим из команд, выполненных в виде структуры - C++
Задача: Описать структуру с именем Team, содержащую следующие поля: игроки команды (массив из 11 строк), название команды, домашний...

Написала программу, но не знаю, как анализатор добавить в нее - C++
#include<iostream> int main() { double da, db, dc; char op; std::cout << "Введите 1 число: "; std::cin >> da; ...

подскажите как сделать анализатор для короля в шахматах - C++
Помогите сделать анализатор на шах, мат, пат скоро сдача курсовой и это последний элемент. Если конкретно то нужны проверки может ли король...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mesteriis
373 / 156 / 40
Регистрация: 08.08.2015
Сообщений: 1,107
Завершенные тесты: 1
04.11.2015, 22:08 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
cpp_job, Пдсказка виде алгоритма, ловим строку, парсим ее таки образом читаем до -{имя переменной} потом откусываем пробел {значение переменной}, после читаем переменные и если есть значение или еще что то выполняем алгоритм действий
1
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
04.11.2015, 22:18 #3
Цитата Сообщение от cpp_job Посмотреть сообщение
Как написать анализатор команд?
Анализатор команд чего?
0
cpp_job
4 / 4 / 1
Регистрация: 25.11.2013
Сообщений: 108
05.11.2015, 17:35  [ТС] #4
castaway, для своего приложения, чтобы задавать параметры в нем строкой команд.

Описал все в задании.
Где-то недавно задавали вопрос как написать калькулятор вида "111+11-2". Вот думаю найти и преобразовать код под себя, а человек выше вашего поста мне уже подсказал, как это реализовать.
Может будут у вас тоже идеии? Смело говорите, мне будет интересно Вас выслушать!

Добавлено через 5 минут
Вот нашел.. Конвертация string в vector по условию
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
05.11.2015, 17:39 #5
cpp_job, я не просто так спросил. Дело в том, что параметры командной строки уже разбиты по пробелам, и находятся во втором параметре функции main, а их количество в первом.
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
05.11.2015, 17:41 #6
Цитата Сообщение от cpp_job Посмотреть сообщение
чтобы задавать параметры в нем строкой команд
Я вот это использую, очень мощная вещь.
0
cpp_job
4 / 4 / 1
Регистрация: 25.11.2013
Сообщений: 108
05.11.2015, 17:50  [ТС] #7
castaway, существование argc и argv я знаю. Если не ошибаюсь, то эти параметры задаются с запуском приложения через консоль. А я хочу задавать эти параметры именно в своем приложении.

Тоесть запустить свой test.exe, указать запуск функции умножения.

-umnozenie -arg_first 10 -arg_second 2
Я думаю нужно разделять по -. А потом разбивать по пробелам.

Ну и после этой команды должна вызваться функция умножения, которая выдаст на экран число 20.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
05.11.2015, 17:56 #8
Цитата Сообщение от cpp_job Посмотреть сообщение
Тоесть запустить свой test.exe, указать запуск функции умножения.
Я не понимаю что ты имеешь в виду. На псевдокоде можешь показать?
0
cpp_job
4 / 4 / 1
Регистрация: 25.11.2013
Сообщений: 108
05.11.2015, 18:05  [ТС] #9
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
#include <stdio.h>
#include <cstring> 
#include <locale>
 
#pragma warning(disable:4996)
 
int main(void)
{
    setlocale(0, "rus");
    char str[24] = "-calk -var1 10 -var2 10";
    char sep[3] = "-";
    char *istr;
 
    printf("Исходная строка : %s\n", str);
    printf("Результат разбиения : \n\n");
    // Выделение первой части строки
    istr = strtok(str, sep);
 
    // Выделение последующих частей
    while (istr != NULL)
    {
        // Вывод очередной выделенной части
        printf("%s\n", istr);
        // Выделение очередной части строки
        istr = strtok(NULL, sep);
    }
    getchar();
    return 0;
}
Вот налдыбал кодес с юзаньем strtok.

Блин, плохо знач объясняю, ну извини тогда(

Добавлено через 2 минуты
Ну теперь думаю создать двухмерный массив, в котором будет хранится индекс и строка.
А дальше делать прогон по этому массиву и искать calk, если есть, то ищем два аргумента их тоже разбить и выделить функцией atoi и преобразовать их в число, посчитать и вывести на экран.

Добавлено через 48 секунд
Правилен ли мой ход мыслей?

Добавлено через 1 минуту
Конечно это все можно перенести на вектора. Но есть ли смысл?
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
05.11.2015, 19:17 #10
Понял. Тебе надо просто распарсить строку, а дальше как с argv.

Добавлено через 1 час 11 минут
Может я чего-то не понял.. Вопрос решён? Или у тебя что-то не получается?
1
cpp_job
05.11.2015, 21:00  [ТС]
  #11

Не по теме:

castaway, все хорошо не парся ты все правильно понял, это я забыл словечко умное "парсер"))

0
Mesteriis
373 / 156 / 40
Регистрация: 08.08.2015
Сообщений: 1,107
Завершенные тесты: 1
06.11.2015, 00:11 #12
Цитата Сообщение от cpp_job Посмотреть сообщение
Конечно это все можно перенести на вектора. Но есть ли смысл?
Вот прям правильный вопрос ты задал сете, зачем вектор? у тебя что там будет хренова туча действий (да и для этих целей вектор не то) в твоем случае по моему вообще проще не заморачиватся и реализовать все через условия, будет это свич или обычные ифы тут уже решай сам!

Добавлено через 1 минуту
Тем более ты изначально знаешь набор действий которые заносишь в программу и тебе не надо их добавлять по ходу пьесы, так что не лезь в массивы в этой задаче!
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2015, 00:11
Привет! Вот еще темы с ответами:

Использование Bat команд в С++ try как использовать - C++
try в С++ не ясно :popcorn: //////////////BAT//////////////// ConsoleApplication1.exe 220 458 ...

Анализатор - C++
Просто подскажите в чем ошибка ? ( не компелируется) #include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;string&gt; using namespace...

Анализатор звука - C++
Собственно, как его организовать? Что-то порылся в гуглу, ничего не нашел. Может я неправильно выражаюсь, но я про &quot;эквалайзер&quot;, который...

Синтаксический анализатор - C++
Нужна помощь именно с алгоритмом. Задание звучит так - проверить корректность написания заголовка функции. Прототипы не учитываются. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.11.2015, 00:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru