Синтаксические деревья и неоднозначность

Способы представления синтаксиса языка. Задание бесконечного текста конечными средствами. Проблема разбора. Классификация языков

Требования, предъявляемые к грамматикам

Отношения и операции над ними

Пусть есть 2 отношения: aRb и aPb, где a,bÎA.Рассмотрим отношение RPи назовем его произведением отношений R и P. Отношение RP имеет место тогда и только тогда, когда на множестве Aесть элемент c, для которого выполняется aRc и cPb.Тогда между a и b есть отношение RP, т.е. aRPb.

Пример: aRb: b=a+1; aPb: b=a+2

Из этих двух предложений следует, что aRPb b=a+3

Отыскать n-ю степень отношения R на множестве A означает найти такое подмножество элементов c1…cn, для которых выполняется отношение: aRc1,c1Rn-1b,c1Rc2,c2Rn-2b….

n-1 степень R получила название транзитивного замыкания отношения R и обозначается – R+:

R+=R1ÈR2ÈR3È…

R*=R0ÈR1ÈR2È…

R0-единичное отношение (aR0b означает a=b).

R*– рефлексивно-транзитивное замыкание отношения R.

Пусть задана грамматика и нетерминальный символ – U. Необходимо отыскать множество головных символов цепочек, выводимых из U.(т.е.UÞ+Sx).

Префикс U обозначается как SPRU.

Отношение SPRU имеет место Û,когда в грамматике есть правило U=S…

Чтобы отыскать транзитивное замыкание отношения Þ+, должны иметь место выводы:UÞS1…ÞS2…Þ…ÞSn…Þ.

Пусть дана грамматика G{V, S, P, Z}.

Чтобы появиться в в выводе какого-либо предложения, нетерминальный символ должен встретиться в некоторой сентенциальной форме. Из этого нетерминального символа должна выводиться цепочка UÞ + t,содержащая только терминальные символы.

tÎS +;

V- нетерминальные символы;

S -терминальные символы;

1) Из любого нетерминального символа, принадлежащего словарю, должна выводиться цепочка, содержащая терминальные символы.

2) Для того чтобы имело место первое правило, нетерминальный символ из множества V должен хотя бы раз встретиться в сентенциальной форме.

Синтаксическое дерево – это граф без контуров и петель, где корневой вершине поставлен в соответствие начальный символ.

Куст символа – это множество подчинённых ему символов.

Имя куста – это нетерминальный символ.

При чтении слева направо концевые вершины образуют цепочку, вывод которой дан этим деревом.

Пример: Выведем предложение (i+i)i.

Левосторонний вывод – это такой вывод, при котором на каждом шаге заменяется самый левый символ.

Используем правила из примера:

E=>T=>T*F=>F*F=>(E)*F=>(E+T)F=>(T+T)F=>(F+T)F=>(i+T)F=>(i+F)F=>(i+i)F=> (i+i)i.

Правосторонний вывод:

E=>T=>T*F=>F*F=>(E)F=>(E+T)F=>(T+T)F=>(F+T)F=>(i+T)F=>(i+F)F=>(i+i)F=> (i+i)i.

Рассмотрим грамматику:E:=E+E|E*E; E:=i.

Нужно вывести предложение i+i*i. Рассмотрим 2 дерева:

Е
Е
Е
Е
Е
Е
i
i
Е
i
i
i
Е
Е
Е
i


+ *

* +


Из обоих этих деревьев выделяется нужная цепочка. В этом случае для построения цепочки есть альтернатива, в отличие от предыдущего примера. Эта грамматика неоднозначная. Критерием неоднозначности являются различные деревья.

Если какое-либо предложение, генерированное грамматикой, имеет более 1-го дерева разбора, то говорят, что грамматика неоднозначна. Задача установления неоднозначности в какой-либо грамматике неразрешима, т.е. не существует алгоритма, который бы за конечное число шагов, рассмотрев предложение, ответил бы – однозначна грамматика его породившая, или нет.

Задачи разбора заключаются в том, чтобы распознать: принадлежит ли предложение языка программирования рассматриваемой грамматике. Различают 2 категории алгоритмов: нисходящий (развертка) и восходящий (свертка).

Итеративная форма задания грамматик

Цель: создание бесконечного числа цепочек конечным (минимальным) количеством правил. Вводится мета-символ { }, который означает: элемент, находящийся внутри { }, может повторяться многократно.

E:=E+T|T эквивалентно E:=T{+T}0.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: