- •Этапы жизненного цикла программного продукта
- •Состав и схема функционирования классической системы программирования
- •Типы трансляторов, особенности интерпретаторов и компиляторов
- •Общая схема работы компилятора
- •Определение порождающей грамматики
- •Определение языка, порождаемого грамматикой
- •Определение типов грамматики и языков по Хомскому
- •Соотношения между типами грамматик
- •Соотношения между типами языков
- •Определение неоднозначности грамматики и языка
- •Определение недостижимых и бесполезных символов, определение приведенной грамматики
- •Определение детерминированного конечного автомата (ка)
- •Диаграмма состояний (дс) для заданной леволинейной регулярной грамматики. Построение дс
- •Определение недетерминированного конечного автомата
- •Алгоритм построения детерминированного конечного автомата по нка
- •Задачи лексического анализа
- •Организация классов таблиц лексического анализатора
- •Метод рекурсивного спуска: назначение, семантика процедур рекурсивного спуска
- •Достаточные условия применимости метода рекурсивного спуска
- •Расширение класса грамматик, к которым применим метод рекурсивного спуска (проблемы преобразования, эквивалентность предлагаемых преобразований)
- •Задачи семантического анализа
- •Свойства языка внутреннего представления программы, примеры таких языков
- •Машинно-независимая оптимизация. Основные оптимизирующие преобразования
- •Машинно-зависимая оптимизация. Основные оптимизирующие преобразования
- •Интегрированная среда разработки (иср)
- •Основные функции редактора текста в рамках иср
- •Основные функции отладчика в рамках иср
- •Назначение и функционирование редактора связей. Загрузчик
- •Библиотеки. Основные типы библиотек
- •Критерии проектирования стандартных библиотек
- •Stl: контейнеры, итераторы, алгоритмы, аллокаторы. Шаблоны vector и list
Соотношения между типами грамматик
Любая регулярная грамматика = КС
Любая КС = КЗ, неукорачивающая
Любая КЗ, любая неукорачивающая = типа 0
Любая регулярная = УКС
Любая КС = УКС
УКС с эпсилон не явл. типа 1.
Соотношения между типами языков
Язык типа К, если его можно описать грамматикой типа К и нельзя грамматикой типа К + 1
Любой регулярный язык = КС язык, но КС-языки не явл. регулярными
Любой КС = язык типа 1, но есть типа 1 не КС
Любой язык типа 1 = язык типа 0
Определение неоднозначности грамматики и языка
Дерево вывода: помеченное упорядоченное дерево, явл. деревом разбора в грамматике G = (VT, VN, P, S), если:
Корень дерева помечен S, листья – символы из VT, либо эпсилон (для укорачивающих грамматик), все вершины – VN
Если вершины помечены A из VN и пометки при непосредственных потомках, выписанные слева направо, образуют цепочку a1, …, an, где ai из (VT U VN), то A -> a1…an из P – правило вывода грамматики
Если вершины помечены A из VN и при непосредственных потомках, помеченных эпсилон, то этот потомок единственный.
Грамматика G является неоднозначной, если существует w из L(G), для которой существует более одного дерева вывода.
Определение недостижимых и бесполезных символов, определение приведенной грамматики
Символ x из (VT U VN) называется недостижимым в грамматике G = (VT, VN, P, S), если он не появляется ни в одной сентенциальной форме этой грамматики
Алгоритм удаления недостижимых символов:
V0 = {S}; i = 1
Vi = {x|x из (VT U VN), в Р есть A -> axb и A изVi-1, a, b из (VT U VN)* U Vi-1
если Vi != Vi-1, то i = i + 1 и переходим к шагу 2, иначе VN’ = Vi VN; VT’ = Vi VT; P’ состоит из правил множества P, содержащих только символы Vi; G’ = (VT’, VN’, P’, S).
Символ А из VN называется бесплодным в грамматике G = (VT, VN, P, S), если множество {a из VT* | A -> a} пусто
Алгоритм удаления бесплодных символов:
Рекурсивно строим множества N0, N1, …
N0 = 0, i = 1
Ni = {A| (A -> a) из P и а из (Ni-1 U VT)*} U Ni-1
Если Ni != Ni-1, то i = i + 1 и переходим к шагу 2, иначе VN’ = Ni, P’ состоит из правил множества P, содержащих только символы из VN’ U VT; G’ = (VT, VN’, P’, S)
Грамматика называется приведенной, если в ней нет недостижимых и бесплодных символов.
Определение детерминированного конечного автомата (ка)
Конечным автоматом называют пятерку следующего вида: M(Q, V, P, R, F), где:
Q – конечное множество состояний автомата
V – конечное множество допустимых входных символов
P – функция переходов, отображающая VxQ в множество подмножеств Q: U(Q), то есть P(a, q) = U, a из V, q из Q, U – подмножество Q
R – начальное состояние автомата Q, R из Q
F – непустое множество конечных состояний автомата F непустое подмножество Q
Конечный автомат называют ДКА, если в каждом из его состояний для любого входного символа функция перехода содержит не более одного состояния: для любого а из V и q из Q: либо P(a, q) = {r}, r из Q, либо P(a, q) = пусто.