Инфикс С++ для префикса преобразования для логических условий

Я хочу оценить одно выражение в С++. Чтобы оценить это, я хочу, чтобы выражение было преобразовано в формат префикса.

Вот пример

 wstring expression = "Feature1 And Feature2";

Вот возможные способы.

 expression = "Feature1 And (Feature2 Or Feature3)";

 expression = "Not Feature1 Or Feature3";

Здесь И, Или, Не зарезервированы слова и круглые скобки ( " (", )) используются для области

Не имеет более высокий приоритет

И устанавливается следующий приоритет: Not

Или имеет следующий приоритет: And

БЕЛОЕ ПРОСТРАНСТВО, используемое для разделителя. Выражение имеет нет другие элементы, такие как TAB, NEWLINE

Я не нуждаются арифметические выражения. Я могу сделать оценку, но может ли кто-нибудь помочь мне преобразовать строки в префиксную нотацию?

Ответ 1

Вам нужно будет построить грамматику спереди. Так зачем же все разбирать вручную. Вместо этого используйте библиотеку синтаксического анализатора, например Boost-Spirit. Или lex/yacc или flex/bison.

Затем используйте AST, созданный конструктором синтаксического анализатора, чтобы выводить данные любым удобным вам образом. Такие как infix для префикса или постфикса,... и т.д.

Ответ 2

Я предполагаю, что вы намерены оценить состояние. поэтому вам не нужен полноценный парсер.

Прежде всего вам не нужно работать со строками здесь. 1. Преобразуйте "Feature 1", чтобы сказать Id (целое число, которое представляет собой функцию)

Итак, утверждение "Feature1 And (Feature2 Or Feature3)"; сказать (1 & (2 | 3) Отсюда... вы можете использовать стандартную версию Infix для префикса и оценить префиксную нотацию.

Вот алгоритм преобразования инфикса в префикс http://www.c4swimmers.esmartguy.com/in2pre.htm http://www.programmersheaven.com/2/Art_Expressions_p1

Ответ 3

Используйте генератор парсера, например, пару Lex/Yacc.