динамический — Реализация решателя в C ++ для проблем, описанных в некотором синтаксисе сценариев

У меня есть общий вопрос о том, как написать код C ++ для решения общего класса проблем. Класс проблем описан на некотором языке сценариев, который будет динамически читаться программой c ++. Например. Проблема может быть описана следующим образом:

syms a b c x
sol = solve(a*x^2 + b*x + c == 0)
sola = solve(a*x^2 + b*x + c == 0, a)

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

1

Решение

Общая архитектура вашей программы будет выглядеть следующим образом:

введите описание изображения здесь

(от разбор статья в википедии)

Есть много учебников, охватывающих лексический анализ, разбор и построение деревьев разбора или, чаще, абстрактных синтаксических деревьев (AST). Смотрите, например, Учебник по калейдоскопу от LLVM.

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

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

Решатель проанализирует структуру задачи и применит соответствующие методы, чтобы найти решение для уравнения. Например, если x переменная и a, b а также c параметры в вашем примере, он может обнаружить, что это квадратное уравнение и применить хорошо известные формулы, чтобы найти решение.

0

Другие решения


По вопросам рекламы [email protected]