Файл: Отчеты оформляются в виде файлов формата Microsoft Word (файлы других форматов не принимаются), размер шрифта 1214.docx
Добавлен: 12.01.2024
Просмотров: 644
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Основные требования к отчетам по лабораторным работам
Лабораторная/практическая работа № 1
Лабораторная/практическая работа № 2
Лабораторная/практическая работа № 3
Лабораторная/практическая работа № 4
Лабораторная/практическая работа № 5
Лабораторная/практическая работа № 6
Лабораторная/практическая работа № 7
и выполняется условие 3:
Условие 3. В грамматике есть правило вида
Z : χ X , где χ – произвольная, возможно пустая цепочка, а – цепочка, либо состоящая только из аннулируемых нетерминалов, либо просто пустая.
И, наконец, символ Y является последователем символа X, если Y есть последователь некоторого символа Z (неважно, непосредственный или нет)и выполняется условие 4:
Условие 4. В грамматике есть совокупность правил следующего вида:
где χ0, χ1,..., χn – произвольные цепочки, а 0, 1,..., n – цепочки, состоящие только из аннулируемых нетерминалов или просто пустые.
Условия 1 и 2 определяют отношение «символ Y есть непосредственный последователь символа X», а условия 3 и 4 – отношение «символ X есть последний (замыкающий) символ в цепочке, выводимой из символа Z». Искомое отношение «символ Y есть последователь символа X» является произведением этих двух отношений.
Хотя для решения задачи синтаксического анализа интерес представляют только множества последователей нетерминальных символов, для их вычисления приходится определять множества последователей всех (терминальных и нетерминальных) символов грамматики.
Множества предшественников и последователей символов грамматики будут самым существенным образом использоваться в процессе преобразования формальных грамматик в синтаксические акцепторы, т.е. при выполнении всех лабораторных работ 3-8 и курсовой работы.
Отчет должен содержать:
Нисходящими называются такие методы синтаксического анализа, при которых восстановление дерева грамматического разбора выполняется сверху от начального нетерминала контекстно-свободной грамматики вниз к анализируемому предложению (входной цепочке терминалов).
Каждый шаг процесса восстановления дерева состоит в применении одного непосредственного вывода, т. е. в замене единственного нетерминального символа правой частью какого-либо правила для этого нетерминала. Главное прагматическое требование к этому процессу – необходимость организации безоткатного однонаправленного движения вниз по дереву.
Отсюда следует, что выбор правила на каждом шаге должен осуществляться таким образом, чтобы гарантировать:
Оказывается, что дать такие гарантии можно отнюдь не для любой грамматики и, более того, не для любого языка.
Существуют языки, для которых никакая порождающая грамматика не позволяет организовать безвозвратное нисходящее восстановление дерева грамматического разбора (в чистом виде, т. е. без применения специальных мер, модифицирующих свойства грамматики). Существуют и такие языки, для которых одни порождающие грамматики пригодны для детерминированного нисходящего восстановления дерева, а другие нет. Языки программирования обычно относятся именно к этой группе.
В этом разделе вначале будет сформулирована основная идея группы нисходящих методов, затем определены критерии выбора правила для выполнения каждого очередного непосредственного вывода и на этой основе – условий, которым должна удовлетворять грамматика для организации восстановления дерева разбора сверху вниз. В общей форме будут определены
Условие 3. В грамматике есть правило вида
Z : χ X , где χ – произвольная, возможно пустая цепочка, а – цепочка, либо состоящая только из аннулируемых нетерминалов, либо просто пустая.
И, наконец, символ Y является последователем символа X, если Y есть последователь некоторого символа Z (неважно, непосредственный или нет)и выполняется условие 4:
Условие 4. В грамматике есть совокупность правил следующего вида:
Z | : | χ1Z11 |
Z 1 | : | χ2Z22 |
... | | |
Zn-1 | : | χn Znn |
Zn | : | χ0X0, |
где χ0, χ1,..., χn – произвольные цепочки, а 0, 1,..., n – цепочки, состоящие только из аннулируемых нетерминалов или просто пустые.
Условия 1 и 2 определяют отношение «символ Y есть непосредственный последователь символа X», а условия 3 и 4 – отношение «символ X есть последний (замыкающий) символ в цепочке, выводимой из символа Z». Искомое отношение «символ Y есть последователь символа X» является произведением этих двух отношений.
Хотя для решения задачи синтаксического анализа интерес представляют только множества последователей нетерминальных символов, для их вычисления приходится определять множества последователей всех (терминальных и нетерминальных) символов грамматики.
Множества предшественников и последователей символов грамматики будут самым существенным образом использоваться в процессе преобразования формальных грамматик в синтаксические акцепторы, т.е. при выполнении всех лабораторных работ 3-8 и курсовой работы.
-
Порядок выполнения работы (рекомендуется использовать в качестве примера систему правил Samples/Sample3):
-
Разработать описание синтаксиса языка, заданного на курсовую работу. Описание синтаксиса должно включать:
-
структуру файла программы (состав модулей/секций файла); -
структуру и назначение каждой секции/модуля; -
формат и точный способ выполнения всех операторов (присваивания, цикла, …) в виде последовательности операций, сложность которых не выше сложения/ умножения/сравнения/… двух значений, условного или безусловного перехода.
-
Используя систему правил Samples/Sample3 как основу:
-
освоить и изучить ввод и редактирование синтаксических правил, содержащих слова-строки, группирование, операции выбора и квантификаторы; -
проанализировать соответствие фактических правил видимым/редактируемым правилам в процессе редактирования системы правил; понять, как выявляется начальный нетерминал грамматики; -
разобраться в причинах возникновения недоступных и бесплодных нетерминалов, отображаемых серым цветом и отсутствующих в системе фактических правил после завершения ввода правил, содержащих такие символы; -
разобраться в том, каким образом пакет ВебТрансБилдер разделяет правила на лексические и синтаксические; описать принципы этого разделения.
-
Изучить по [2-5] теоретические определения и алгоритмы вычисления отношений предшествования и последования для символов грамматики. -
Освоить просмотр свойств грамматик и их символов в пакете ВебТрансБилдер; необходимо достичь понимания того, почему те или иные символы грамматики имеют свой конкретный набор свойств (пункты меню «Показать/Правила грамматики», «Показать/Множества предшественников» и «Показать/Множества последователей»). -
Используя полученные навыки работы с грамматиками и программным обеспечением, начать поэтапную разработку грамматики языка для заданного варианта курсовой работы, реализовать правила, определяющие как минимум выражения со всеми знаками операций языка, заданного на курсовую работу, оператор присваивания и не менее одного управляющего оператора. -
Выполнить построение транслятора по разработанной грамматике и шаблону табличного восходящего анализатора для языка JavaScript. Проверить работоспособность построенного транслятора на фрагментах тестовых программ, написанных на заданном языке; добиться того, чтобы выражения и выполняемые операторы воспринимались транслятором как правильные. -
Подготовить, сдать и защитить отчет к лабораторной работе.
-
Требования к содержанию отчета.
Отчет должен содержать:
-
цель работы; -
описание синтаксиса языка как результат выполнения пункта 4.1 и как часть расчетно-пояснительной записки к курсовой работе; -
результаты разработки (пункт 4.5) и тестирования (пункт 4.6) грамматики для языка, заданного на курсовую работу; -
матричное представление отношений предшествования и последования для символов этой грамматики, сформированное пакетом ВебТрансБилдер; краткое описание этих отношений; -
результаты своего анализа алгоритмов и способов преобразования видимой системы правил в фактическую, выявления или формирования начального нетерминала, разделения правил на лексические и синтаксические, выявления недостижимых и бесплодных нетерминалов; этот анализ должен быть проведен для результата выполнения пункта 4.5; -
выводы и заключение.
-
Контрольные вопросы.
-
Что такое терминальные и нетерминальные символы формальных грамматик? -
Что такое рекурсия? Перечислите виды рекурсии. -
Что такое контекстно-свободные грамматики? -
Вычислите множество предшественников цепочки символов
WR для грамматики Ga2. -
Является ли однозначной грамматика:
-
S : S "|" S -
S : S S -
S : "(" S ")" -
S : ident
-
Что такое аннулируемый нетерминал? -
Что такое стековая память? Какие операции обычно определяются над стековой памятью? -
Что такое множество последователей символа грамматики? -
Чем понятие вывода отличается от понятия непосредственного вывода? -
Что такое недетерминированность конечного автомата без памяти? Какие бывают виды недетерминированности? -
Устраните левую рекурсию в такой грамматике:
-
S : "(" L ")" -
S : ident -
L : L "," S -
L : S
-
Что такое дерево грамматического разбора? -
Какие нетерминальные символы называются бесплодными? -
Что такое рекурсивный цикл в грамматике? -
Какие грамматики называются эквивалентными? -
Могут ли быть эквивалентными два конечных автомата без памяти, имеющие разное количество финальных состояний? -
Вычислите множества последователей для грамматики из вопроса 6.5. -
Что такое контекстно-зависимая грамматика? -
Что такое отношение предшествования символов? -
Можно ли удалить из грамматики пряморекурсивный нетерминал? -
Постройте дерево разбора предложения (ident, (ident, ident)) в грамматике из вопроса 6.11. -
Что такое факторизация? -
Сформулируйте физический смысл перехода по пустой цепочке в финальное состояние конечного автомата без памяти. -
Можно ли и, если можно, то как преобразовать косвенную рекурсию в прямую? -
Определите алфавиты терминальных и нетерминальных символов для грамматики из вопроса 6.11. -
Какие конечные автоматы без памяти называются эквивалентными? -
Перечислите условия, которые определяют отношение последования символов грамматики. -
Вычислите вручную множества предшественников и последователей и все свойства символов для фрагмента грамматики, определяющий синтаксис условного оператора языка С:
-
Operator : … -
Operator : "if" "(" LogicalExpression ")" Operator Rest -
Rest : "else" Operator -
Rest :
-
Является ли грамматика вопроса 6.29 однозначной? -
Как соотносятся между собой языки и грамматики? -
Могут ли быть эквивалентными два конечных автомата без памяти, имеющие различное количество рабочих состояний? -
Как вычисляется множество предшественников цепочки символов? -
Почему из системы порождающих правил грамматики не может быть удален ее начальный нетерминал? -
Как связаны между собой понятия вывода и дерева грамматического разбора?
Лабораторная/практическая работа № 4
-
Название работы: «Синтаксис языков программирования. Нисходящий синтаксический анализ. -
Цели работы: изучение основных идей и понятий нисходящих методов синтаксического анализа, выявление свойств формальных грамматик, необходимых для реализации нисходящего восстановления дерева грамматического разбора, приобретение навыков построения процедурной и различных автоматных реализаций нисходящего анализа, исследование поведения нисходящих синтаксических акцепторов. -
Основные теоретические сведения:
-
Нисходящие методы синтаксического анализа
Нисходящими называются такие методы синтаксического анализа, при которых восстановление дерева грамматического разбора выполняется сверху от начального нетерминала контекстно-свободной грамматики вниз к анализируемому предложению (входной цепочке терминалов).
Каждый шаг процесса восстановления дерева состоит в применении одного непосредственного вывода, т. е. в замене единственного нетерминального символа правой частью какого-либо правила для этого нетерминала. Главное прагматическое требование к этому процессу – необходимость организации безоткатного однонаправленного движения вниз по дереву.
Отсюда следует, что выбор правила на каждом шаге должен осуществляться таким образом, чтобы гарантировать:
-
Восстановление дерева для любого правильного предложения и -
Обнаружение невозможности восстановить дерево для любого неправильного предложения.
Оказывается, что дать такие гарантии можно отнюдь не для любой грамматики и, более того, не для любого языка.
Существуют языки, для которых никакая порождающая грамматика не позволяет организовать безвозвратное нисходящее восстановление дерева грамматического разбора (в чистом виде, т. е. без применения специальных мер, модифицирующих свойства грамматики). Существуют и такие языки, для которых одни порождающие грамматики пригодны для детерминированного нисходящего восстановления дерева, а другие нет. Языки программирования обычно относятся именно к этой группе.
В этом разделе вначале будет сформулирована основная идея группы нисходящих методов, затем определены критерии выбора правила для выполнения каждого очередного непосредственного вывода и на этой основе – условий, которым должна удовлетворять грамматика для организации восстановления дерева разбора сверху вниз. В общей форме будут определены