Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> >> Преобразование данные в код, Преобразование данные в код 
:(
    Опции темы
Killerman
Дата 27.3.2009, 12:35 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Можно ли както в программе на С++ преобразовывать вводимые данные в код а не в данные?

тоесть к примеру получаем из файла или из потока строку данных, к примеру:

char x1*
cin>>x1; // здесь вводим к примеру  a1 ==15

а после этого идет условие

if(x1){...........}

как то так. или иначе. тоесть сделать чтото вроде динамического выполнения кода.
На сколько я понимаю вопрос, то нельзя. Но может както можна?

Это сообщение отредактировал(а) Killerman - 27.3.2009, 12:35
PM MAIL   Вверх
Fazil6
Дата 27.3.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(Killerman @  27.3.2009,  12:35 Найти цитируемый пост)
Но может както можна?

можно примерно вот так:

Описываем грамматику языка
Реализуем синтаксический и семантический анализаторы кода
Реализуем конструкции грамматики.

Судя по тому как ты задал вопрос, то похоже, что мой ответ сводится к слову НЕЛЬЗЯ

PM MAIL   Вверх
Killerman
Дата 27.3.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Грамматику создавать конечно выход, но это реализовывать очень долго. К тому же, на сколько я понимаю - это уже будет мой язык программирования, и явно - не уровня С++.  А я именно его хочу (хотел) использовать.

всетаки какой ограниченный этот С++.

Это сообщение отредактировал(а) Killerman - 27.3.2009, 12:57
PM MAIL   Вверх
GoldFinch
Дата 27.3.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Killerman, напиши свою функцию eval() и выложи здесь
PM MAIL ICQ   Вверх
mes
Дата 27.3.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Killerman @  27.3.2009,  11:56 Найти цитируемый пост)
Грамматику создавать конечно выход, но это реализовывать очень долго.

можно проще, прикрути компилятор smile

Цитата(Killerman @  27.3.2009,  11:56 Найти цитируемый пост)
всетаки какой ограниченный этот С++. 

Если хотите использовать скрипты, то, например, lua , насколько я знаю, неплохо прикручивается к cpp и не только она.
smile

Добавлено через 2 минуты и 8 секунд
и для разбора  математических выражений  также полно разных библиотек,  спроси у Гугля, думаю он не откажет помочь в поиске smile


--------------------
PM MAIL WWW   Вверх
zim22
Дата 27.3.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Killerman, используйте JavaScript. В нём можно динамически генерировать код. С++ отдыхает. smile


--------------------
PM MAIL   Вверх
Killerman
Дата 27.3.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Ясно, скрипты. А есть чтото конкретное, чтобы привинтить к Вижуал Студии?
Мне нада к примеру в окне вводить строку, и чтобы она обрабатывалась потом в моей программе на С++. Или то - же самое, из текстового файла. или массива какого то в том же коде программы.

PM MAIL   Вверх
Killerman
Дата 27.3.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Я прочел о Lua - это интерпретатор. Тоесть при каждом изменении кода - он как бы перекомпилирует код снова.
Получается, что если у меня скомпилирован exe файл на С++ (Вижуал Студия), то я уже не могу использовать Скрипты для изменения этого exe файла.
Я к примеру не смогу изменить код функции в классе, (если эта функция уже скомпилирована) - без перекомпиляции exe файла в Вижуал Студии.
PM MAIL   Вверх
mes
Дата 27.3.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Killerman @  27.3.2009,  12:50 Найти цитируемый пост)
Я прочел о Lua - это интерпретатор. Тоесть при каждом изменении кода - он как бы перекомпилирует код снова.
Получается, что если у меня скомпилирован exe файл на С++ (Вижуал Студия), то я уже не могу использовать Скрипты для изменения этого exe файла.
Я к примеру не смогу изменить код функции в классе, (если эта функция уже скомпилирована) - без перекомпиляции exe файла в Вижуал Студии. 

Если нужно, чтоб каждая строчка программы была подвержена изменениям, то Вам надо смотреть в сторону интерпретаторов,
если же нужно позволить программе позволить "настраивать себя" скриптами, то вполне подойдет связка cpp+lua. 

Вы же упрекаете сковородку , в том что в ней неудобно варить суп - не забывайте, что у каждого из инструментов своя область применения.
И в добавок немножко перефразирую для многих известную подпись одного из форумчан :
"Правильно поставленная задача - это наполовину готовое решение" smile


Это сообщение отредактировал(а) mes - 27.3.2009, 15:36


--------------------
PM MAIL WWW   Вверх
Killerman
Дата 27.3.2009, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



ну у меня задача была чтобы программа сама изменяла свои функции и сохраняла их в файле после этого. А потом опять загружала и изменяла. как бы - самосовершенствование.  smile 
Но похоже прийдется придумать чтото попроще по задумке и сложнее по способу реализации.
PM MAIL   Вверх
Anikmar
Дата 27.3.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Killerman @  27.3.2009,  18:44 Найти цитируемый пост)
ну у меня задача была чтобы программа сама изменяла свои функции и сохраняла их в файле после этого. А потом опять загружала и изменяла. как бы - самосовершенствование.   
Но похоже прийдется придумать чтото попроще по задумке и сложнее по способу реализации. 

Терминатора создаете?  smile 
PM MAIL ICQ   Вверх
adejneka
Дата 27.3.2009, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 8.7.2005
Где: Москва, Россия

Репутация: нет
Всего: 11



Цитата(Killerman @ 27.3.2009,  18:44)
ну у меня задача была чтобы программа сама изменяла свои функции и сохраняла их в файле после этого. А потом опять загружала и изменяла. как бы - самосовершенствование.  

Создаёте текстовый файл с текстом функции на С++, напускаете на него компилятор с указанием собрать DLL, затем подгружаете созданную DLL и вызываете из неё нужную функцию. Когда функция больше не нужна - DLL выгружаете. Пример - Embeddable Common LIsp.
PM MAIL   Вверх
Lazin
Дата 27.3.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Killerman @  27.3.2009,  18:44 Найти цитируемый пост)
ну у меня задача была чтобы программа сама изменяла свои функции и сохраняла их в файле после этого. А потом опять загружала и изменяла. как бы - самосовершенствование.

сначала программа сортирует массив пузырьком, потом вставками, спустя еще какое-то время - слиянием, спустя год - получает контроль над ядерными ракетами и начинает войну против людей! smile 
PM MAIL Skype GTalk   Вверх
Killerman
Дата 27.3.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Какие вы впечатлительные.  smile 
На самом деле, да, появилась идея разработать программу для самообучения. Но это такое мозгодолбание оказалось, даже для реализации простейших идей. Я и не подозревал.

adejneka
Да, но это типа подключение ДЛЛ и использование ее функций. А я хотел по ходу использования потом изменять эти функции.
И что это будет за ИИ, с чужим интерпритатором на хвосте?  smile 


На самом деле я тоже задумывался, что лучшей средой для работы ИИ есть интерпретатор, так как хоть как то код изменяется, а не как с компилятором - скомпилировал жесткий еxe или dll, и логику уже менять нельзя, или можно, но с помощью кучи разветвлений (условий), уже заранее предусмотренных в тексте (или своей же грамматики, но это - тот же интерпретатор, только свой).





Это сообщение отредактировал(а) Killerman - 27.3.2009, 20:36
PM MAIL   Вверх
adejneka
Дата 27.3.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 8.7.2005
Где: Москва, Россия

Репутация: нет
Всего: 11



Выгрузили DLL - обновили исходник - перекомпилировали - загрузили обновлённую версию. В чём проблема? Естественно, в языках, ориентированных на динамическое обновление кода, типа Lisp или Smalltalk это проще, но в C++ тоже можно реализовать.
PM MAIL   Вверх
Killerman
Дата 27.3.2009, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



adejneka
Хотя это интересно - запускаем программу code.exe, в ней создается файл какой то, типа first.срр, потом "как то" запускаем его компиляцию и создаем first.dll Потом подключаем ее и используем, потом создаем   second.срр уже с усовершенствованными функциями и компилим в second.dll.
Отключаем от code.exe  - first.dll , подключаем second.dll и т.д.

Токо как компилить файл сpp с помощью параметров? как запустить приложение (Студию) я знаю, а как скомпилить потом нужный файл?

Это сообщение отредактировал(а) Killerman - 27.3.2009, 20:48
PM MAIL   Вверх
Anikmar
Дата 27.3.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Killerman @  27.3.2009,  20:47 Найти цитируемый пост)
Токо как компилить файл сpp с помощью параметров? как запустить приложение (Студию) я знаю, а как скомпилить потом нужный файл?

Использовать компилятор командной строки, разумеется. Наверняка в студии он есть.
PM MAIL ICQ   Вверх
Killerman
Дата 27.3.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Представляю, Т-1000 с Мелкософтной Студией внутри  smile  smile 

"Это мой CPU, он способен к самообучению, но тумблер блокирован специльно, так как Студия шароварная" 8-))))

