Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_SPO-1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
162.3 Кб
Скачать

13. Формальные системы и языки программирования. Понятие о грамматике языка. Классификация языков и грамматик.

Грамматикаэто описание способа построения предложений некоторого языка.

Иными словами, грамматика — это математическая система, определяющая язык.

Фактически, определив грамматику языка, мы указываем правила порождения

цепочек символов, принадлежащих этому языку. Таким образом, грамматика —

это генератор цепочек языка. Она относится ко второму способу определения

языков — порождению цепочек символов.

Грамматику языка можно описать различными способами. Например, грамматика

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

в начальной школе. Для некоторых языков (в том числе для синтаксических

конструкций языков программирования) можно использовать формальное опи-

сание грамматики, построенное на основе системы правил (или продукций).

Грамматика языка программирования содержит правила двух типов: первые (оп-

ределяющие синтаксические конструкции языка) довольно легко поддаются фор-

мальному описанию; вторые (определяющие семантические ограничения языка)

обычно излагаются в неформальной форме. Поэтому любое описание (или стан-

дарт) языка программирования обычно состоит из двух частей: вначале фор-

мально излагаются правила построения синтаксических конструкций, а потом

на естественном языке дается описание семантических правил.

Классификация языков и грамматик

Выше уже упоминались различные типы грамматик, но не было указано, как

и по какому принципу они подразделяются на типы. Для человека языки быва-

ют простые и сложные, но это сугубо субъективное мнение, которое зачастую за-

висит от личности человека.

Для компиляторов языки также можно разделить на простые и сложные, но в дан-

ном случае существуют жесткие критерии для такого подразделения. Как будет

показано далее, от того, к какому типу относится тот или иной язык программи-

рования, зависит сложность компилятора для этого языка. Чем сложнее язык,

тем выше вычислительные затраты компилятора на анализ цепочек исходной

программы, написанной на этом языке, а следовательно, сложнее сам компиля-

тор и его структура. Для некоторых типов языков в принципе невозможно по-

строить компилятор, который бы анализировал исходные тексты на этих языках

за приемлемое время на основе ограниченных вычислительных ресурсов (имен-

но поэтому до сих пор невозможно создавать программы на естественных язы-

ках, например на русском или английском).

14. Методы лексического, семантического и синтаксического анализа. Распознаватели. Задача разбора.

Распознаватель (или разборщик) — это специальный автомат, который позволяет

определить принадлежность цепочки символов некоторому языку. Задача распо-

знавателя заключается в том, чтобы на основании исходной цепочки дать ответ

на вопрос, принадлежит ли она заданному языку или нет. Распознаватели, как было сказано выше, представляют собой один из способов определения языка.

Разработчики компилятора всегда имеют дело с уже определенным языком про-

граммирования. Грамматика для синтаксических конструкций этого языка из-

вестна. Она, как правило, четко описана в стандарте языка. Задача разработчиков

заключается в том, чтобы построить распознаватель для заданного языка, ,

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

Таким образом, задача разбора в общем виде заключается в следующем: на осно-

ве имеющейся грамматики некоторого языка построить распознаватель для это-

го языка. Заданная грамматика и распознаватель должны быть эквивалентны, то

есть определять один и тот же язык (часто допускается, чтобы они были почти

эквивалентны, поскольку пустая цепочка во внимание обычно не принимается).

Задача разбора в общем виде может быть решена не для всех языков. Разработ-

чиков компиляторов интересуют прежде всего синтаксические конструкции

языков программирования. Для этих конструкций доказано, что задача разбора

для них разрешима. Более того, для них найдены формальные методы ее реше-

ния.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]