Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Контекстно-свободные грамматики




Обработка синтаксических ошибок

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

Любая программа потенциально содержит множество ошибок самого разного уровня. Например, ошибки могут быть

· лексическими, такими как неверно записанные идентификаторы, ключевые слова или операторы;

· синтаксическими, например арифметические выражения с несбалансированными скобками;

· семантическими, такими как операторы, применяемые к несовместимым с ними операндам;

· логическими, например бесконечная рекурсия.

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

Обработчик ошибок синтаксического анализатора имеет очень просто формулируе­мые цели:

· он должен ясно и точно сообщать о наличии ошибок;

· он должен обеспечивать быстрое восстановление после ошибки, чтобы продолжить поиск последующих ошибок.

Многие языки программирования по своей природе имеют рекурсивную структуру, которая может определяться контекстно-свободными грамматиками. Например, условная инструкция, определяется следующим правилом.

Если S1 и S2 являются инструкциями, а E — выражением, то

if E then S1 else S2 (5.1)

является инструкцией

Этот тип условных инструкций не может быть определен с использованием регуляр­ных выражений. Используя для обозначения класса инструкций синтаксическую переменную stmt, а для класса выражений — ехрr, можно выразить (5.1) с помощью продукции грамматики

stmt —> if expr then stmt else stmt (5.2)

Определение контекстно-свободной грамматики включает в себя понятия терминалов, нетерминалов, стартового символа и про­дукций.

1. Терминалы представляют собой базовые символы, из которых формируются строки. В (5.2) каждое из ключевых слов if, then, else является терминалом.

2. Нетерминалы представляют собой синтаксические переменные, которые обозначают множества строк. В (5.2) stmt и ехрr являются нетерминалами. Нетерминалы определяют множества строк, которые помогают в определении языка, порождаемого грамматикой. Кроме того, они налагают на язык иерархическую структуру, облегчающую синтаксический анализ и трансляцию.

3. Один из нетерминалов грамматики считается стартовым символом, и множество строк, которые он обозначает, является языком, определяемым грамматикой.

4. Продукции грамматики определяют способ, которым терминалы и нетерминалы могут объединяться для создания строк. Каждая продукция состоит из нетерминала, за которым следует стрелка (или символ:: =, если грамматика записана в форме Бэкуса–Наура), и строка нетерминалов и терминалов.

5. Общий вид правил A®b, где AÎN, bÎV+.




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 986; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.