bison, error recovery
От: ezdoctor  
Дата: 23.04.14 13:09
Оценка:
Доброго всем дня.
Пытаюсь написать небольшой парсер, но не получается сделать грамотно error recovery.
Вкратце. Есть такая конструкция: ВЫРАЖЕНИЕ и СПИСОК ВЫРАЖЕНИЙ, разделенных ';'. Также есть БЛОК: список выражений, завершенный ';'.
    expression_list
    : expression
      { ... } 
    | expression_list ';' expression
      { ... }
//    | error  // this doesn't work
//      { yyerrok; }
//    | error ';'  // this neither work
//      { yyerrok; }

    expression
    : '{' expression_list ';' '}'
      { ... }
   ...

Хочется сделать error recovery, то есть при возникновении ошибки внутри выражения продолжить парсинг со следующего (того, что после ';').
Руки у меня оказались кривые, и при попытке сделать что-то вроде того, что закомментировано на предыдущем отрывке, парсинг следующего выражения продолжается уже не с чистого состояния, а уже как-то криво (то есть при парсинге программы со списком из одинаковых выражений с ошибкой первое выражение дает syntax error в нужном месте, а последующие уже нет).

Может, есть здесь кто-нибудь набивший руку на таких вещах, покажет на пальцах, как в принципе такое делается?
P.S. Доку по бизону почитал, но пока мне это не помогло.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.