2013-09-12 3 views
4

Я генерирующего If Else выражения следующего форматаПреобразование строки в код во время выполнения C++

If(X > 10) Then Fly = True Else Fly = False 
If(X > 9) Then Fly = True Else Fly = False 
If(X > 8) Then Fly = True Else Fly = False 
If(X > 7) Then Fly = True Else Fly = False 
If(X > 6) Then Fly = True Else Fly = False 

Я задавался вопросом Могу ли я выполнить эти выражения во время выполнения? Я не знаю, ясно ли мой вопрос.

Я добавлю пример

String = ""; 
for(int i = 0; i < n; i++) 
{ 
    string ="if(x > 10){Fly = true;} else {Fly = False;}"; 
    Execute (Expression HERE)! 

} 

Возможно ли это сделать? lol Спасибо. Хани.

+0

насчет https: // root.cern.ch/cling? Или посмотрите: http://stackoverflow.com/questions/69539/have-you-used-any-of-the-c-interpreters-not-compilers –

ответ

4

Можно использовать TCC (http://bellard.org/tcc/). Он позволяет компилировать и запускать код изначально во время выполнения. Другой подход - использовать интерпретатор, есть много (LUA, Python и т. Д., См. Список wiki).

+0

Ohh звучит интересно, да, конечно, было бы лучше. Я действительно знаю pythong, и я начал думать, насколько это сложно. –

+0

И один вопрос Ракс, пожалуйста. Я могу включить его в свой код правильно? Как, например, в for ** Loop ** Я могу использовать ** выражение ** для компиляции строки –

+0

Да, вы можете скомпилировать любой c-код, который включает выражения и любую функцию c-языка. Для ваших нужд вы можете сделать c-функции, которые принимают аргументы и вычисляют возвращаемое вычисленное выражение. TCC будет компилировать этот код, и вы можете получить указатель на эту функцию и оценить ее в любое время. Я думаю, что весь код в TCC привязан контекстом, пока контекст инициализируется, скомпилированный код может быть выполнен. – Raxvan

3

№ C++ - это скомпилированный язык и не имеет функции eval или подобного. Возможно, вы захотите включить в свою программу скриптовый движок, например Lua

+0

Да, я видел, что на Java у них есть функция Eval , подумал, что здесь будет одно и то же. –

+0

Даже в Java их нет (потому что Java также является скомпилированным языком). Однако в JavaScript они делают. Не путайте Java и JavaScript. –

3

Нет, если вы не применили Greenspun's 10th rule.

+0

спасибо зеленый. Я подумаю об этом, если я не получу никакого ответа, я вернусь. Но спасибо в любом случае –

4

Один не просто интерпретирует код C/C++ ... AFAIK вы просто не можете.
(за исключением, если вы собираете другой двоичный и запустить его из CMD линия может быть ...)

Примечание: Вы можете написать

fly = (x > 10); 

вместо

if(x > 10){ 
    fly = true; 
}else{ 
    fly = false; 
} 
Смежные вопросы