LINUX.ORG.RU

Пропуск ошибочных конструкций в yacc


0

0

Пишу анализатор на yacc/lex ассемблерных файлов. Пока что он должен разобрать входной файл и вывести его же: совпали файлы - хорошо, не совпали - не хорошо. Для упрощения написал грамматику только непосредственно для инструкций, а все остальные конструкции (которые не подходят под грамматику) хочу вывести без изменений. Для вывода конструкций, не являющихся инструкциями хочу использовать встроенный механизм обработки ошибок yacc - добавил правило с error. Внутри правила вывожу значение соответствующей переменной, но получаю не совсем то, что хотел - ожидал, что получу все значение строки, которую парсер не смог разобрать, а получаю только небольшой ее кусок. Есть какие-нибудь способы решить эту проблему?

Получилось так:

program:

   | program '\n'

      {   fprintf( yyout, «\n» ); }   

   | program instruction '\n'

   | program error { yyclearin; fprintf (yyout, «%s », $2);}

   ;

codergeneration
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.