Как создать функцию из пользовательского ввода? - PullRequest
3 голосов
/ 31 июля 2011

Так что мне нужно использовать два массива в моей программе.A - массив точек данных (значения x принимает).и B является массивом функций от x.Оба должны быть введены пользователем (с клавиатуры).

Моя проблема заключается в чтении в элементах B. Например, A = {1,2,3} и B = {sin (x), x + 5}, где x должен принимать всезначения A. Я относительно новичок в c ++ и не уверен, что это лучший способ сделать это.Я где-то читал о разборе, но это казалось немного сложным.Можно ли это сделать без разбора?

Ответы [ 2 ]

2 голосов
/ 31 июля 2011

Нет, это сложно .C ++ является статически типизированным и неотражающим языком: вы не можете создать действительный код C ++ во время выполнения .

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

Boost содержит несколько библиотек, которые помогут вам в этом ( Spirit ), я полагаю, но это также не очень сложно сделать вручную.Вам просто нужно преобразовать входные данные в токены и создать дерево разбора.

1 голос
/ 31 июля 2011

Лучше всего использовать библиотеку синтаксических анализаторов, например FunctionParser .Другие варианты включают использование языка сценариев, такого как Lua или Squirrel , и использование отдельного приложения калькулятора командной строки.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...