PDA

View Full Version : سوال: کامپایلر cup برای جاوا { مشکله Error : *** More conflicts encountered than expected }



Kevin_Anderson
یک شنبه 06 تیر 1395, 17:59 عصر
سلام بچه ها:لبخندساده:
دارم با ابزار cup کار میکنم که برای جاواست

یه گرامر دارم به شکل زیر

bool ::= NOT bool
| bool AND bool
| bool OR bool
| expr relop expr
| LEFT_PAREN bool RIGHT_PAREN
| ;

وخطا از حالت bool AND bool
و حالت bool OR bool
ناشی میشه

دوستان راه حلی سراغ دارید؟چطور گرامر رو تغییر بدم؟
:متفکر:

Kevin_Anderson
یک شنبه 27 تیر 1395, 15:44 عصر
بچه ها
کسی با ابزار jflex و cup کار کرده؟

vahid-p
یک شنبه 27 تیر 1395, 17:05 عصر
با این ابزار کار نکردم ولی مشابهش ابزارهای دیگه ای مثل Antlr بر ‍پایه جاوا وجود داره

به هر حال. مشکل از گرامر شماست که گرامر مبهمه.
مثلا bool OR bool OR bool میشه به دو طریق براش درخت اشتقاق رسم کرد.

دو مسئله ابهام و چپ گردی در گرامرها رو حتما مطالعه کن.

خب بعضی از ابزارها چپ گردی رو خودشون اتوماتیک حل میکنند و فقط ابهام نباید داشته باشه. برای چنین ابزاری گرامر به صورت زیر ابهام نداره ولی چپ گردی داره که مشکلی ایجاد نمیکنه:
A ::= A or B | B
B ::= B and C | C
C ::= true | false

اگر ابزار مورد استفادت چپ گردی رو اتوماتیک حل نمیکنه، پس میشه:

A ::= B AX
AX ::= or B AX | λ
B ::= C BX
BX ::= and C BX | λ
C ::= true | false

منظور از λ رشته بدون طول هست. ببینید تو ابزارتون به جاش چی مینویسن.

اگر به جز استفادش لازمه بدونید چطور بدست میاد، ‌left-recursion و ambiguity (از مباحث نظریه زبان های برنامه سازی) رو در اینترنت سرچ کنید.