Kodumun sınıf bölümünde, bir hata yazarsam, hata yapmaması gereken birkaç satır hata olarak bildirilir. Hatalardan kurtarmanın iyi/güvenli olduğu belirli yerlerde '| error
' koydum ama onu kullanmıyor sanırım. Belki bir yerde orta ifadeye devam etmeye çalışıyordur?bizmeme: bir hata ek hataya neden olur ama hatalı hata
Bison'u belirlenen konumlarda kurtarmayı denemem için bir yol var mı? Nasıl çalışır ve yanlış ne yapabilirim?
Döngüün yanındaki hata satırını koydum.
SomeRuleLoop:
| Rule ',' SomeRuleLoop
Rule:
A
| B
| C
| Error
A:
AA AAB AABC
| AA AAB AABC Z
...
İşte
Adetlerimden bir örnektir: İşte bir örnek. Konsolumda "funcBody hatası" görüyorum ancak bir sonraki satır ilk hata nedeniyle hata alıyor. Her funcBodyRule bağımsız olsa da.
funcBodyLoop:
| funcBodyLoop funcBody
funcBody:
funcBodyRule
| error { printf("funcBody error"); $$=0; }
| '#' EQ { printf("still in funcBody\n"); $$=0; }
Birinci hatayı ve 2. satırı olan satırı arasına # == yazmayı denedim. Ayrıştırıcının hala funcbody döngüsünde olup olmadığını kontrol etmek için bunu yazdım.
Bu bir hata vermez, bu nedenle
. Nevermind ben bir printf ekledim ve dize basılmadı, bu yüzden artık fonksiyon döngüsünde değil mi? Bunu nasıl düzeltirim?
Bize yardımcı olmak için bazı kodlar olmadan çok fazla yardımcı olmak imkansız olacak. ** Ama ** minimum kodlara yakın olmalı, birkaç yüz satır değil. –
@Jonathan Leffler: Döngünün nerede olduğu. Sorgumu değiştirdim –
Yacc (Bison) 'un büyük/küçük harfe duyarlı olduğunu biliyorsunuz, bu yüzden' Error 'seçeneğiyle' error '(' built in '(yerleşik) olan ve belirli bir anlamı olan w.r.t hatası kurtarma) ile aynı şey değil. –