2010-04-01 8 views
10

C++ 'da bir ifadeyi değerlendirmek istiyorum. Bunu değerlendirmek için, ifadenin önek formatına dönüştürülmesini istiyorum.C++ mantıksal koşullar için önek dönüşümüne infix

İşte Burada

wstring expression = "Feature1 And Feature2"; 

olası yolları bir örnektir.

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

expression = "Not Feature1 Or Feature3"; 
İşte

Ve, Ya, Değil saklıdır kelime ve parantezler ("(", )) kapsam için kullanılan

Değil yüksek önceliğe

sahiptir

Ve s et sonraki öncelik

Ya sınırlayıcı için kullanılan yanında öncelik Ve

BEYAZ SPACE ayarlandığında Değil. İfade yapmam TAB, NEWLINE

gibi hiçbir diğer elemanları değilaritmetik ifadelere ihtiyaç vardır. Değerlendirmeyi yapabilirim ama birileri dizeleri önek notasyonuna dönüştürmeme yardım edebilir mi?

+0

beyaz boşluk türleridir önek dönüştürmek algoritmasıdır. Gerçekten uzay karakteri mi dedin? Lütfen bu bilgi ile sorunuza açıklık getirin. –

+0

Infix'in önekle dönüştürülmesi, düzgün bir ev ödevi görevidir, ancak gerçek dünyada işe yaramaz.Seçenekler: (A) infix ayrıştırmak ve gitmek (B) infix Ayrıştırma, önek için çeviri, önek, ayrıştırma önekini üretmek, gidin. Ayrıştırma öneki daha kolay olsa bile, _conversion_ süreci daha yavaştır. –

cevap

-1

Lex/Yacc çifti gibi bir ayrıştırıcı üreteci kullanın.

+0

Lex/Yacc tür ayırıcılardan daha çok korkuyorum. Var olduklarını biliyordum ama onları nasıl verimli kullanacağımı bilmiyorum. –

3

Dilbilgisini öne çıkarmanız gerekecek. Öyleyse neden hep elle ayrışıyorsun? Bunun yerine, Boost-Spirit gibi bir ayrıştırıcı oluşturma kitaplığı kullanın. Ya da lex/yacc veya flex/bison.

Veriyi herhangi bir şekilde görüntülemek için ayrıştırıcı oluşturucu tarafından oluşturulan AST kullanın. Önek veya postfix, ... vb.

1

Sanırım amacınız durumu değerlendirmektir. bu nedenle tam teşekküllü bir ayrıştırıcısına ihtiyacınız yoktur.

Öncelikle burada dizelerle çalışmak zorunda değilsiniz. 1. dönüştürme "Özellik 1" dönüşüm önek standart infix kullanabilir ve değerlendirebilir ... Bir Kimliği (bir özellik temsil eden bir tamsayı)

Yani, deyim "Feature1 And (Feature2 Or Feature3)"; burada andan itibaren (1 & (2 | 3) söylemek demek ön ek gösterimi. İşte

infix kongre TAB ve NEWLINE By http://www.c4swimmers.esmartguy.com/in2pre.htm http://www.programmersheaven.com/2/Art_Expressions_p1

+1

Bir koşulu değerlendirmek için, metni ayrıştırmanız gerekir ... bu nedenle bir tür bir ayrıştırıcı gereklidir ... Ayrıca infix'ten öneke dönüştürme işlemi, operatörlerin ilişkilendirme kurallarını ve operatörlerin önceliklerini bilmesi gerektiğinden ayrıştırmayı gerektirir doğru ... –

+1

Ben ayrıştırma ihtiyacımız yok dint söylüyorum. Lex/yacc gibi tam teşekküllü bir çözümleyiciye ihtiyacımız olmadığını söyledim. Bunu kullanarak önek dönüşümüne bir infix yapmak bir şakadır. yani bu durumda AST'yi inşa etmeye ihtiyacımız yok. – SysAdmin