
- •Минобрнауки россии
- •Е.В. Грачева Системное программное обеспечение персональных эвм
- •1 Программирование в операционной среде
- •1.1 Программирование в среде однозадачной операционной системы
- •1.2 Программирование в среде ос Windows
- •1.2.1 Основные понятия
- •1.2.2 Программный интерфейс
- •1.2.2.1 Сообщения, очередь сообщений
- •1.2.2.2 Процедура окна
- •1.2.3 Использование динамических библиотек
- •1.2.3.1.Описание api-функции LoadLibrary
- •1.2.3.2 Описание функции GetProcAddress
- •1.2.3.3 Описание функции FreeLibrary
- •1.2.4 Описание некоторых api-функций
- •1.2.4.1.Функции для создания пользовательского интерфейса
- •1.2.4.1.1 Ввод данных с клавиатуры
- •1.2.4.1.2 Ввод данных с помощью "мыши"
- •1.2.4.1.3 Диалоговые окна
- •1.2.4.2 Функции для получения информации о системе
- •1.2.4.2.1 Информация об аппаратной конфигурации
- •1.2.4.2.3 Конфигурация ос
- •1.2.4.2.4 Системные параметры
- •1.2.4.2.5 Внешний вид системных элементов
- •1.2.4.3 Функции управления памятью
- •1.2.4.3.1 Основные функции управления памятью
- •1.2.4.4.Функции управления файлами
- •1.2.4.4 Функции управления некоторыми устройствами
- •Контрольные вопросы
- •35. Охарактеризовать функцию для определения конфигурации ос
- •36. Охарактеризовать функции об установке системных параметров.
- •2.Ассемблеры
- •2.1 Архитектура процессоров ia-32
- •2.1.1.Основная исполнительная среда микропроцессора с архитектурой ia32
- •2.1.2 Режимы работы и используемая модель памяти процессоров с архитектурой ia32
- •2.1.3 Архитектура ia-32 системного уровня
- •2.2.Программирование на языке ассемблера
- •2.2.1 Метки
- •2.2.2 Директивы
- •2.2.3 Формат команды
- •2.2.4 Система команд микропроцессоров с архитектурой ia32
- •2.2.4.1 Команды пересылки данных
- •Ins строка, dx
- •2.2.4.2 Арифметические операции
- •2.2.4.3 Операции сдвига
- •2.2.4.4 Битовые операции
- •2.2.4.5 Команды для организации циклов
- •1.3.1.1 Команды сравнения
- •2.2.4.6 Команды передачи управления
- •2.2.4.7 Системные команды
- •2.2.4.8 Команды математического сопроцессора
- •2.2.5 Технология программирования
- •2.3 Макроязыки
- •3.Трансляторы
- •3.1 Структура компиляторов и интерпретаторов, лексический, синтаксический и семантический анализаторы, генератор кода
- •3.1.1.Распределение памяти, виды переменных
- •3.1.2.Статическое и динамическое связывание
- •3.2 Загрузчики
- •3.2.1 Функции загрузчика
- •3.2.1 Настраивающий и динамический загрузчики
- •3.3 Подключение библиотек
- •4. Формальные языки и грамматики
- •4.1 Типы грамматик
- •4.1.1 Вывод цепочек
- •4.1.2 Конечный и магазинный автоматы, распознаватели и преобразователи, построение автомата по заданной грамматике
- •Приложения Приложение а
- •Оглавление
- •4. Формальные языки и грамматики
4. Формальные языки и грамматики
Формальный язык представляет собой множество цепочек в некотором конечном алфавите. К формальным языкам можно отнести искусственные языки для общения человека с машиной – языки программирования.
Для задания описания формального языка необходимо, во-первых, указать алфавит, т. е. совокупность объектов, называемых символами (или буквами), каждый из которых можно воспроизводить в неограниченном количестве экземпляров (подобно обычным печатным буквам или цифрам), и, во-вторых, задать формальную грамматику языка, т. е. перечислить правила, по которым из символов строятся их последовательности, принадлежащие определяемому языку, – правильные цепочки [10].
Пусть алфавит символов (непустое конечное множество), из которых строятся цепочки языка L, представляет собой алфавит терминальных символов VT (например, буквы кириллицы или двоичные символы 0 и 1).
Определение формальной грамматики требует наличие ещё одного алфавита VN – непустого конечного множества нетерминальных (состоящих из некоторого множества терминальных) символов, таким образом что алфавиты терминальных и нетерминальных символов являются непересекающимися (например, слова русского языка за исключением различного рода предлогов «а», «и» и т. п. или двухразрядные двоичные числа {00,01,11,10}) множествами. Объединение этих алфавитов называется словарем формального языка L.
Продукция языка представляет собой пару α и β, каждый элемент этой пары является цепочкой символов словаря формального языка L:
Продукция обозначается α → β (читается «из α следует β»). Необходимо отметить, что цепочка β является элементом ограниченного использования словаря, поэтому среди продукций не должно быть пар вида α → ε, где ε пустая цепочка.
Таким образом, формальная грамматика G – это совокупность четырех объектов:
G = (VT, VN, P, S)
где
VT – алфавит терминальных символов
VN – алфавит нетерминальных символов
P – конечное множество продукций формальной грамматики G, являющееся подмножеством множества П
S – начальный символ грамматики
4.1 Типы грамматик
Американский ученый-лингвист Ноам Хомский определил 4 типа грамматик, на основе которых оцениваются возможности других способов описания языков.
Соответствующий тип грамматики по Хомскому определяется ограничениями, которые налагаются на продукцию Р.
В (таблице 30) приводятся типы грамматик, типы языков и автоматы, которые могут быть описаны с помощью грамматики данного типа.
Таблица 28 – Классификация языков по Хомскому
Тип грамматики |
Ограничение |
Языки |
Автоматы |
Тип 0 |
Нет ограничений |
рекурсивно-перечислимые языки |
машины Тьюринга |
Тип 1 |
Длина цепочки β больше или равна длине цепочки α |
Контекстно-зависимые, или грамматики непосредственных составляющих (НС-языки) |
Линейно-ограниченные автоматы |
Тип 2 |
Цепочка α состоит из одного символа |
Бесконтекстные или контекстно-свободные грамматики (КС-языки) |
Автомат с магазинной памятью |
Тип 3 |
Цепочка β состоит либо из одного терминального и одного нетерминального символа, либо из одного терминального символа |
Регулярные языки |
Конечные автоматы |
Тип 0 грамматик — самый общий тип грамматик, к нему относятся все без исключения формальные грамматики.
Тип 1 грамматик предполагает, что при построении предложений заданного ими языка, один и тот же терминальный символ может быть заменен на ту или иную цепочку символов в зависимости от того контекста, в котором он встречается. Т. е. значение одного и того же терминального символа может меняться в зависимости от контекста, в котором он встречается.
В отличии от типа 1, грамматики типа 2 являются контекстно-свободными. КС-языки широко используются для описания синтаксических конструкций языков программирования.
Регулярные языки (грамматики типа 3) используются при описании простейших конструкций языков программирования: идентификаторов, констант, строк, комментариев и т. п.
Одна и та же грамматика, в общем случае, может быть отнесена к нескольким классификационным типам (например, все формальные грамматики относятся к типу 0). Для классификации грамматики всегда выбирают максимально возможный тип, которому она удовлетворяет, поскольку сложность грамматики обратно пропорциональна номеру типа к которому она относится. Так, грамматики типа 0 являются самыми сложными, а грамматики типа 3 — самыми простыми.