2014-12-22 4 views
3

Возможно ли, что строковая переменная может быть проанализирована как фактическая строка кода на C++? Например, может ли эта строка, "x=0", анализироваться как действительный код и установить значение x (некоторая случайная величина в программе) до нуля? То, что я планирую сделать с этим, - это то, что я хочу сделать простой плоттер на C++. Пользователь вводит функцию (функция будет в терминах x и y и будет иметь нулевое значение) для построения в виде строки (например, 2*y+x), которая затем преобразуется в объект кода и затем вычисляется соответствующим образом с использованием цикла.Разбор строки как строки кода в C++

+1

Не изначально нет. Вам нужно будет создать свою собственную систему, и это не тривиально. – Borgleader

+0

Насколько я знаю, на C++ нет встроенного синтаксического анализатора. Но вы можете попробовать с boost :: spirit. Создание парсера для таких функций не должно быть слишком сложным. –

+2

Этот вопрос не соответствует теме, потому что речь идет о функции, которая не поддерживается на языке. Быстрый ответ на вопрос - это просто «Нет». –

ответ

0

Короткий ответ «Нет». Вы не можете компилировать C/C++ «на лету», как это, поскольку это скомпилированный язык, а не интерпретированный.

Но вот идея: вы можете встроить JavaScript-интерпретатор, используя the SpiderMonkey API, который может интерпретировать все фрагменты кода вашего примера, поскольку синтаксис JavaScript очень похож на C/C++ в этом отношении.

1

Поскольку C++ - это скомпилированный и связанный язык, он не подходит для летной оценки.

Но я достиг чего-то похожего на ваши цели в прошлом с C++ на embedding a Python interpretter для оценки кода Python как строки «на лету» и передачи результатов на код C++.

Некоторые другие популярные языки сценариев, которые могут быть встроены в программу на C++, - Lua и Squirrel.

В Java я сделал то же самое, вставив Groovy interpretter.

Вам необходимо интегрировать язык interpretter сценариев в ваш код «вложение», а затем передавать значения из кода языка сценариев к вашему C++ код процесс «marshaling»

Если вы действительно хотите C++ синтаксис, которые могут быть интерпретируются с, это теоретически можно разработать динамический анализатор и interpretter для подмножества языка, но C++ является сложным языком и такая задача была бы огромна проведения сопряжено с трудностями и по существу, случай неправильного использования инструмент для работы.

+0

См. Мой ответ; Я думаю, что JavaScript имеет более близкий синтаксис к C/C++, чем Java, Python или любой другой упомянутый язык. –

+0

Я работал над проектом, который запускал C-компилятор для «оценки» C-кода. Хлоп. – nalply

0

Короткий ответ: «Да». Компиляция C++ на лету отлично работает с использованием C++ JIT. От llvm.org

A Just-In-Time (JIT) системы генерации кода, который в настоящее время поддерживает X86, X86-64, ARM, AArch64, MIPS, PowerPC, Systemz и PowerPC-64.

Предполагается, что вы готовы связать большую часть компилятора в своей программе, чтобы достичь этого. С помощью согласованных усилий вы сможете написать «eval» поверх существующего API.