Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Обработка ошибок

 

При обнаружении синтаксической ошибки в лексеме лексический анализатор возвращает вместо номера распознанной лексемы номер ошибки. В свою очередь, LL(1)-распознаватель должен выдать сообщение о характере ошибки и месте ошибочного символа во входном тексте. Для этого лексический анализатор должен отслеживать номер строки текста и номер символа в строке. При выдаче диагностического сообщения нужно выдавать также кусок текста, где обнаружена ошибка: так ее легче будет найти пользователю.

Аналогичным образом LL(1)-распознаватель должен выдать сообщение, если лексемы были правильными, а ошибка обнаружена на уровне синтаксиса КС-грамматики.

Ошибки могут также обнаружиться при работе семантических программ распознавателя. Так, например, в ОПС вместо имени переменной записывается ее тип и порядковый номер в таблице переменных. Но для этого предварительно необходимо произвести поиск имен переменных в таблицах, сформированных при анализе описаний переменных. Понятно, что если в программе обнаружится не описанная ранее переменная, то это должно сигнализироваться, как ошибка. Могут быть и такие ошибки, как недопустимая операция для типа переменной, к которой эта операция применяется, например, индексирование простой переменной или индексирование двумя индексами имени одномерного массива и др.

В любом случае продолжать генерацию ОПС не имеет смысла, и после выдачи диагностического сообщения трансляцию можно прекратить. Во многих случаях это оправдано, так как современные компьютеры работают в диалоговом режиме, поэтому не сложно после исправления ошибки снова запустить транслятор. Однако при первоначальной отладке, когда в программе ошибок бывает очень много, такая технология не слишком удобна: лучше было бы выдать сообщения обо всех ошибках сразу, чтобы затем их сразу все можно было бы исправить перед повторной трансляцией.

Некоторые из видов ошибок можно обнаружить все (или почти все) за один проход. Это ошибки, обнаруживаемые лексическим анализатором, так как лексемы выделяются им по отдельности, независимо друг от друга. В то же время ошибки на уровне синтаксиса КС-грамматики приводят, чаще всего, к невозможности дальнейшего анализа входного текста. Ошибки, обнаруживаемые семантическими программами анализатора (при генерации ОПС) не нарушают работу LL-анализа, поэтому анализ (без генерации ОПС) можно продолжать.

Тогда, при обнаружении первой ошибки лексического анализа можно прекратить LL-анализ, но повторно запускать лексический анализатор до конца входного текста для обнаружения других ошибок в лексемах.

При обнаружении первой семантической ошибки LL-анализ можно продолжать для того, чтобы можно было выявить и другие семантические ошибки.

Запуск программы на выполнение возможен только после того, как полностью сгенерирована ОПС, т.е. когда синтаксических ошибок в программе не осталось, и нет тех семантических ошибок, которые обнаруживаются семантическими программами. Однако ошибки могут обнаруживаться при выполнении программы. В частности, при выполнении операции индексации при проверке значений индексов на предмет выхода их за допустимые пределы. Такие проверки следует возлагать на интерпретатор.

При обнаружении подобных ошибок дальнейшее выполнение программы становится невозможным, а от интерпретатора требуется выдать диагностическое сообщение о месте ошибки, виде ошибки, а также значения переменных, из-за которых возникла ошибка. Это можно сделать, так как интерпретатору доступны таблицы переменных с их именами и значениями. Для того, чтобы определить место возникновения ошибки в исходном тексте программы, при генерации ОПС можно сформировать таблицу ссылок из исходного текста на ОПС, например, таким образом: для каждой строчки исходного текста ссылка должна содержать номер соответствующего ей элемента в ОПС.



<== предыдущая страница | следующая страница ==>
Распределение памяти и описание переменных | Распределение памяти при генерации команд

Дата добавления: 2015-07-26; просмотров: 131; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.002 сек.