- •Часть 1
- •Лекция №1 Предисловие п.1. Место системного программного обеспечения в компьютерной системе
- •П.2. Структура спо
- •П.3. Хакеры как движущая сила развития спо
- •Лекция №2
- •1. Формальные языки и грамматики в системе программирования
- •1.1. Структура систем программирования
- •1.2. Языки и цепочки символов. Способы задания языков
- •1.2.1. Общие представления о языках
- •1.2.2. Цепочки символов. Операции над цепочками символов
- •1.2.3. Формальное определение языка
- •1.2.4. Способы задания языков
- •Лекция №3
- •1.3. Грамматики и распознаватели
- •1.3.1. Порождающая грамматика
- •1.3.2. Запись правил грамматики с использованием метасимволов
- •Лекция №4
- •1.3.3. Распознаватели
- •1.3.4. Классификация распознавателей
- •1.3.4.1. Классификация распознавателей по компонентам
- •1.3.4.2. Классификация распознавателей по типу языков
- •Лекция №4
- •Лекция №5
- •1.3.5. Примеры классификации языков и грамматик
- •Лекция № 6
- •1.4. Технология формирования предложений языка
- •1.4.1. Выводимость цепочек
- •1.4.2. Сентенциальная форма грамматики
- •1.4.3. Левосторонний и правосторонний выводы
- •1.4.4. Дерево вывода и методы его построения
- •1.4.5. Проблема однозначности грамматик
- •2.1.2. Формальное определение компилятора
- •2.1.3. Интерпретаторы
- •2.2. Общая схема работы компилятора
- •2.3. Варианты построения компиляторов
- •2.3.1. Общие подходы в построении компиляторов
- •2.3.2. Понятие прохода
- •2.3.3. Однопроходные и многопроходные компиляторы
- •2.4. Особенности построения интерпретаторов и их взаимодействие с компиляторами
- •3.1.2. Принципы построения сканеров
- •Лекция 9
- •3.1.3. Сканер как конечный автомат
- •Лекция 10
- •3.2. Взаимодействие сканера с таблицей идентификаторов
- •3.2.1.Назначение и особенности построения таблиц идентификаторов
- •3.2.2. Простейшие методы построения таблиц идентификаторов
- •3.2.3. Построение таблиц идентификаторов по методу бинарного дерева
- •Список литературы
Лекция № 6
1.4. Технология формирования предложений языка
1.4.1. Выводимость цепочек
Выводом называется процесс порождения предложения языка на основе правил определяющей язык грамматики. Чтобы дать формальное определение процессу вывода введем несколько дополнительных понятий.
Во-первых, цепочка = 12 называется непосредственно выводимой из цепочки = 12 в грамматике G<T, N, P, S>, V = T N, 1, , 2 V*, V+, если в грамматике G существует правило: ( ) P. Непосредственная выводимость из обозначается так: . Выводимая цепочка стоит в правой части вывода. При этом выполняется подстановка подцепочки вместо подцепочки . Иными словами цепочка непосредственно выводима из цепочки в том случае, если можно взять несколько символов в цепочке , заменить их на другие символы согласно некоторому правилу грамматики и получить цепочку .
В формальном определении непосредственной выводимости любая из цепочек 1 2 или обе эти цепочки могут быть пустыми. В предельном случае вся цепочка может быть заменена на цепочку , если в G существует правило: ( ) P.
Второе дополнительное понятие – понятие выводимой цепочки. Цепочка называется выводимой из цепочки ( * ) в том случае, если выполняется одно из двух условий:
– непосредственно выводима из ();
– существует такая цепочка , что , выводимая из ( * ) и непосредственно выводима из ( ).
Это рекурсивное определение выводимости цепочки. Суть его заключается в том, что цепочка выводима из цепочки либо непосредственно, либо через построение последовательности непосредственно выводимых цепочек от к следующего вида:
1 … I … n , n 1.
Такая последовательность непосредственно выводимых цепочек называется цепочкой вывода или выводом. Каждый переход от одной непосредственно выводимой цепочки к следующей в цепочке вывода называется шагом вывода. Если число промежуточных цепочек n, то число интервалов n + 1.Если число шагов равно 1, т. е. n = 0, то () ( непосредственно выводима из ).
Если n 1, т. е. число шагов вывода два или более, то цепочка вывода имеет специальное обозначение: + . При этом говорят, что цепочка нетривиально выводима из цепочки . Если количество шагов вывода известно, то его можно указать вместо знака +. Например, запись 4 означает, что цепочка выводится из цепочки за 4 шага. Если цепочка и равны ( = ), то может быть такое обозначение цепочки вывода 0 .
Возьмем грамматику G из 1.3.1, набор правил которой P:
S T+ T– T
T FTF
F 0123456789.
Построим в ней несколько произвольных выводов.
1. S – T – TF – TFF – FFF – 4FF – 47F – 479.
2. S T TF T8 F8 18.
3. T TF T0 TF0 T50 F50 350.
4. TFT TFFT TFFF FFFF 1FFF 1FF4 10F4 1004.
5. F 5.
В результате получаются следующие выводы.
1. S * – 479 или S + – 479 или S 7 – 479.
2. S * 18 или S + 18 или S 5 18.
3. T * 350 или T + 350 или T 6 350.
4. TFT * 1004 или TFT + 1004 или TFT 7 1004.
5. F * 5 или F 1 5 (утверждение F + 5 неверно!).
Вопрос слушателям. Почему утверждение F + 5 неверно?
Все эти выводы построены на основе грамматики G. В примере в этой грамматике можно построить сколь угодно много цепочек вывода.