- •1. Рекурсивные алгоритмы
- •1.1. Основные определения
- •1.2. Накопления суммы или произведения.
- •Упражнение
- •Варианты задач
- •1.3. Быстрая сортировка
- •1.5.1.Основные определения
- •1.5.2. Пример задания некоторого языка l1 в бнф
- •1.5.3. Пример разработки программы "Синтаксический анализатор "
- •Ошибок нет Нет символа "[" Ошибка в выраженииВыходная форма:
- •2 Этап. Разбор второго правила. Раскрытие процедуры SimpExpr.
- •1.5.4. Лабораторная работа " Синтаксический анализатор "
- •Итак, метод для рассматриваемой задачи будет описан в виде синтаксических
- •На этом этапе можно продолжить проектирование в одном из двух направле-
- •2. Рекурсивный тип данных
- •Основные определения
- •2.2. Динамическое распределение памяти
- •Упражнение
- •Лабораторная работа “Генеалогическое дерево”
- •Варианты заданий
- •Литература
- •Содержание
1.5.1.Основные определения
Слово (символ) - элемент словаря языка.
Предложение - последовательность слов.
Терминальные символы - основные символы языка (буквы, цифры, служебные символы, ключевые слова).
Нетерминальные символы - грамматические категории языка (идентификатор, константа, выражение, инструкция и т.д.).
Синтаксис - совокупность правил и формул, которые задают множество (формально-правильных) предложений.
Грамматический разбор - процесс распознавания предложений и их структуры.
Язык L = L(T,N,P,S) задается: а) словарем Т терминальных символов, б) множеством N нетерминальных символов, в) множеством Р порождающих правил (синтаксисом), г) символом S (из N), называемым начальным символом, порождащим язык L.
1.5.2. Пример задания некоторого языка l1 в бнф
<индексное выражение> ::= [<простое выражение>]
<простое выражение> ::= <буква><цифра>
<простое выражение>+<буква>
<простое выражение>-<цифра>
<буква> ::= AB
<цифра> ::= 123
В примере используются следующие символы:
[, ], +, -, A, B, 1 , 2, 3 - терминальные символы (словарь Т);
<индексное выражение>, <простое выражение>, <буква>, <цифра> - нетерминальные символы, (заключаются в угловые скобки);
<индексное выражение> - начальный символ.
[A]
Примеры предложений [2]
языка L1 : [A-3]
[A+B-1+A-2]
. . .
Каждое предложение порождающего правила (справа от "::=") содержит композицию терминальных и (или) нетерминальных символов, которая может быть представлена тремя формами.
Последовательность, когда один символ следует за другим.
Например: <простое выражение> содержит 3 последовательных символа А-3.
Синтаксический анализ очередного символа в последовательности происходит только в том случае, если предыдущие символы правильные (или ошибка локализована). Следовательно, при разборе используется логическая операция "И".
Например,
если ("[" - верно) И (<простое выражение> - верно) И ( "]"- верно) то
ошибок нет.
2)Альтернатива, когда одна часть предложения отделяется от другой разделителем "" (ИЛИ). Для продолжения разбора достаточно, чтобы верной была одна из этих частей.
Например, разбор конструкции <простое выражение> должно начинаться с проверки: если <буква> ИЛИ <цифра> то продолжение просмотра.
3)Повторение, когда предложение содержит рекурсию: среди символов предложения есть определяемый символ (стоящий слева от "::=" ). Для реализации потребуется рекурсивная процедура.