LINUX.ORG.RU

Подставить знак, содержащийся в переменной

 


0

1

Здравствуйте. Я пишу простенький калькулятор на C++. В нем у меня знак действия будет считываться в переменную (act) типа char, а потом оттуда подставляться в result = one act two (результат выполнения act над первым и вторым числом). Подскажите, пожалуйста, как сделать так, чтобы act тут заменялось на действие. Ну или куда копать.

Лучше по-честному написать парсер (получая некоторую древовидную структуру, соотвествующую выражению) и вычислитель (этакий eval, получающий результат).

anonymous
()
Ответ на: комментарий от strangeman

Не совсем, но замечательно подойдет. Спасибо.

KendovNorok
() автор топика

В простейшем случае можно просто хранить в одной переменной результат предыдущего выражения, а в другой - enumeration value, соответствующее операции.

Чуть более сложный способ описан у Бьёрна Страуструпа, «Язык программирования C++».

Можно сделать парсер и дерево, дерево может состоять, например, из указателей на базовый класс Node с методом value(). У Node два сабкласса: BinaryExpression, у которого метод value() вызывает методы value() у дочерних узлов, а затем применяет к ним хранимую в узле операцию, и Constant, у которого value() возвращает хранимое число.

quiet_readonly ★★★★
()
Последнее исправление: quiet_readonly (всего исправлений: 1)
Ответ на: комментарий от quiet_readonly

Я уже читаю Липпмана, но там до такого еще не дошёл.

KendovNorok
() автор топика
Ответ на: комментарий от quiet_readonly

а дерево то зачем получать? ТС-у надо просто получить результат выражения. Если один бинарный оператор это тривиальный case, если более сложное выражение без учета приоритета операций но со скобками это одна простая рекурсивная функция, если с учетом приоритета одна чуть более сложная рекурсивная функция.

ТС же не компилятор пишет;-)

AIv ★★★★★
()
Ответ на: комментарий от Uter

кстати да. И писать его проще, и считать на нем проще :)

dikiy ★★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.