C++ инфикс към префикс преобразуване за логически условия

Искам да оценя един израз в C++. За да го оценя, искам изразът да бъде преобразуван във формат на префикс.

Ето един пример

 wstring expression = "Feature1 And Feature2";

Ето възможни начини.

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

 expression = "Not Feature1 Or Feature3";

Тук И, Или, Не са запазени думи и скоби ("(", )) се използват за обхват

Не има по-висок приоритет

И е зададен като следващ приоритет на Не

Или е зададен като следващ приоритет на И

БЯЛО ИНТЕРВАЛ използвано за разделител. Изразът няма няма други елементи като TAB, NEWLINE

Не стрябват аритметични изрази. Мога да направя оценката, но може ли някой да ми помогне да преобразувам низовете в нотация с префикс?


person Community    schedule 01.04.2010    source източник
comment
По конвенция TAB и NEWLINE са типове WHITESPACE. Наистина ли имахте предвид символа SPACE? Моля, изяснете въпроса си с тази информация.   -  person Jason D    schedule 09.04.2010
comment
Преобразуването на инфикс в префикс е чиста домашна работа, но безполезна в реалния свят. Опции: (A) Анализирайте инфикс и отидете (B) Анализирайте инфикс, преведете в префикс, произведете префикс, анализирайте префикс, отидете. Дори ако анализирането на префикса е по-лесно, процесът на преобразуване е по-бавен.   -  person Mooing Duck    schedule 15.07.2014


Отговори (3)


Ще трябва да изградите граматиката отпред. Така че защо да правите целия анализ на ръка. Вместо това използвайте библиотека за създаване на анализатор като Boost-Spirit. Или lex/yacc или flex/bison.

След това използвайте AST, генериран от създателя на анализатора, за да изведете данните по какъвто начин сметнете за подходящ. Като инфикс към префикс или постфикс и т.н.

person Jason D    schedule 01.04.2010

Предполагам, че намерението ви е да оцените състоянието. следователно не се нуждаете от пълноценен анализатор.

Първо, не е нужно да работите с низове тук. 1. Преобразувайте „Функция 1“, за да кажете идентификатор (цяло число, което представлява функция)

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

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

person SysAdmin    schedule 01.04.2010
comment
за да оцените условие, трябва да анализирате текста... следователно е необходим някакъв вид анализатор... Освен това преобразуването от инфикс в префикс изисква анализиране, тъй като човек трябва да знае правилата за асоциативност и приоритета на операторите, за да направи ти правилно ... - person Jason D; 09.04.2010
comment
Не казвам, че нямаме нужда от анализ. Казах, че не се нуждаем от пълноценен анализатор като lex/yacc. правенето на преобразуване на инфикс в префикс с помощта на това е шега. т.е. не е необходимо да конструираме AST в този случай. - person SysAdmin; 09.04.2010

Използвайте генератор на анализатор като двойката Lex/Yacc.

person Ken Bloom    schedule 01.04.2010
comment
Повече се страхувам от анализаторите на Lex/Yacc. Знаех, че съществуват, но не знам как да ги използвам ефективно. - person ; 01.04.2010