Это сообщение отредактировал(а) Killerman - 27.3.2009, 21:03
PM MAIL   Вверх
Anikmar
Дата 27.3.2009, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Killerman @  27.3.2009,  21:00 Найти цитируемый пост)
Представляю, Т-1000 с Мелкософтной Студией внутри

Думаете с gwbasic'ом он бы смотрелся лучше?  smile 
PM MAIL ICQ   Вверх
Killerman
Дата 27.3.2009, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Он бы так развился, что создал бы свой собственный компилятор.  smile  И язык программирования тоже. 
Вот облом, придется делать другим способом.

PM MAIL   Вверх
0xDX
Дата 28.3.2009, 03:26 (ссылка)    | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 6.2.2009

Репутация: нет
Всего: нет



C++ и генерация кода, это дажет новичок сможет

генерируем функцию таким образом

Код

void function()
{
      __asm nop
}
по

__asm nop будем задавать размер функции(__asm nop количество байт)

берем наш код(который был создан динамически) транслируем в байты(как переводить в байты если кто не знает читает книгу двойных слов)

получаем  адрес функции, и просто копируем байты, послу чего устанавливаем регистр eip() ну вот и все.

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

Не ну конечно полный новичок не справится...........
PM MAIL   Вверх
mes
Дата 28.3.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(0xDX @  28.3.2009,  02:26 Найти цитируемый пост)
C++ и генерация кода, это даже новичок сможет

ну и где в вашем рассказе генерация машинного кода из исходного ?




--------------------
PM MAIL WWW   Вверх
Lazin
Дата 28.3.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



в с++ возможна геренация кода, в compile time, с помощью шаблонов и препроцессора smile 
К.О.
PM MAIL Skype GTalk   Вверх
Master01
Дата 29.3.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 22.8.2007

Репутация: 2
Всего: 2



вообще мне кажется здесь дело не в С++. а в том, что подход к ИИ и обучению абсолютно не правильный. Я не притендую на сколь бы то ни было серьёзные знания в этой области, smile  но вот почему-то уверен - не так оно делается.

мне кажется правельней было б сначала почитать про AI - неоронные сети, генетические алгоитмы, fuzzy logic и т.д.

если уж делать, то делать правильно! smile  да и императивные программирование для такого дела - не лучший выбор
PM MAIL   Вверх
Killerman
Дата 31.3.2009, 17:55 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Master01
нейронные сети читал - это туфта, ну это мое мнение.  smile 
fuzzy logic читал (еже мягкие вычисления, нечеткая логика) - ну оно не является ядром ИИ а скорее как вспомагательное, для усреднения значений грубо говоря (плавного перехода).
генетически алгоритмы - книг не читал, но так, пару статей - идея похожа на мою, но смысл другой.  smile
Вопще весело все это.   Но покачто никто ИИ не сделал. smile



 

Это сообщение отредактировал(а) Killerman - 31.3.2009, 17:57
PM MAIL   Вверх
Anikmar
Дата 31.3.2009, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



 smile 
Программу ИИ можно считать завершенной, как только комп будет сваливать свои ошибки на соседний компьютер и шутить шутками босса.  smile 
PM MAIL ICQ   Вверх
semibug
Дата 31.3.2009, 21:53 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Так как программы писаные на C++ процессорами x86 (и похоже большинством остальных) не выполняются непосредственно, имеем два варианта:
1. Интерпретировать модифицируемый кусок программы. Как вариант заюзать что-нибудь из готовых решений (когда то, лет 5 назад, сталкивался, что-то вроде Embedded C++ Interpretor).
2. Превратить сишный код в код процессора. Можно конечно и вручную написать компилятор. Но лучше использовать готовый. От студии например. Как верно заметил adejneka удобнее всего при каждом изменении текста программы компилить DLL и затем использовать её.

Если задача стоит только в вычислении выражений, представленных строками, то про эти два способа лучше не думать, а использовать готовые реализации eval();

Ну и самый лучший на мой взгляд вариант - пересмотреть архитектуру с тем, чтобы не требовалось изменений на уровне исходного текста. Накопление информации реализуется более простыми путями.

ЗЫ. Чуть более сложный способ (только для экспертов 70-го уровня). Разрабатываем процессор, способный исполнять сишный код. Проще всего на большой ПЛИС типа Vertex, которую можно прикупить в виде PCI-E платы. Дальше пишем устройство проца на VHDL, и запускаем самомодифицируемые проги на c++ без использования внешних компиляторов/интерпретаторов/dll.
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1140 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.