Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как юзеру предоставить возможность выбора вызываемых функций? / 20 сообщений из 20, страница 1 из 1
04.12.2017, 08:58
    #39563440
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
Юзер хочет сам вводить исполняемый код. Например, если юзер пишет:
Код: plaintext
1.
(а && b) || !c


,то надо вычислить выражение:
Код: plaintext
1.
(а() && b()) || !c()



Функций a,b,c, ..... может быть очень много, а с помощью логических операций юзер может их очень затейливо соединять в логические конструкции. Другими словами, создать заранее перечень возможных комбинаций не представляется возможным.

Как такое сделать?
...
Рейтинг: 0 / 0
04.12.2017, 09:06
    #39563442
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
Tiny C Compiler .
Но геморрой всё равно остаётся - надо (как-то) вызывать скомпилированный код, думать о безопасности и т.д. и т.п.

P.S. Не проще ли взять любой встраиваемый интерпретатор?
...
Рейтинг: 0 / 0
04.12.2017, 09:08
    #39563443
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
P.S. lli ещё
...
Рейтинг: 0 / 0
04.12.2017, 09:10
    #39563444
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
...
Рейтинг: 0 / 0
04.12.2017, 13:14
    #39563642
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
AlekseySQLКак такое сделать?

LEXX+YACC+немного кода.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.12.2017, 13:33
    #39563660
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
...
Рейтинг: 0 / 0
04.12.2017, 16:38
    #39563889
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
AlekseySQLЮзер хочет сам вводить исполняемый код. Например, если юзер пишет:
Код: plaintext
1.
(а && b) || !c


,то надо вычислить выражение:
Код: plaintext
1.
(а() && b()) || !c()



Функций a,b,c, ..... может быть очень много, а с помощью логических операций юзер может их очень затейливо соединять в логические конструкции. Другими словами, создать заранее перечень возможных комбинаций не представляется возможным.

Как такое сделать?

Только интерпретатор писать, либо встраивать в программу уже существующий (Python, Lua)
...
Рейтинг: 0 / 0
05.12.2017, 09:02
    #39564135
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
Всем спасибо!
Скорее всего введу правило: строка читается и исполняется только слева направо и буду анализировать строку. Другими словами, напишу свой упрощенный интерпретатор.
...
Рейтинг: 0 / 0
05.12.2017, 09:40
    #39564158
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
AlekseySQL,

В чём упрощённость?
...
Рейтинг: 0 / 0
05.12.2017, 13:00
    #39564326
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
ИзопропилВ чём упрощённость?

На скобки можно забить, на приоритеты операций и прочие мелочи. 2*(2+2) у него будет
выдавать сугубо 6, а 2+2*2 - сугубо 8.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.12.2017, 16:29
    #39564548
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
Dimitry SibiryakovИзопропилВ чём упрощённость?

На скобки можно забить, на приоритеты операций и прочие мелочи. 2*(2+2) у него будет
выдавать сугубо 6, а 2+2*2 - сугубо 8.
Ну нормально. Упрощенная арифметика.
...
Рейтинг: 0 / 0
05.12.2017, 16:50
    #39564566
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
Dimitry SibiryakovИзопропилВ чём упрощённость?

На скобки можно забить, на приоритеты операций и прочие мелочи. 2*(2+2) у него будет
выдавать сугубо 6, а 2+2*2 - сугубо 8.

....Скобки зло!
2 2 * 2 + ->6
2 2 + 2 * ->8

....Много скобок - добро!
( * ( + 2 2 ) 2 ) -> 8
( + ( * 2 2 ) 2 ) -> 6
...
Рейтинг: 0 / 0
05.12.2017, 17:26
    #39564583
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
Vladimir Baskakov.....Скобки зло!
2 2 * 2 + ->6
2 2 + 2 * ->8

Картина маслом по хлебу: ТС обучает своих пользователей Форту.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.12.2017, 17:30
    #39564589
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
Форту.
и лиспу.
...
Рейтинг: 0 / 0
05.12.2017, 18:59
    #39564688
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
Dimitry SibiryakovVladimir Baskakov.....Скобки зло!
2 2 * 2 + ->6
2 2 + 2 * ->8

Картина маслом по хлебу: ТС обучает своих пользователей Форту.
А чего тебя смущает? Я своих учил неоднократно :)
Впрочем, те программы были предназначены для "индустриальных" задач и работали с ними исключительно инженеры, так что проблем не было.
...
Рейтинг: 0 / 0
05.12.2017, 19:03
    #39564689
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
White OwlА чего тебя смущает?

TS.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.12.2017, 20:34
    #39564717
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
AlekseySQLФункций a,b,c, ..... может быть очень много, а с помощью логических операций юзер может их очень затейливо соединять в логические конструкции.

Функций, которые указывает юзер не может быть больше, чем было в С++ коде на момент компиляции.
Если на момент компиляции были функции a(), b() и c(), то юзер не может вызывать функцию d()

AlekseySQLДругими словами, создать заранее перечень возможных комбинаций не представляется возможным.

Значит просто достаточно распарсить выражение юзера и вызывать каждую функцию в соответствие со стратегией вычисления: ленивой или прямой.

AlekseySQLКак такое сделать?

что-то типа такого

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void* f(str pos)
{
    if (pos == "a") return a();
    if (pos == "b") return b();
    if (pos == "c") return c();
    ...
    if (pos == "n") return n();
    return 1;
}



PS. Возможно поможет вот эта шняга http://doc.qt.io/qt-5/qtscript-index.html
...
Рейтинг: 0 / 0
05.12.2017, 20:48
    #39564721
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
Dimitry SibiryakovVladimir Baskakov.....Скобки зло!
2 2 * 2 + ->6
2 2 + 2 * ->8

Картина маслом по хлебу: ТС обучает своих пользователей Форту.

Только зачем? В вики есть готовый исходник как перевести из обычной записи в обратную польскую нотацию
...
Рейтинг: 0 / 0
06.12.2017, 05:21
    #39564802
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
White OwlА чего тебя смущает? Я своих учил неоднократно :)Человек это неинтересно, людей можно научить писать программы. А вот научить компьютер читать и писать программы - это дааа!
...
Рейтинг: 0 / 0
06.12.2017, 14:11
    #39565072
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как юзеру предоставить возможность выбора вызываемых функций?
AlekseySQL,

Еще как вариант - подключить какой-нибудь готовый движок скриптов, скажем ActiveScripting, ему объявить что хост-программа поддерживает такие-то функции / переменные и пусть юзер пишет на этом скриптовом языке хоть с функциями и циклами.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как юзеру предоставить возможность выбора вызываемых функций? / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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