и выполняется условие 3:
Условие 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):
-
Разработать описание синтаксиса языка, заданного на курсовую работу. Описание синтаксиса должно включать:
-
структуру файла программы (состав модулей/секций файла);
-
структуру и назначение каждой секции/модуля;
-
формат и точный способ выполнения всех операторов (присваивания, цикла, …) в виде последовательности операций, сложность которых не выше сложения/ умножения/сравнения/… двух значений, условного или безусловного перехода.
-
Название работы: «Синтаксис языков программирования. Нисходящий синтаксический анализ.
-
Цели работы: изучение основных идей и понятий нисходящих методов синтаксического анализа, выявление свойств формальных грамматик, необходимых для реализации нисходящего восстановления дерева грамматического разбора, приобретение навыков построения процедурной и различных автоматных реализаций нисходящего анализа, исследование поведения нисходящих синтаксических акцепторов.
-
Основные теоретические сведения:
-
Нисходящие методы синтаксического анализа
Нисходящими называются такие методы синтаксического анализа, при которых восстановление дерева грамматического разбора выполняется сверху от начального нетерминала контекстно-свободной грамматики вниз к анализируемому предложению (входной цепочке терминалов).
Каждый шаг процесса восстановления дерева состоит в применении одного непосредственного вывода, т. е. в замене единственного нетерминального символа правой частью какого-либо правила для этого нетерминала. Главное прагматическое требование к этому процессу – необходимость организации
безоткатного однонаправленного движения вниз по дереву.
Отсюда следует, что выбор правила на каждом шаге должен осуществляться таким образом, чтобы гарантировать:
-
Восстановление дерева для любого правильного предложения и
-
Обнаружение невозможности восстановить дерево для любого неправильного предложения.
Оказывается, что дать такие гарантии можно отнюдь не для любой грамматики и, более того, не для любого языка.
Существуют языки, для которых никакая порождающая грамматика не позволяет организовать безвозвратное нисходящее восстановление дерева грамматического разбора (в чистом виде, т. е. без применения специальных мер, модифицирующих свойства грамматики). Существуют и такие языки, для которых одни порождающие грамматики пригодны для детерминированного нисходящего восстановления дерева, а другие нет. Языки программирования обычно относятся именно к этой группе.В этом разделе вначале будет сформулирована основная идея группы нисходящих методов, затем определены критерии выбора правила для выполнения каждого очередного непосредственного вывода и на этой основе – условий, которым должна удовлетворять грамматика для организации восстановления дерева разбора сверху вниз. В общей форме будут определены