
- •Содержание
- •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.7.Генераторы лексических и синтаксических анализаторов
ACCENT
Компилятор компиляторов, не накладывающий никаких ограничений на грамматики: никакой адаптации к специфическим методам синтаксического анализа таким как LL(k) или LALR(k) не требуется. Поддерживает расширенную БНФ.
[http://www.combo.org/accent/]
AFLEX & AYACC
Aflex и Ayacc аналогичны юниксовым инструментам Lex и Yacc, но написаны на Ада и генерируют на выходе программу на Ада.
[http://www.ics.uci.edu/~arcadia/Aflex-Ayacc/aflex-ayacc.html]
ALE
Attribute-Logic Engine обьединяет синтаксический анализ структуры фразы и логическое программирование в ограничениях с типизированными структурами признаков (typed feature structures).
[http://www.sfs.nphil.uni-tuebingen.de/~gpenn/ale.html]
ANAGRAM
Генератор синтаксических анализаторов LALR с возможностью автоматического восстановления после синтаксических ошибок.
[http://www.parsifalsoft.com/]
BTYACC
BTYACC - модифицированная версия Yacc, поддерживающая автоматический откат и семантическое устранение неоднозначности для разбора неоднозначных грамматик.
[http://www.siber.com/btyacc/]
BYACC
Berkeley Yacc - свободно распространяемый генератор синтаксических анализаторов LALR(1). Он сделан как можно более совместимым с AT&T Yacc.
[ftp://ftp.cs.berkeley.edu/ucb/4bsd/byacc.tar.Z]
BISON
GNU версия Yacc.
[http://www.combo.org/lex_yacc_page]
BISON/EIFFEL
Генератор синтаксических анализаторов Bison с возможностью вывода в формате Eiffel.
[http://www.spin.ch/~kalberer/bison/index.htm]
COGENCEE
Генератор компиляторов для Delphi,разработанный на основе Coco.
[http://www.cocolsoft.com.au/cogen.htm]
COCO
Coco/R генерирует анализаторы, работающие по методу рекурсивного спуска и связанные с ними сканеры по атрибутным грамматикам.
[http://cs.ru.ac.za/homes/cspt/cocor.htm]
DEPOT4
Генератор нисходящих распознавателей, поддерживающий описание в стиле схожем с синтаксически управляемой схемой перевода. Язык описания основан на РБНФ. Depot4 предназначен для использования неспециалистами при создании проблемно - ориентированных языков.
[http://www.math.tu-dresden.de/wir/depot4/Depot4.html]
EAG
Компилятор компиляторов, основанный на Extended Affix Grammars.
[ftp://hades.cs.kun.nl/pub/eag/]
FLEX
GNU версия генератора сканнеров Lex.
[http://www.combo.org/lex_yacc_page]
FLEX/EIFFEL
Eiffel версия генератора лексических анализаторов Flex.
[http://www.spin.ch/~kalberer/flex/index.htm]
GOBO EIFFEL LEX & YACC
Реализации Lex и Yacc для Eiffel.
[http://www.gobosoft.com/eiffel/gobo/]
HAPPY
Happy - система генерации парсеров для Haskell, аналогичная инструменту Yacc для C. Как и Yacc, она берет файл, содержащий БНФ спецификацию грамматики и производит модуль на Haskell, содержащий синтаксический анализатор этой грамматики.
[http://www.haskell.org/happy/]
HOLUB
ПО для книги Аллена Холуба "Compiler Design in C'' (LeX, occs, LLama)
[http://www.holub.com/compiler/compiler.html]
LEX
Lex - классический генератор лексических анализаторов AT&T, поставляемый с Unix.
[http://www.combo.org/lex_yacc_page]
LLGEN
LLgen - это инструмент для создания эффективного анализатора на основе рекурсивного спуска из ELL(1) грамматики. Грамматика может быть неоднозначная или более общая чем ELL(1): LLgen предоставляет как статические так и динамические средства для разрешения неоднозначности.
[http://www.cs.vu.nl/~ceriel/LLgen.html]
LISA
LISA генерирует таблично-управляемые лексические анализаторы и LL(1) синтаксические анализаторы по регулярным выражениям и БНФ. LISA поддерживает атрибутные вычислители Кеннеди - Уорена и Катаямы.
[http://marcel.uni-mb.si/nikolaj/sigplan.htm]
MANGO
Mango - генератор синтаксических анализаторов, включенный в систему Self. Синтаксические анализаторы Mango автоматически создают дерево разбора а не просто предоставляют ловушки для вызова низкоуровневых функций преобразования во время анализа.
[http://www.cs.ucsb.edu/oocsb/self/papers/mango.html]
MUSKOX
MUSKOX аннотирует классы в РБНФ для LR(k) грамматик. Он предоставляет наследование грамматик и переопределение правил. Также поддерживает множественные анализаторы, запись/воспроизведение журнала трассировки и т.д.
[http://www.mastersys.com/]
MKS LEX & YACC
Lex - совместимый генератор лексических анализаторов и Yacc - совместимый генератор синтаксических анализаторов для PC.
[http://www.mks.com/solution/ly/]
NEWYACC
NewYacc - внешний интерфейс к Yacc. Он предоставляет надмножество Yacc с трансляциями, подключенными к граматикам в дополнение к действиям. Трансляции схожи с простыми синтаксически управляемыми схемами перевода, в том значении, то они преобразуют переупорядочивают, выбирают, приращивают и повторяют входной поток символов соответствующим образом просматривая завешенное дерево разбора.
[ftp://flubber.cs.umd.edu/src/]
PCYACC
PCYACC в основном используется для разработки встроенных языков в продуктах третьих фирм, использующих языки типа SQL или SGML. Он содержит поддержку наиболее распространенных языков в виде исходного кода.
[http://www.abxsoft.com/pcyacc.htm]
PRECC
PRECC eXtended генератор компиляторов с бесконечным заглядыванием вперед для контекстно-зависимых грамматик. Спецификации описываются в РБНФ с наследуемыми и синтезируемыми атрибутами.
[http://www.comlab.ox.ac.uk/archive/redo/precc.html]
PROGRAMMAR
ProGrammar Developer's Toolkit - интегрированый набор инструментов и утилит для создания, тестирования и отладки синтаксических анализаторов. Он включает в себя объектно-ориентированный язык, визуальную среду разработки и интерактивный отладчик.
[http://www.programmar.com/]
RDP
RDP компилирует атрибутные LL(1) грамматики, украшенные семантическими действиями языка C, в компиляторы на основе рекурсивного спуска.
[http://www.dcs.rhbnc.ac.uk/research/languages/rdp.shtml]
RE2C
RE2C - инструмент для генерации основанных на C распознавателей по регулярным выражениям. Сгенерированный код не привязан к какой либо конкретной входной модели.
[http://www.tildeslash.org/re2c/index.html]
S/SL
S/SL является языком программирования для конструирования компиляторов. Он включает последовательность, повторение и выбор; ввод, сравнение и вывод токенов; вывод сообщений об ошибках; подпрограммы; вызов семантических операций.
[ftp://ftp.cs.toronto.edu/pub/ssl.tar.Z]
SCANGEN, LLGEN, LALRGEN
ScanGen, LLGen, LARLGen - генераторы лексических и LL(1) и LALR(1) анализаторов, представленные в книге Фишера и Лебланка "Crafting a Compiler".
[ftp://ftp.csc.ncsu.edu/pub/compilers/crafting_compiler/tools]
TP LEX AND YACC
Генератор лексических и синтаксических анализаторов для Turbo Pascal.
[http://www.musikwissenschaft.uni-mainz.de/~ag/tply/tply.html]
TROOPER
Reusable OO Parser for Eiffel Reengineering полностью написан на Eiffel.
[http://www.eiffel-forum.org/archive/monash/trooper.htm]
VISUALPARSE++
Visual Parse++ предоставляет визуальный интерфейс, позволяющий любому программисту интерактивно изучать и применять технологии лексического и синтаксического анализа.
[http://www.sand-stone.com/prod02.htm]
YACC
Yacc - классический генератор синтаксических анализаторов AT&T, поставляемый с Unix.
[http://www.combo.org/lex_yacc_page]
YACC++
Не просто набор классов-оберток C++ вокруг вывода Lex и Yacc. Yacc++ и Language Objects Library являются объектно- ориентированной версией Lex и Yacc. Среди возможностей - грамматические классы с наследованием, регулярные выражения, эффективно интегрированные в LR анализ, решения для включения файлов, ключевые слова в подстроках, вложенные комментарии и т.д.
[http://www.world.std.com/~compres/]
YOOC
ОО компилятор компиляторов, полностью написанный на Eiffel.
[http://www.eiffel-forum.org/archive/monash/yoocc.htm]
ZLEX
Zlex это генератор лексических анализаторов, совместимый с Lex и предоставляющий поддержу Unicode и другие дополнительные возможности.
[http://opal.cs.binghamton.edu/~zdu/zlex/]
ZYACC
Zyacc - совместимый с Yacc генератор синтаксических анализаторов, предлагающий наследуемые атрибуты, семантические тесты и другие дополнительные возможности.
[http://opal.cs.binghamton.edu/~zdu/zyacc/]