powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Это плохо или нормуль ?
11 сообщений из 11, страница 1 из 1
Это плохо или нормуль ?
    #39522674
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то раз у меня была нужда написать командный интерпретатор.
При том, что я совершенно не представлял себе как это делать.
Почесал репу и придумал такой вариант:

Пишется класс с кучей методов на все нужные команды.
Далее интерпретатор берет строку и пробует найти нужный метод с соотв. параметрами.
В строке сначала команда - имя метода, далее параметры через пробел.
Если валидация прошла, вызываем метод через рефлексию.

Вышло с одной стороны просто и быстро, с другой стороны сомнительно.

Как думаете, так норм или стоило поискать других вариантов ?
...
Рейтинг: 0 / 0
Это плохо или нормуль ?
    #39522685
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы сделал чуть иначе.

Один объект класса 1, который представляет собой командную строку и её разбор (разделение на команду и параметры). Плюс поиск обработчика.
В нем регистрируются объекты потомки абстрактного класса 2 - команды. В них есть идентификаторы команд и метод обработки параметров с возвращаемым результатом.

Когда будет нужна новая команда, то создается потомок класса 2 и регистрируется в объекте класса 1.
...
Рейтинг: 0 / 0
Это плохо или нормуль ?
    #39522720
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы не парился и задействовал Bison.
...
Рейтинг: 0 / 0
Это плохо или нормуль ?
    #39522875
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grok,

Специально для этого существуют учебники. В первую очередь: " Драконья книга "
...
Рейтинг: 0 / 0
Это плохо или нормуль ?
    #39522945
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА я бы не парился и задействовал Bison.
сначала flex
...
Рейтинг: 0 / 0
Это плохо или нормуль ?
    #39523037
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- читаем входную строку
- разбиваем её на две (по первому пробелу): команда и аргументы
- команду ищем в ассоциативном массиве (мапе) cmdName -> Command, где Command - интерфейс с одним методом Result run(String arguments)
- вызываем реализацию нужной команды, реализация сама парсит свои аргументы, делает полезную работу и возвращает результат для вывода на экран.
...
Рейтинг: 0 / 0
Это плохо или нормуль ?
    #39523086
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grok Вышло с одной стороны просто и быстро, с другой стороны сомнительно.

Как думаете, так норм или стоило поискать других вариантов ?
так смотря сколько команд, насколько сложных и вариативных, будет ли это все развиваться и разрастаться со временем, на каком языке, нет ли на нем уже готовых решений? Я думаю что ==поиск вариантов== - не самоцель. кусок проги может быть не идеален, но если у него вполне понятный интерфейс, такой что его можно выдернуть и заменить - это нормально. По моему.
...
Рейтинг: 0 / 0
Это плохо или нормуль ?
    #39523551
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал бы почти как wadman.

Парсер командной строки, в котором регистрируются доступные команды по имени (для простого и быстрого поиска в какой-нить хэш массив загнал бы)
Сами команды представляют из себя тоже объекты с методами parse (предопределённый, но каждая команда может его переписать под свои нужды и разбирать собственные параметры как ей вздумается) и run (а этот абстрактный, разумеется, что бы каждая команда его определила под себя).

Тогда основной парсер читает только название команды и передаёт управление непосредственно нужному объекту, а тот устанавливает свои атрибуты самостоятельно и запускает run. Ещё в объект команды можно было бы запихнуть разные методы help и другую вспомогательную мелочь для удобства
...
Рейтинг: 0 / 0
Это плохо или нормуль ?
    #39523622
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfреализация сама парсит свои аргументы

мне казалось, реализации вообще лучше не знать что оно в каком-то интерпретаторе используется.
single responsibility принцип.

разве только сделать трехслойную схему.

PS: а всякие лексические/синтаксические анализаторы,
это имхо "микроскопом гвозди забивать"
для задач такого уровня.
...
Рейтинг: 0 / 0
Это плохо или нормуль ?
    #39523732
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grokscfреализация сама парсит свои аргументы

мне казалось, реализации вообще лучше не знать что оно в каком-то интерпретаторе используется.
single responsibility принцип.

разве только сделать трехслойную схему.

PS: а всякие лексические/синтаксические анализаторы,
это имхо "микроскопом гвозди забивать"
для задач такого уровня.

А при таком подходе она и не знает. Тут следует уточнить, что команда по сути принимает 1 строковый параметр, но как его интерпретировать решает самостоятельно. Тут было бы менее правильно возлагать такую работу на глобальный объект, который понятия не имеет для чего будет использоваться та или иная команда и что ей может для работы понадобиться.

Если возлагать эту работу на основной интерпретатор, то команды придётся заганять в узкие рамки протокола получения аргументов, а это минус к гибкости.
...
Рейтинг: 0 / 0
Это плохо или нормуль ?
    #39524254
паттерн
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
grokКак-то раз у меня была нужда написать командный интерпретатор.
При том, что я совершенно не представлял себе как это делать.
Почесал репу и придумал такой вариант:

Пишется класс с кучей методов на все нужные команды.
Далее интерпретатор берет строку и пробует найти нужный метод с соотв. параметрами.
В строке сначала команда - имя метода, далее параметры через пробел.
Если валидация прошла, вызываем метод через рефлексию.

Вышло с одной стороны просто и быстро, с другой стороны сомнительно.

Как думаете, так норм или стоило поискать других вариантов ?
Всё запихнуть в один класс - классический антипаттерн.

В общем случае это очень распространенная задачка программирования. Любая серверная часть двухзвенки.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Это плохо или нормуль ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]