Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 88 стр.

UptoLike

88
15. ВОССТАНОВЛЕНИЕ ПРИ СИНТАКСИЧЕСКИХ
ОШИБКАХ
В процессе анализа текста программы, транслятор должен выдавать
соответствующую диагностику об ошибках и продолжать процесс
грамматического разбора, возможно находя дальнейшие ошибки.
Для продолжения работы, можно:
1. сделать какие-то предположения о том, что на самом деле имел в виду
автор неправильной программы;
2. пропустить некоторую часть входной последовательности;
3. попытаться восстановить
текст и при неудаче пропустить часть
последовательности.
Сделать достаточно разумные предположения о действительных
намерениях программиста сложно, поэтому этот подход применяется редко,
хотя работы в этом направлении ведутся.
При 2-м подходе применимы следующие рекомендации.
Восстановление намного облегчается в случае языка с простой
структурой. Так, если при обнаружении ошибки пропускается какая-то
часть
входной последовательности, то язык обязательно должен содержать
служебные (ключевые) слова, неправильное употребление которых
маловероятно и которые поэтому могут использоваться для возобновления
грамматического разбора.
По построению программы грамматического разбора. При появлении
неправильной конструкции процедура должна пропустить входной текст,
пока не встретится символ, который по правилам может следовать за той
конструкцией языка
, которую она пыталась обнаружить. Это означает, что
каждой процедуре грамматического разбора в момент ее текущей активации
должно быть известно множество внешних символов (следующих за
разбираемой конструкцией). В конце каждой процедуры вставляется явная
проверка: действительно ли следующий символ входного текста содержится
среди этих внешних символов.
                                                                            88
        15.   ВОССТАНОВЛЕНИЕ ПРИ СИНТАКСИЧЕСКИХ
                         ОШИБКАХ
     В процессе анализа текста программы, транслятор должен выдавать
соответствующую    диагностику      об   ошибках    и    продолжать    процесс
грамматического разбора, возможно находя дальнейшие ошибки.
     Для продолжения работы, можно:
1. сделать какие-то предположения о том, что на самом деле имел в виду
   автор неправильной программы;
2. пропустить некоторую часть входной последовательности;
3. попытаться восстановить текст и при неудаче пропустить часть
   последовательности.
     Сделать достаточно разумные предположения о действительных
намерениях программиста сложно, поэтому этот подход применяется редко,
хотя работы в этом направлении ведутся.
     При 2-м подходе применимы следующие рекомендации.
     Восстановление намного облегчается в случае языка с простой
структурой. Так, если при обнаружении ошибки пропускается какая-то часть
входной последовательности, то язык обязательно должен содержать
служебные     (ключевые)   слова,    неправильное       употребление   которых
маловероятно и которые поэтому могут использоваться для возобновления
грамматического разбора.
     По построению программы грамматического разбора. При появлении
неправильной конструкции процедура должна пропустить входной текст,
пока не встретится символ, который по правилам может следовать за той
конструкцией языка, которую она пыталась обнаружить. Это означает, что
каждой процедуре грамматического разбора в момент ее текущей активации
должно быть известно множество внешних символов (следующих за
разбираемой конструкцией). В конце каждой процедуры вставляется явная
проверка: действительно ли следующий символ входного текста содержится
среди этих внешних символов.