|
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
|
||
Выполнить строку27.06.2009, 13:13. Показов 6736. Ответов 35
Метки нет (Все метки)
Здравствуйте, подскажите наиболее простой вариант решения проблемы.
Есть строка типа
0
|
||
| 27.06.2009, 13:13 | |
|
Ответы с готовыми решениями:
35
Выполнить код, записанный в строку
Как запустить командную строку, выполнить команду и считать полученные данные |
|
Айхрень...
306 / 176 / 7
Регистрация: 02.06.2009
Сообщений: 1,077
|
|
| 27.06.2009, 13:15 | |
|
не знаю встроенных в С++ способов импорта строки в выражение, но можно напистаь простенький парсер с использованием строковых операций С++.
0
|
|
|
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
|
|
| 27.06.2009, 13:17 | |
|
0
|
|
|
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
|
|
| 27.06.2009, 15:06 [ТС] | |
|
Да вот уже нашел обратную запись. Сижу правлю.
0
|
|
|
|
|
| 27.06.2009, 16:05 | |
|
Польской записи недостаточно. Тут есть ещё и вызовы функций
А по поводу разбора выражений посмотреть можно тут: Представление выражения в двоичном дереве посты 3 и 5
0
|
|
|
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
|
|
| 27.06.2009, 16:13 | |
|
какая разница - операция или функция? просто операция - функция от двух переменных, а просто функция - от одной переменной, фактически она тоже операция, только унитарная
к примеру, нет никакой принципиальнй разницы в разборе выражения 3 2 + и 123 f1 запись 3 2 + эквивалентна 3 2 plus, где plus - функция от 2х переменных
1
|
|
|
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
|
|
| 27.06.2009, 23:13 [ТС] | |
|
Так а в стеке же хранится символьные операторы. Что нужно переделывать стек под строки, если функции вводить.
0
|
|
|
|
||||||
| 27.06.2009, 23:46 | ||||||
|
Да как угодно, лишь бы это потом можно было прочесть. Условно говоря, можно так:
0
|
||||||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
| 28.06.2009, 13:09 | |
|
Перевести в perl.
Потом дернуть perl интерпретатор для вычисления выражения. Хотя perl трудно интегрировать в С++. Можно использовать lua: перевести это выражение в язык lua и выполнить. http://www.lua.org/ Реализация lua есть для C/C++. Но придется немного изучить документации. Зато попутно можно будет делать много чего еще: lua - мощный язык. Или сделать все самому. 2evg: на самом деле если подумать, то функция не отличается от операции. Если пользоваться терминами язык Форт, то у нас есть два вида операций. 1) Положить константу на стек 2) Выполнить слово. Слово - это и операция и функция. Слово берет некоторое кол-во верхних элементов со стека, что-то делает и кладет некоторое кол-во верхних элементов на стек. Например слово '+': снять 2 элемента со стека, сложить и их, результат положить на стек. Слово 'f1': снять со стека одно число, положить на стек результат функции f1 от этого числа. И так далее.
0
|
|
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
|
| 28.06.2009, 14:16 | |
|
Если кому еще интересно, то вот моя давнешняя реализация Польской нотации. Я тогда в библиотеке прочел статейку по неё, нета у меня еще тогда не было, и я загорелся желанием написать прогу(вообще-то появилось желание написать интерпретатор Си, но руки не дошли). Там кстати есть и функции(sin cos...). Написано на Билдере 6.
0
|
|
|
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
|
|
| 28.06.2009, 14:45 [ТС] | |
|
Спасибо, гляну.
0
|
|
|
|
|||
| 28.06.2009, 17:19 | |||
![]()
0
|
|||
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
|
| 28.06.2009, 17:28 | |
|
Перл может и трудновато, а Луа элементарно встраивается.
Я по началу все никак не мог найти себе нормального скриптового движка, а потом как нашел Lua... мне больше ничего не надо.
0
|
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
| 28.06.2009, 17:55 | |
|
Я так понял, что строки которые нужно вычислить подаются снаружи и могут быть разными.
Ну допустим исходник на C ты сгенеришь - а что ты с ним дальше делать будешь ? Компилировать ? Тогда тебе придется вместе с программой таскать еще и компилятор C. Например Visual Studio 2005 ))А lua как раз это и есть - он тебе пропарсит и выполнит твое выражение.
0
|
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
| 28.06.2009, 20:24 | |
|
Кому нужна программа - это уже вопрос к автору.
А чтобы дернуть компилятор из программы - тоже код писать нужно, обрабатывать ошибки, куда-то класть временные файлы и т.д. Это в UNIX/Linux/BSD все просто - в 99% случаев в системе есть gcc, запустить его не составляет больших проблем. Но там и perl можно вызвать - это будет еще проще
0
|
|
|
|
|
| 28.06.2009, 22:42 | |
|
Хорошо. Выскажу своё мнение открытым текстом. Товарищу нужно сделать задачу из разряда тех, что дают в институте, при этом он не знает как. Всякие заумные советы типа perl, lua - товарищ и слов-то таких наверное не слышал.
0
|
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
| 28.06.2009, 23:02 | |
|
Заумные советы типа сгенерировать C-ный файл, потом его откомпилировать - это IMHO не лучше
0
|
|
| 28.06.2009, 23:02 | |
|
Помогаю со студенческими работами здесь
20
Выполнить строку в формате base64 Как выполнить строку SQL из функции Выполнить команду через командную строку Какая функция или пакет может выполнить поданную на вход строку? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
|
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|