Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Gos_YPMT_1.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
101.89 Кб
Скачать

ВОПРОСЫ ДЛЯ ГОСЭКЗАМЕНА ПО ТЕМЕ «ЯЗЫКИ ПРОГРАММИРОВАНИЯ И МЕТОДЫ ТРАНСЛЯЦИИ»

1 ЯЗЫКИ, ГРАММАТИКИ И ИХ КЛАССИФИКАЦИЯ. ПРИМЕРЫ КОНТЕКСТНО-СВОБОДНЫХ ГРАММАТИК.

2 ТРАНСЛЯЦИЯ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ.

3 КЛАССЫ. СВОЙСТВА И МЕТОДЫ, ЗАЩИТА ЭЛЕМЕНТОВ КЛАССОВ. СОЗДАНИЕ И УНИЧТОЖЕНИЕ ОБЪЕКТОВ.

4 УПРАВЛЕНИЕ ДИНАМИЧЕСКОЙ ПАМЯТЬЮ.

5 ТЕХНОЛОГИЯ СОЗДАНИЯ ПРОГРАММ И КОМПЛЕКСОВ. ВИЗУАЛЬНОЕ ПРОГРАММИРОВАНИЕ.

6 ПРЕПРОЦЕССОР И ЕГО ОСНОВНЫЕ ВОЗМОЖНОСТИ.

7 АДРЕСА, УКАЗАТЕЛИ, ССЫЛКИ. АДРЕСНАЯ АРИФМЕТИКА.

1. Языки, грамматики и их классификация. Примеры контекстно-свободных грамматик.

Определение грамматики с фразовой структурой

Языки, порождаемые грамматиками

Классы грамматик

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

Дерево разбора предложения

Примеры грамматик для идентификаторов, для целых чисел

Дополнения:

Алгоритмы разбора снизу-вверх и сверху-вниз

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

Грамматика с фразовой структурой (ГФС) G определяется как четверка <T, N, s, P>, T – множество терминальных символов, N – множество нетерминальных символов (переменных), s – начальный символ (нетерминальный символ), P – множество правил подстановки (продукций) вида s1 ---> s2, где s1 – непустая строка символов из , s2 – строка символов из . Содержательно, нетерминальные символы это вспомогательные (промежуточные) переменные, терминальные символы – символы, используемые в предложениях порождаемого языка, а правила подстановки определяют правила замены одних групп символов в строках на другие.

Строка s2 непосредственно порождается строкой s1, если строка s1, имеет вид s1 = x1 y1 x2, а строка s2 = x1 y2 x2, где x1 и x2 произвольные строки , а в множестве P есть правило вида y1 ---> y2. Строка sn порождается строкой s0, если в множестве P есть правила p1, p2, ,…, pn такие, что строка s1 непосредственно порождается строкой s0, строка s2 непосредственно порождается строкой s1, и т.д. строка sn непосредственно порождается строкой sn-1. Строка, порожденная из начального символа, называется сентенциальной формой. Предложением называется сентенциальная форма, состоящая только из терминальных символов.

Языком L (G), порождаемым грамматикой G, является множество предложений, которые получаются из начального символа путем последовательного применения правил из множества продукций. При наличии определенных правил (рекурсивных) грамматики могут порождать бесконечные языки.

Основные проблемы, связанные с языками и грамматиками:

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

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

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

- построение эффективных (оптимальных) в некотором смысле грамматик для описания языка, например, минимизация числа правил, числа переменных, определение несущественных переменных и т.д.

- выделение эффективных, и достижимых переменных.

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

В контекстно-зависимых грамматиках каждое правило имеет вид

x1 y1 x2 ---> x1 y2 x2, где y1 – некоторая переменная, а y2 - строка и x1, x2 любые строки.

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

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

G = < T, N, s, P >

T = < a, b, c,…, z, A, B,…, Z, 0, 1,…, 9 > - все латинские буквы и цифры

N = < s, lat, dig >

P = < s -> lat s -> s lat s -> s dig lat -> a lat -> b

lat -> Z dig -> 0 … dig -> 9

>

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

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

Алгоритмы, работающие по принципу снизу-вверх, пытаются найти такую же последовательность правил путем обратной подстановки левых частей правил в заданную строку вместо соответствующих правых частей. В результате всех этих действия заданная строка должна «свернуться» в один начальный символ. Если это удается, то эта строка является предложением языка, определяемого грамматикой.

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