
- •Содержание
- •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. Организация рейтингового контроля по дисциплине «Системное программное обеспечение. Синтаксические анализаторы»
11.9.Пакеты для разработки компиляторов
COCKTAIL
Cocktail - это набор генераторов почти для всех фаз работы компилятора: REX, генератор сканеров; LALR и ELL, генератор синтаксических анализаторов для LALR(1) и LL(1); AST, генератор для абстрактных синтаксических деревьев; AG, генератор атрибутных вычислителей; PUMA, инструмент преобразования, основанный на сопоставлении образцов.
[http://www.first.gmd.de/cocktail/]
ELI
Eli предоставляет решение для большинства задач, возникающих при создании языка програмирования - начиная со структурного анализа (решаемого с помощъю средств типа LEX и YACC), через анализ имен, типов и значений к сохранению структур данных трансляции и получения выходного текста.
[http://www.cs.colorado.edu/~eliuser/]
GENTLE
Интегрированная система, перекрывающая весь спектр задач по конструированию компиляторов. Gentle поддерживает распознавание языка, определение абстрактных синтаксических деревьев, интеллектуальный обход дерева, выбор оптимального кода для микропроцессоров, и простой несинтаксический анализ для трансляции "источник - источник".
[http://www.first.gmd.de/gentle/]
PCCTS
PCCTS является набором средств помогающих в создании программ распознавания языка и трансляторов; он состоит из трех инструментов: ANTLR, генератор парсеров, который функционирует подобно Yacc, но основан на predicated LL(k); DLG, простой генератор лексических анализаторов в духе Lex. SORCERER, генератор синтаксических анализаторов позволяющий программисту определять структуру данных дерева через грамматику.
[http://www.antlr.org/pccts133.html]
Список сокращений
БНФ форма Бэкуса-Наура
ДКА детерминированный конечный автомат
КА конечный автомат
КС контекстно-свободные
МП магазинная память
НФБН новая форма Бэкуса-Наура
ПО программное обеспечение
СПО системное программное обеспечение
УМК учебно-методический комплекс
УУ устройство управления
Yacc Yet another compiler compiler
GI Generic Interpreter
Lex Lexical regular expression compiler
RTF Rich Text Format
DXF Data Exchange Format
XML Extended Markup Language
Литература
Основная литература
Системное программное обеспечение / А.В. Гордеев, А.Ю. Молчанов. СПб.: Питер, 2001. 736с.:ил.
Stephen C. Johnson Yacc: Yet Another Compiler-Compiler. Bell Laboratories Murray Hill, New Jersey 07974.
Брой М. Информатика. Структуры систем и системное программирование: В 4 частях.: Пер. с нем. М.: Диалог-МИФИ, 1996. Ч. 3. 224с.
Серебряков В. А., М. П. Галочкин Основы конструирования. - М.: Эдиториал УРСС, 2001. - 222 c. - ISBN 5-8360-0242-8
Глухов Д.О., Глухов А.О., Глухова Т.М. Методические указания к лабораторным работам по курсу «Системное программное обеспечение. Лексические анализаторы» для студентов специальности 40.02.01. – Новополоцк: УО «ПГУ», 2002. – 48С
Дополнительная литература
Compilers: Principles, Techniques, and Tools (http://www1.fatbrain.com/asp/bookinfo/bookinfo.asp?theisbn=0201100886&vm=c) Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman Addison-Wesley Pub Co ISBN: 0201100886
Lex & Yacc (http://www.ora.com/catalog/lex/index.html) John R. Levine, Tony Mason, Doug Brown Paperback - 366 pages 2nd/updated edition (October 1992) O'Reilly & Associates ISBN: 1565920007
Modern Compiler Implementation in C (http://www.cs.princeton.edu/~appel/modern/c/index.html) Andrew W. Appel, Maia Ginsburg Hardcover - 560 pages Rev expand edition (January 1998) Cambridge University Press ISBN: 052158390X
Архангельский А.Я.. Программирование в С++Builder 5. – М.: ЗАО «Издательство БИНОМ», 2000г. – 1152с.: ил.
Герберт Шилдт. MFC: основы программирования: Пер. с англ. – К.: Издательская группа BHV, 1997. – 560с.
Дерк Луис. С и С++. Справочник/ Пер. с нем. ─ М.: Восточная Книжная Компания, 1997. ─ 592 с.: ил.
Корн Г, Корн Т. Справочник по математике (для научных работников и инженеров). – М: Наука, 1977г.
Майкл Дж. Янг. Visual C++ 6. Полное руководство: Пер. с англ. – К.: Издательская группа BHV, 2000. – 1056с., ил.
Офицеров Д.В. и др. Программирование на пресональных ЭВМ: Практикум: Учеб. пособие/ Д.В. Офицеров, А.Б. Долгий, В.А. Старых; Под общ. ред. Д.В. Офицерова. – Мн.: Высш шк., 1993. – 256с.
Турбо Паскаль 7.0 – К.: Торгово-издательское бюро BHV, 1996 – 448с.: ил.
Хознер С. Visual C++ 6: учебный курс – СПб: Издательство «Питер», 2000. – 567с.: ил.