
- •Содержание
- •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.8.Генераторы лексических и синтаксических анализаторов на java
ANTLR
ANTLR 2.xx - полностью переработанная версия реализованная на Java и генерирующая программу на Java. ANTLR 2.xx включает все три инструмента PCCTS, обобщая понятие лексического, синтаксического анализа и обхода дерева в простое понятие применения грамматической структуры к входному потоку - независимо от того, что это может быть поток символов, токенов или узлов дерева. [http://www.antlr.org/]
BYACC/JAVA
BYACC/Java является расширением Berkeley v 1.8 Yacc. Добавлен флаг "-j", позволяющий генерировать программу на Java. [http://sparc20.dsi.unimo.it/sparc20/byacc/byaccDoc.html]
COCO/JAVA
Java версия CoCo, генератора лексических и синтаксических анализаторов.
[http://www.ssw.uni-linz.ac.at/Projects/Coco/Coco.html]
CUP
LALR генератор синтаксических анализаторов для Java.
[http://www.cs.princeton.edu/~appel/modern/java/CUP/why.html]
GENERIC INTERPRETER
Производит автономные или встроенные интерпретаторы и компиляторы на Java. Язык определяется на лету и исходные потоки, написанные на этом языке, могут быть интерпретированы в любое время, даже по мере развития языка. Поддерживает LL(1), LR(0), SLR(1) и LR(1).
[http://www.csupomona.edu/~carich/gi/]
JAVA COMPILER COMPILER
Генератор синтаксических анализаторов Sun. Создает анализаторы на Java из описания грамматики в стиле LEX/YACC. Полностью написан на Java. Нисходящий синтаксический анализ (рекурсивный спуск) c переменным заглядыванием вперед.
[http://www.metamata.com/JavaCC/]
JACCIE
Jaccie - образовательный инструмент для визуализации техники компилирования. Состоит из генераторов лексических и синтаксических анализаторов. Пользователь может выбирать между LL(1), LR(0), SLR(1), LALR(1) и LR(1) анализаторами.
[http://www2.informatik.unibw-muenchen.de/Research/Tools/JACCIE/jaccie.html]
JAX
Jax генерирует лексические анализаторы из регулярных выражений, встроенных в скелет java файла. Jax не является [f]lex совместимым, и, в частности, не позволяет определять макросы или контекстно-зависимое сравнение выражений.
[http://www.meurrens.org/ip-Links/Java/codeEngineering/blackDown/jax.html]
JAY
Версия BSD Yacc, генерирующая код Java.
[http://www.informatik.uni-osnabrueck.de/bernd/jay/]
JB
Система JB берет синтаксические анализаторы, сгенерированные генератором синтаксических анализаторов Gnu Bison и транслирует их в Java (tm). JB берет выходной файл Bison на C и сканирует его для выделения таблиц и констант. Затем JB сканирует различные файлы шаблонов, указанные пользователем и вставляет полученную информацию в назначенные места шаблона. JB предоставляет два метода генерации соответствующих лексических анализаторов: (1) JB берет лексические анализаторы сгенерированные генератором Gnu flex и транслирует их в Java. (2) "Родной" лексический анализатор, который может быть модифицирован для получения лексических анализаторов типичных языков программирования.
[ftp://ftp.cs.colorado.edu/pub/cs/distribs/arcadia/jb.txt]
JELL
Jell является генератором синтаксических анализаторов, генерирующий анализаторы, работающие по методу рекурсивного спуска из LL(1) грамматик. Вы можете также встраивать дополнительные директивы для получения кроме стандартных и дополнительных возможностей, не присущих LL(1).
[http://www.meurrens.org/ip-Links/Java/codeEngineering/blackDown/jell.html]
JFLEX
JFlex - генератор лексических анализаторов для Java с полной поддержкой Unicode и встроенной поддержкой CUP.
[http://www.jflex.de/]
JLEX
JLex - генератор лексических анализаторов, который может быть использован в комбинации с CUP.
[http://www.cs.princeton.edu/~appel/modern/java/JLex/]
JIKES PG
Jikes Parser Generator может быть использован для генерации синтаксических анализаторов для LALR(k) грамматик. Также предоставляет поддержку автоматической диагностики и восстановления после синтаксических ошибок.
[http://www10.software.ibm.com/developerworks/opensource/jikes/]
JTB
Java Tree Builder используется совместно с генератором синтаксических анализаторов JavaCC. Он берет обычный грамматический файл JavaCC и автоматически генерирует следующее: набор классов синтаксического дерева; суперкласс Visitor, метод по умолчанию которого просто посещает дочерние узлы текущего узла; грамматику JavaCC с точной аннотацией для построения синтаксического дерева во время синтаксического анализа.
[http://www.cs.purdue.edu/jtb/]
METAMATA PARSE
MetaMata Parse является инструментом продолжающим JavaCC от тех же самых авторов.
[http://www.metamata.com/products/parse_top.html]
MUSKOX/JAVA
MUSKOX аннотирует классы в РБНФ для LR(k) грамматик. Он предоставляет наследование грамматик и переопределение правил. Также поддерживает множественные анализаторы, запись/воспроизведение журнала трассировки и т.д.
[http://www.mastersys.com/]
PAT
Пакет COM.stevesoft.pat позволяет java приложениям или аплетам компилировать и использовать регулярные выражения perl5. Также выполняет подстановку текста. Пакет работает конвертируя регулярные выражения в список связанных по одиночке объектов Pattern, каждый из которых знает как сопоставлять свой собственный кусочек текста. Поэтому можно расширить возможности сопоставления образцов этого пакета, создав свой собственный класс на основе Pattern.
[http://www.javaregex.com/]
SABLE CC
SableCC - объектно-ориентированная среда, генерирующая компиляторы (и интерпретаторы) на Java. Она использует объектно-оринтированные методы для автоматического создания строго типизированного абстрактного синтаксического дерева, которое соответствует грамматике компилируемого языка и упрощает отладку. SableCC генерирует классы прохода дерева используя расширенную версию Visitor design pattern позволяющего выполнять действия над узлами абстрактного синтаксического дерева используя наследование.
[http://www.sable.mcgill.ca/sablecc/]