Откриване/възстановяване на грешки в YACC/Bison

Четох ръководствата за използването на символа за грешка, yyerrok и т.н. Притеснението ми е как да добавя правила за грешки към анализатора, без да прекалявам или да не добавям достатъчно.

Има ли някакви общи насоки, които трябва да следвам, като се има предвид, че ще анализирам опростена програма на Java? Трябва ли всяко правило да съдържа откриване/възстановяване на грешки? Има ли най-прост подход, който се оказва ефективен при изпълнението на тези задачи? В момента търся само синтактични грешки.

Благодаря за всеки/всички отговори предварително.


person Leif    schedule 28.02.2012    source източник


Отговори (1)


Обикновено искате да използвате пестеливо правилата за възстановяване на грешки в yacc/bison файл. Най-добре е да имате само едно или две правила за грешки от най-високо ниво, а не много правила за грешки в листови продукции, тъй като всъщност повторното синхронизиране правилно в листно правило е много трудно.

Най-простият подход за Java-подобен език е да има само правило като:

BlockStatement: error ';'

В този случай, ако получите някаква синтактична грешка, докато анализирате оператор, анализаторът просто ще изхвърли входни токени, докато стигне до ; и ще действа така, сякаш току-що е завършил израз. Това работи адекватно за грешки, РАЗЛИЧНИ от липсващ ; в края на блока.

person Chris Dodd    schedule 28.02.2012