ben Boole ifadeleri bir özyinelemeli iniş ayrıştırıcı yazıyorum tarafından boolean ifadeler, içinde: 1 'True' olduğunuAyrıştırma + ve * örneğin özyinelemeli kökenli
(1 * 0)
(0 + ~1)
(0 * (1 + c)
, 0 ' 'Yanlış' olduğunu + olduğu ya da ',' is 've', 'değil' ve 'c' sadece bir değişken ismidir (herhangi bir tek alfabetik harf olabilir). Bir çeşit işlem sırasını uygulamak yerine parantez kullanmayı düşünüyorum.
Bulunduğum ayrıştırıcı ifade
Expression ::= 1
| 0
| Character
| ~ Expression
aşağıdaki formu tanıyabilir Ama bunun üstüne * + uygulamak ve edileceği konusunda emin değilim. Ben o-özyinelemeli sol 'gibi sonsuz bir döngüye neden misiniz
Expression ::= 1
| 0
| Character
| (Expression + Expression)
| (Expression * Expression)
bariz uygulanmasını ne okudum oldukça eminim. Böyle sonsuz özyineyi ortadan kaldırmak için bunu nasıl değiştireceğime emin değilim.
Yinelemeli bir soy ayrıştırıcısının nasıl yazılacağına dair cevabımı görün: http://stackoverflow.com/questions/2245962/is-there-an-alternative-for-flex-bison-that-is-usable-on- 8-bit gömülü sistemlerini/2336769 # 2336769 –