- •Введение
- •Порождающие грамматики Хомского Цель
- •Неограниченные грамматики
- •Контекстно зависимые грамматики
- •Контекстно свободные грамматики
- •Автоматные грамматики
- •Эквивалентность грамматик
- •Однозначность грамматик
- •Задачи и упражнения
- •Контрольные вопросы
- •Конечный автомат
- •Детерминированный конечный автомат
- •Построение дка из -нка
- •Задачи и упражнения
- •Контрольные вопросы
- •Регулярные грамматики. Лексический анализатор. Роль лексических анализаторов
- •Лексические ошибки
- •Регулярные выражения
- •Преобразование регулярного выражения в автомат
- •Распознание токенов
- •Задачи и упражнения
- •Контрольные вопросы
- •Автоматы с магазинной памятью
- •Нисходящие методы разбора Устранение левой рекурсии
- •Левая факторизация
- •Метод рекурсивного спуска
- •Пример нисходящего интерпретатора
- •Задачи и упражнения
- •Контрольные вопросы
Задачи и упражнения
Модифицируйте программу «SimpleTranslator» (см. пример), чтобы выполнялись следующие функции:
Добавьте в транслятор возможность разбора многострочных арифметических выражений.
Расширьте систему диагностики ошибок. Сообщение об ошибке должно включать: номер строки, где ошибка была диагностирована и её описание.
Предусмотрите какой-либо протокол восстановления после ошибок.
Порядок выполнения задания
В соответствие с заданием разработайте грамматику, пригодную для LL(1) анализатора.
Постройте таблицу разбора.
Реализуйте транслятор.
Подготовьте тестовую программу (исходный код) и проверьте работу транслятора.
Таблица 10. Задания по вариантам.
Задания по вариантам |
|
|
Предусмотрите операцию возведения в заданную степень. |
|
Предусмотрите битовые операции AND| OR | NOT над целыми числами. |
|
Предусмотрите вычисление тригонометрических функций sin(x), cos(x), tan(x). |
|
Предусмотрите в трансляторе условный оператор вида: <условие> ? <выражение> : <выражение>. |
|
Предусмотрите в трансляторе условный оператор вида if <условие> then <выражение> else <выражение>. |
|
Предусмотрите в трансляторе оператор безусловного перехода к метке. |
|
Создайте транслятор символьного дифференцирования (Карпов, 2005), стр. 129 |
|
Создайте транслятор вычисления логических функций. |
|
Предусмотрите в трансляторе оператор цикла вида while <условие> do <выражение>. |
|
Предусмотрите в трансляторе оператор цикла вида for <id>:=<выражение> to <выражение> do <выражение> |
|
Предусмотрите в трансляторе оператор цикла вида repeat <выражение> until <условие> |
|
Предусмотрите операцию получения корня любой степени. |
|
Предусмотрите в трансляторе операторы ввода/вывода вида ReadLine(<id>) и WriteLine(<выражение>) соответственно. |
Контрольные вопросы
Какая грамматика называется леворекурсивной?
Для чего требуется устранение левой рекурсии?
Какие методы разбора вам известны?