Я хочу оценить одно выражение в C++. Для оценки его я хочу, чтобы выражение было преобразовано в формат префикса.
Вот пример
wstring expression = "Feature1 And Feature2";
Вот возможные пути.
expression = "Feature1 And (Feature2 Or Feature3)";
expression = "Not Feature1 Or Feature3";
Здесь И, Или, Не зарезервированные слова, и круглые скобки (" (")) используются для объема
Не имеет более высокий приоритет
И установлен следующий приоритет на Нет
Или установлен на следующий приоритет к И
ПРОБЕЛ используется для разделителя. Выражение не имеет никаких других элементов как ВКЛАДКА, НОВАЯ СТРОКА
Мне не нужны арифметические выражения. Я могу сделать оценку, но кто-то может помочь мне преобразовать строки в префиксную нотацию?
Вам нужно будет построить грамматику заранее. Так зачем все разбирать вручную. Вместо этого используйте библиотеку построителя синтаксического анализатора, например Boost-Spirit . Или lex / yacc, или flex / bison.
Затем используйте AST , сгенерированный построителем синтаксического анализатора, для вывода данных любым удобным для вас способом. Например, от инфикса до префикса или постфикса и т. Д.
Я предполагаю, что вы намерены оценить состояние. следовательно, вам не нужен полноценный парсер.
Во-первых, здесь не нужно работать со строками. 1. Преобразуйте «Feature 1» в Id (целое число, которое представляет функцию)
Итак, утверждение «Feature1 And (Feature2 Or Feature3)»;
, чтобы сказать (1 & (2 | 3)
С этого момента ... вы можете использовать стандартный инфикс для преобразования префикса и оценки нотации префикса th.
Вот алгоритм преобразования инфикса в префикс http://www.c4swimmers.esmartguy.com/in2pre.htm http://www.programmersheaven.com/2/Art_Expressions_p1
Использование генератор парсеров наподобие пары Lex / Yacc.