
- •Содержание
- •1.Рабочая программа
- •2.Модуль Вводный
- •3.Модуль Формальные грамматики и языки
- •3.1.Языки и цепочки символов. Способы задания языков
- •3.1.1.Цепочки символов. Операции над цепочками символов
- •3.1.2.Понятие языка. Формальное определение языка
- •3.1.3.Способы задания языков
- •3.1.4.Синтаксис и семантика языка
- •3.2.Определение грамматики
- •3.2.1.Особенности языков программирования
- •3.2.2.Определение грамматики. Форма Бэкуса—Наура
- •3.2.3.Принцип рекурсии в правилах грамматики
- •3.2.4.Другие способы задания грамматик
- •3.3.Классификация языков и грамматик
- •3.3.1.Классификация грамматик
- •3.3.2.Классификация языков
- •3.4.Контроль
- •4.Модуль Распознаватели, механизм вывода цепочек символов
- •4.1.Цепочки вывода. Сентенциальная форма.
- •4.1.1.Сентенциальная форма грамматики. Язык, заданный грамматикой
- •4.1.2.Левосторонний и правосторонний выводы
- •4.1.3.Однозначные и неоднозначные грамматики
- •4.1.4.Эквивалентность и преобразование грамматик
- •4.2.Распознаватели. Задача разбора
- •4.2.1.Общая схема распознавателя
- •4.2.2.Виды распознавателей
- •4.2.3.Классификация распознавателей по типам языков
- •4.3.Контроль
- •5.Модуль Регулярные грамматики и языки
- •5.1.Регулярные языки и грамматики
- •5.2.Леволинейные и праволинейные грамматики. Автоматные грамматики
- •5.3.Алгоритм преобразования регулярной грамматики к автоматному виду
- •5.4.Конечные автоматы
- •5.4.1.Определение конечного автомата
- •5.4.2.Детерминированные и недетерминированные конечные автоматы
- •5.4.3.Преобразование конечного автомата к детерминированному виду
- •5.5.Контроль
- •6.Модуль Контекстно-свободные грамматики и языки
- •6.1.Контекстно-свободные языки
- •6.1.1.Распознаватели кс-языков. Автоматы с магазинной памятью. Определение мп-автомата
- •6.2.Классы кс-языков и грамматик. Класс ll(k) грамматик.
- •6.3.Принципы построения распознавателей для ll(k)-грамматик
- •6.4.Левая факторизация
- •6.5.Удаление левой рекурсии
- •6.6.Алгоритм разбора для ll(1)-грамматик
- •6.7.Алгоритм построения множества first(1,a)
- •6.8.Алгоритм построения множества follow(1,a)
- •6.9.Восходящие распознаватели кс-языков без возвратов
- •6.9.1.Определение lr(k)-грамматики
- •6.10.Принципы построения распознавателей для lr(k)-грамматик
- •6.10.1.Грамматики простого предшествования
- •6.11.Распознаватели для lr(0) и lr(1) грамматик
- •6.11.1.Распознаватель для lr(0)-грамматики
- •6.11.2.Распознаватель для lr(1) грамматики
- •6.12.Контроль
- •7.Модуль Инструментальные средства для построения трансляторов
- •7.1.Инструментальные средства для построения компиляторов
- •7.1.1.Построитель лексических анализаторов Lex
- •7.2.Контроль
- •8.Модуль Особенности программирование трансляторов
- •8.1.Использование значений произвольных типов, алгоритм разбора
- •8.1.1.Алгоритм синтаксического разбора
- •8.1.2.Семантический стек
- •8.2.Неоднозначности и конфликты
- •8.3.Старшинство операций
- •8.4.Дополнительные возможности программ yacc и lex
- •8.4.1.Обработка ошибок
- •8.5.Совместное использование lex и yacc
- •8.5.1.Кодировка лексем и интерфейс
- •8.5.2.Сборка yacc-программ
- •8.6.Советы по подготовке спецификаций
- •8.6.1.Стиль
- •8.6.2.Использование левой рекурсии
- •8.6.3.Уловки анализа лексики
- •8.6.4.Входной синтаксис yacc'а
- •8.7.Контроль
- •9.Модуль Заключение
- •10.Обеспечение лабораторного практикума
- •11.Дополнительная информация. Примеры
- •11.4.Пример простейшего интерпретатора формул
- •11.5.Простой пример
- •11.6.Более сложный пример
- •11.7.Генераторы лексических и синтаксических анализаторов
- •11.8.Генераторы лексических и синтаксических анализаторов на java
- •11.9.Пакеты для разработки компиляторов
- •Список сокращений
- •Литература
- •Приложения Приложение 1. Учебно–методическая карта дисциплины “Системное программное обеспечение. Синтаксические анализаторы”
- •Приложение 2. Вопросы для зачета по дисциплине “Системное программное обеспечение. Синтаксические анализаторы”
- •Приложение 3. Методические указания к лабораторным работам по дисциплине «Системное программное обеспечение. Синтаксические анализаторы»
- •Порядок выполнения работы:
- •Контрольные вопросы
- •Лексический анализатор lex. Анализ структуры программ
- •Краткая теория:
- •Рассмотрим примеры:
- •Порядок выполнения работы:
- •Контрольные вопросы
- •Лексический анализатор lex, синтаксический анализатор yacc. Алгебраические вычисления
- •Краткая теория:
- •Порядок выполнения работы:
- •Контрольные вопросы
- •Лексический анализатор lex и синтаксический анализатор yacc. Изображение геометрических фигур
- •Краткая теория:
- •Создание метафайла и работа сним
- •Порядок выполнения работы:
- •Контрольные вопросы
- •Приложение 4. Организация рейтингового контроля по дисциплине «Системное программное обеспечение. Синтаксические анализаторы»
5.5.Контроль
На данном этапе изучения материала учащимся предлагаются вопросы и задачи для самоконтроля, например:
Постройте автоматную регулярную грамматику и соответствующий ей конечный автомат разбора языка описания даты и времени в формате:
dd.mm.yyyy hh:mm:ss или
dd.mm.yy hh:mm:ss
с учетом допустимых значений.
Постройте регулярное выражение, вычленяющее:
/* … */ комментарии в языке программирования С++;
// … комментарии в языке программирования С++;
строковые константы в языке программирования С++;
числа с плавающей точкой в экспоненциальной форме, допустимые в языке программирования С++,
с учетом известных ограничений.
6.Модуль Контекстно-свободные грамматики и языки
6.1.Контекстно-свободные языки
6.1.1.Распознаватели кс-языков. Автоматы с магазинной памятью. Определение мп-автомата
Контекстно-свободными (КС) называются языки, определяемые грамматиками типа G(VT,VN,P,S), в которых правила Р имеют вид: А→β, где AVN и βV*,
V-VTVN.
Распознавателями КС-языков служат автоматы с магазинной памятью (МП-автоматы). В общем виде МП-автомат можно определить следующим образом:
R(Q,V,Z,,q0,z0,F),
где Q — множество состояний автомата; V — алфавит входных символов автомата; Z — специальный конечный алфавит магазинных символов автомата (обычно он включает в себя алфавиты терминальных и нетерминальных символов грамматики), VZ; — функция переходов автомата, которая отображает множество Qx(V{})xZ на конечное множество подмножеств P(QxZ*); q0Q — начальное состояние автомата; z0Z — начальный символ магазина; FQ, — множество конечных состояний.
МП-автомат в отличие от обычного КА имеет стек (магазин), в который можно помещать специальные «магазинные» символы (обычно это терминальные и нетерминальные символы грамматики языка). Переход из одного состояния в другое зависит не только от входного символа, но и от одного или нескольких верхних символов стека. Таким образом, конфигурация автомата определяется тремя параметрами состояния текущим символом входной цепочки (положением указателя в цепочке) и содержимым стека.
МП-автомат условно можно представить в виде схемы на рис. 6.1.
Рис. 6.1. Общая условная схема автомата с магазинной памятью (МП-автомата)
Конфигурация МП-автомата описывается в виде тройки (q,α,)QxV*xZ*, которая определяет текущее состояние автомата q, цепочку еще непрочитанных символов α на входе автомата и содержимое магазина (стека) . Вместо α в конфигурации можно указать пару (β,n), где βV* — вся цепочка входных символов, nN{0}, n 0 — положение считывающего указателя в цепочке. Тогда один такт работы автомата можно описать в виде (q,aα,z) + (q',α,), если (q’,)(q,a,z), где q,q'Q, aV{}, V*, zZ{}, ,Z*. При выполнении акта (перехода) из стека удаляется верхний символ, соответствующий условию Перехода, и добавляется цепочка, соответствующая правилу перехода. Первый символ цепочки становится верхушкой стека. Допускаются переходы, при которых входной символ игнорируется (и тем самым он будет входным символом при следующем переходе). Эти переходы (такты) называются -переходами (-тактами). Аналогично, автомат не обязательно должен извлекать символ из стека — когда z=, этого не происходит.
МП-автомат называется недетерминированным, если из одной и той же его конфигурации возможен более чем один переход.
Начальная конфигурация МП-автомата, очевидно, определяется как (q0,α1,Z0), aV*. множество конечных конфигураций автомата — (q,,), qF, Z*.
МП-автомат допускает (принимает) цепочку символов, если, получив эту цепочка вход, он может перейти в одну из конечных конфигураций, — когда при окончании цепочки автомат находится в одном из конечных состояний, а стек содержит некоторую определенную цепочку. Тогда входная цепочка принимает (после окончания цепочки автомат может сделать произвольное количество -переходов). Иначе цепочка символов не принимается.
Язык, определяемый МП-автоматом, — это множество всех цепочек символов, которые допускает данный автомат. Язык, определяемый МП-автоматом R, обозначается как L(R). Два МП-автомата называются эквивалентными, если они определяют один и тот же язык. Если два МП-автомата R1 и R2 определяют один и тот же язык, это записывается как L(R1) = L(R2).
МП-автомат допускает цепочку символов с опустошением магазина, если при окончании разбора цепочки автомат находится в одном из конечных состояний, а стек пуст — конфигурация (q,,), qF. Если язык задан МП-автоматом R, который допускает цепочки с опустошением стека, это обозначается так: L(R). Для любого МП-автомата всегда можно построить эквивалентный ему МП-автомат, допускающий цепочки заданного языка с опустошением стека. То ecть МП-автомата R: МП-автомат R', такой что L(R) = L(R').
Кроме обычного МП-автомата существует также понятие расширенного МП-автомата. Расширенный МП-автомат может заменять цепочку символов конечной длины верхней части стека на другую цепочку символов конечной длины. В отличие »i обычного МП-автомата, который на каждом такте работы может изымать из пг ка только один символ, расширенный МП-автомата может изымать за один такт сразу некоторую цепочку символов, находящуюся на вершине стека. Функции переходов для расширенного МП-автомата отображает множество Qx(V{})xZ* на конечное множество подмножеств P(QxZ*).
Доказано, что для любого расширенного МП-автомата всегда можно построить эквивалентный ему обычный МП-автомат (обратное утверждение очевидно, и как любой обычный МП-автомат является и расширенным МП-автоматом). Таким образом, классы МП-автоматов и расширенных МП-автоматов эквивалентны и задают один и тот же тип языков.