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

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

Вот пример

 wstring expression = "Feature1 And Feature2";

Вот возможные пути.

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

 expression = "Not Feature1 Or Feature3";

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

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

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

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

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

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

10
задан genisage 15 July 2014 в 17:10
поделиться

3 ответа

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

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

3
ответ дан 4 December 2019 в 04:21
поделиться

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

Во-первых, здесь не нужно работать со строками. 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

1
ответ дан 4 December 2019 в 04:21
поделиться

Использование генератор парсеров наподобие пары Lex / Yacc.

-1
ответ дан 4 December 2019 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: