
- •1. Основные понятия и определения. Операционные системы как средство распределения и управления ресурсами.
- •2. Архитектура unix. Основные стандарты.
- •3. Модель системы unix.
- •4. Ядро системы. Внутренняя структура ядра.
- •5. Файловая подсистема
- •6. Подсистема ввода/вывода
- •7. Подсистема управления процессами
- •8. Работа в операционной системе unix
- •9 Файлы и файловая подсистема. Типы файлов.
- •11 Владельцы файлов. Права доступа к файлу. Дополнительные атрибуты файла.
- •12 Командный интерпритатор Shell. Синтаксис языка Bourn Shell. Общий синтаксис скрипта.
- •13 Основные утилиты unix
- •14 Подсистема управления процессом. Структура данных процесса, состояния процесса.
- •15Типы процессов: системные процессы, демоны, прикладные процессы.
- •16.Жизненый путь процесса. Инфраструктура процесса ос unix.
- •21. Планирование и управление процессами. Основные принципы и механизмы, обработка прерываний таймера, алармы, создание процесса.
- •22. Сигналы. Управление сигналами: отправление сигнала, доставка и обработка сигнала.
- •23. Взаимодействие между процессами. Средства межпроцессного взаимодействия.
- •24. Настройка командного интерпретатора. Работа с командным интерпретатором. Способы установки командного интерпретатора.
- •26. Файловая подсистема. Базовая файловая система System V . Основные компоненты файловой системы s5fs, массив индексных дескрипторов. Достоинства, недостатки.
- •27. Файловая система ffs. Основные изменения.
- •28. Архитектура виртуальной файловой системы. Монтирование файловой системы. Трансляция имен. Системные вызовы, требующие трансляции имени.
- •33. Блочные устройства
- •35. Трансляторы. Основные понятия и определения
- •36. Общие особенности языков программирования и трансляторов
- •37. Обобщённая структура компилятора, интерпритатора.
- •38. Фазы процесса трансляции и компиляции.
- •Обобщенная схема синтаксического анализатора
- •41. Варианты взаимодействия блоков транслятора. Особенности.
- •42. Многопроходная организация взаимодействия блоков транслятора. Достоинства и недостатки.
- •43. Однопроходная организация взаимодействия блоков транслятора. Достоинства и недостатки.
- •Наиболее широкое применение при разработке трансляторов нашли кс-грамматики и порождаемые ими кс языки. Способы записи синтаксиса языка
- •Метаязык Хомского
- •46 Метаязык Хомского-Щутценберже
- •49. Распознаватели.
- •50. Организация лексического анализа. Назначение и необходимость фазы
- •55. Грамматики с ограничениями на правила.
- •56.Устройства управления с конечной памятью.
- •57. Методы лексического анализа
- •58. Организация прямого л/а
- •59. Общие принципы организации синтаксического разбора. Назначение, классификация методов синтаксического разбора.
- •60. Методы синтаксического разбора.
- •Последовательность разбора.
- •Использование просмотра вперед.
- •Разработка программы по таблице переходов амп
- •64 Организация автоматов с магазинной памятью.
- •65 Распознаватель скобочных выражений.
- •67 Основные команды Linux. Ввод и вывод данных.
42. Многопроходная организация взаимодействия блоков транслятора. Достоинства и недостатки.
Многопроходная организация – организация, при которой каждая из фаз является независимым процессом, передающим управление следующей фазе только после окончания полной обработки своих данных.
Л
ексический
анализатор полностью обрабатывает
исходный текст, формирует на выходе
цепочку из полученных лексем. Когда
получены все лексемы управление
передается синтаксическому анализатору.
Синтаксический анализатор получает
сформированную цепочку лексем и на её
основе формирует промежуточное
представление или объектную модель.
После получения объектной модели
синтаксический анализатор передает
управление генератору кода, который
формирует на основе входных данных
требуемый машинный код.
Достоинства:
- обособленность раздельных фаз: обеспечивает их независимую реализацию и использование;
- возможность хранения данных, получаемых в результате работы каждой из фаз на внешних считывающих устройствах и их считывание;
- возможность уменьшения объема О.П., требуемого для работы транслятора. Объем уменьшается за счет последовательного вызова фаз.
Недостатки:
- наличие больших объемов промежуточной информации, из которой требуется небольшой их объем;
- замедление скорости трансляции из-за последовательного выполнения фаз.
Данный подход удобен при построении транслятора с языков, которые обладают сложной синтаксической и семантической структурой.
43. Однопроходная организация взаимодействия блоков транслятора. Достоинства и недостатки.
Однопроходная – организация, при которой все фазы это единый процесс и они передают данные между собой небольшими фрагментами.
Процесс трансляции протекает следующим образом:
Лексический анализатор (Л.А.) читает фрагмент исходного текста для получения 1 лексемы. После формирования лексемы в Л.А. осуществляется вызов синтаксического анализатора (С.А.) и эта сформировавшаяся лексема передается ей в качестве входного параметра. Если С.А. мажет построить очередной фрагмент промежуточного представления, то он делает это и передает управление генератору кода (Г.К.). В противном случае он возвращает управление Л.А. (если он не может построить очередной фрагмент промежуточного представления). Вернув управление, он тем самым дает понять, что очередная лексема обработана и нужны новые данные. Г.К. функционирует обычным образом. После того как Г.К. создает объект фрагментного кода, управление возвращается С.А. По окончании исходного текста и завершения обработки всех промежуточных данных в каждом из блоков Л.А. инициирует процесс завершения программы.
Ч
аще
всего используется другая схема, где
главная роль отведена С.А. Л.А и Г.К.
выступают в роли вызываемых подпрограмм.
Как только С.А. нужна очередная лексема,
он вызывает Л.А.. При получении фрагмента
промежуточного представления он
осуществляет обращение к Г.К.. Завершение
процесса трансляции происходит после
получения и обработки последней лексемы
и анализируется С.А.
Достоинства:
- отсутствие большого объема промежуточных данных;
- высокая скорость обработки из-за совмещения фаз в едином процессе;
- отсутствие обращения к внешним запоминающим устройствам.
Недостатки:
- невозможность реализации такой схемы трансляции для сложных по конструкции языков;
- отсутствие промежуточных данных, которые можно использовать для комплексного анализа и оптимизации.
Т акая схема часто применяется для простых по семантическим и синтаксическим структурам языков программирования, как в компиляторах, так и в интерпретаторах. Классический интерпретатор строится по однопроходной схеме, т.к. непосредственное представление осуществляется на уровне отдельных фрагментов промежуточного представления.
44.Основы теории языков и формальных грамматик. Способы определения языков. Формальные грамматики.
Способы определения языков
Описание языков программирования во многом опирается на теорию формальных языков. Эта теория является фундаментом для организации синтаксического анализа и перевода.
Существует два основных способа определения языков:
- механизм порождения или генератор;
- механизм распознавания или распознаватель.
Они тесно связаны. Первый обычно используется для описания языков, а второй для их реализации. Оба способа позволяют описать языки конечным образом, несмотря на бесконечное число порождаемых ими цепочек.
Неформально язык L - это множество цепочек конечной длины в алфавите T. Механизм порождения позволяет описать языки с помощью системы правил, называемой грамматикой. Цепочки (предложения) языка строятся в соответствии с этими правилами. Достоинство определения языка с помощью грамматик в том, что операции, производимые в ходе синтаксического анализа и перевода, можно делать проще, если воспользоваться структурой, предписываемой цепочкам с помощью этих грамматик.
Механизм распознавания использует алгоритм, который для произвольной входной цепочки остановится и ответит "да" после конечного числа шагов, если эта цепочка принадлежит языку. Если цепочка не принадлежит языку, алгоритм ответит "нет". Распознаватели используются непосредственно при построении синтаксических анализаторов и являются как бы их формальной моделью. Распознаватели строятся на основе теорий конечных автоматов и автоматов с магазинной памятью.
Формальные грамматики
Грамматикой называется четверка G = (N, T, P, S), где N - конечное множество нетерминальных символов (нетерминалов), T - множество терминалов (не пересекающихся с N), S - символ из N, называемый начальным, Р - конечное подмножество множества:
(N И T)* N (N И T)* x (N И T)*,
называемое множеством правил. Множество правил Р описывает процесс порождения цепочек языка. Элемент pi = (a, b) множества Р называется правилом (продукцией) и записывается в виде a Ю b. Здесь a и b - цепочки, состоящие из терминалов и нетерминалов. Данная запись может читаться одним из следующих способов:
-- цепочка a порождает цепочку b;
-- из цепочки a выводится цепочка b.
Таким образом, правило P имеет две части: левую, определяемую, и правую, подставляемую. То есть правило pi - это двойка (p i1, pi2), где p i1 = (N И T)* N (N И T)* - цепочка, содержащая хотя бы один нетерминал, pi2 = (N И T)* - произвольная, возможно пустая цепочка (e - цепочка).
Если цепочка a содержит pi1, то, в соответствии с правилом pi, можно образовать новую цепочку b, заменив одно вхождение pi1 на pi2. Говорят также, что цепочка b выводится из a в данной грамматике.
Для описания абстрактных языков в определениях и примерах будем пользоваться следующими обозначениями:
терминалы обозначим буквами a, b, c, d или цифрами 0, 1, ..., 9;
нетерминалы будем обозначать буквами A, B, C, D, S (причем нетерминал S - начальный символ грамматики);
буквы U, V, ..., Z используем для обозначения отдельных терминалов или нетерминалов;
через a, b, g... обозначим цепочки терминалов и нетерминалов;
u, v, w, x, y, z - цепочки терминалов;
для обозначения пустой цепочки (не содержащей ни одного символа) будем использовать знак e;
знак “®” будет отделять левую часть правила от правой и читаться как “порождает” или “есть по определению”. Например, A®cd, читается как “A порождает cd”.
Эти обозначения определяют некоторый язык, предназначенный для описания правил построения цепочек, а значит, для описания других языков. Язык, предназначенный для описания другого языка, называется метаязыком.
Пример грамматики G1:
G1 = ({A, S}, {0, 1}, P, S),
где P:
S ® 0A1;
0A ® 00A1;
A ® e.
Выводимая цепочка грамматики G, не содержащая нетерминалов, называется терминальной цепочкой, порождаемой грамматикой G.
Язык L(G), порождаемый грамматикой G, - это множество терминальных цепочек, порождаемых грамматикой G.
Введем отношение ЮG непосредственного вывода на множестве (N И T)*, которое будем записывать следующим образом:
j ЮG y.
Данная запись читается: y непосредственно выводима из j для грамматики G = (N, T, P, S) и означает: если abg - цепочка из множества (N И T)* и b ® d - правило из Р то abg ЮG adg.
Через ЮG+ обозначим транзитивное замыкание (нетривиальный вывод за один и более шагов). Тогда j ЮG+ y читается как: y выводима из j нетривиальным образом.
Через ЮG* - обозначим рефлексивное и транзитивное замыкание (вывод за ноль и более шагов). Тогда j ЮG* y означает: y выводима из j .
Пусть Юk k - я степень отношения Ю. То есть, если a Юk b, то существует последовательность a0a1a2a3 ... ak из к+1 цепочек
a = a0, a1, ... ai -1 Ю ai, 1 ≤ i ≤ k и ak = b.
Пример выводов для грамматики G1:
S Ю 0A1 Ю 00A11 Ю 0011;
S Ю1 0A1; S Ю2 00A11; S Ю3 0011;
S Ю+ 0A1; S Ю+ 00A11; S Ю+ 0011;
S Ю* S; S Ю* 0A1; S Ю* 00A11; S Ю* 0011;
где 0011 М L(G1).
45.Грамматики с ограничениями на правила. Способы записи синтаксиса языка. Метаязык Хомского. Грамматики с ограничениями на правила.Несмотря на большое разнообразие грамматик, при построении трансляторов нашли широкое применение только ряд из них, имеющих некоторые ограничения. Это связано с практической целесообразностью использования определенных типов правил, так как сложность их построения непосредственно влияет на сложность построения трансляторов. По виду правил выделяют несколько классов грамматик. В соответствии с классификацией Хомского грамматика G называется:
1праволинейной, если каждое правило из Р имеет вид: AxB или Ax, где A, B - нетерминалы, x - цепочка, состоящая из терминалов;
2контекстно-свободной (КС) или бесконтекстной, если каждое правило из Р имеет вид: A, где A N, а (N T)*, то есть является цепочкой, состоящей из множества терминалов и нетерминалов, возможно пустой;
3контекстно-зависимой или неукорачивающей, если каждое правило из P имеет вид: , где То есть, вновь порождаемые цепочки не могут быть короче, чем исходные, а, значит, и пустыми (другие ограничения отсутствуют);
4грамматикой свободного вида, если в ней отсутствуют выше упомянутые ограничения.
ВНИМАНИЕ! Этого в лекциях мы не писали!!!
Пример праволинейной грамматики:
G2 = ({S,}, {0,1}, P, S), где
P:
S 0S;
S 1S;
S ,
определяет язык {0, 1}*.
Пример КС-грамматики:
G3 = ({E, T, F}, {a, +, *, (,)}, P, E) где
P:
E T
E E + T
T F
T T * F
F (E)
F a.
Данная грамматика порождает простейшие арифметические выражения.
Пример КЗ-грамматики:
G4 = ({B, C, S}, {a, b, c}, P, S) где
P:
1. S aSBC;
2. S abc;
3. CB BC;
4. bB bb;
5. bC bc;
6. cC сc,
порождает язык { a n b n c n }, n ≥ 1.
Примечание 1. Согласно определению каждая праволинейная грамматика является контекстно- свободной.
Примечание 2. По определению КЗ-грамматика не допускает правил: А где - пустая цепочка. Т.е. КС-грамматика с пустыми цепочками в правой части правил не является контекстно-зависимой. Наличие пустых цепочек ведет к грамматике без ограничений.
Соглашение. Если язык L порождается грамматикой типа G, то L называется языком типа G.
Пример: L(G3) - КС язык типа G3.