Как разобрать выражения в C ++ - PullRequest
11 голосов
/ 05 августа 2011

Я хочу разобрать выражения, такие как res = ((a * (2 + b)) / c) +5.603+ (6 * (d ^ 5)).Я хочу сделать это только на С ++.

Ответы [ 3 ]

4 голосов
/ 05 августа 2011

Ознакомьтесь с часто задаваемыми вопросами "Доступные библиотеки C ++"

1 голос
/ 05 августа 2011

Страуструп объясняет, как вы оцениваете выражения типа ((1*(2+3))/4)+5.603+(6*(11^5)).По сути, вы строите дерево оценки для всех подвыражений.

В вашем примере есть три дополнительных шага.При разборе вы должны отметить переменные a, а при оценке вы должны заменить переменные их текущими значениями.Наконец, вам нужно присвоить результат переменным.

Вы можете использовать std::map<std::string, double> для хранения имен и значений переменных.

0 голосов
/ 05 августа 2011

Здесь подробно рассматривается возможный подход:

http://www.ibm.com/developerworks/library/j-w3eval/index.html

Код написан на Java, но вполне переносим для C ++.

...