Уравнения синтаксического анализа C ++, предоставленные пользователем

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

float equationone(float x)
{
return  sqrt(x);
}

float equationtwo(float x)
{
return (x * x);
}

Мне интересно, как я могу адаптировать свой код, чтобы пользователь мог ввести что-то вроде sqrt(x) или же (x*x) и функции возвращают правильный ответ.

1

Решение

Это не так тривиальная задача, потому что вы скоро захотите иметь круглые скобки, операторные приоритеты и так далее.
Вам нужно создать синтаксический анализатор. Если вы хотите научиться создавать его с нуля, попробуйте найти ANTLR. Вы в основном делегируете инструмент для создания кода, который нелегко создать вручную. Конечно, вам нужно научиться писать грамматические определения, но это, вероятно, окупится в будущем. Если вместо этого вам нужно в кратчайшие сроки обслужить реального клиента с помощью языка сценариев, подумайте о чем-то другом, кроме c ++.
Посмотри на этот другой ответ на Stackoverflow.

2

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

Вам нужно написать анализатор, чтобы разбить строку на компоненты (числа, операторы и т. Д.), А затем использовать обратная полировка обработать это. На странице есть ссылки о том, как конвертировать в инфиксную нотацию для обратной польской нотации. LEX / YACC может помочь вам сделать немного разбора.

1

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