Основы разработки трансляторов в САПР. Коробова И.Л - 17 стр.

UptoLike

грамматиками. При этом под оператором понимается любой терминальный символ (т.е. любая лексема).
Таким образом, мы должны, в частности, установить отношения предшествования между лексемами
begin, read, (. Приведем матрицу, которая задает отношения предшествования для нашей грамматики (табл.
4).
Каждая клетка этой матрицы определяет отношение предшествования (если оно существует) между
лексемами, соответствующими строке и столбцу, на пересечении которых находится эта клетка. На-
пример, мы видим, что
program = var и
begin <• read
Отношение = означает, что обе лексемы имеют одинаковый уровень предшествования и должны
рассматриваться грамматическим процессором в качестве составляющих одной конструкции языка. Об-
ратите внимание, что для отношения предшествования не выполняются некоторые правила, привычные
для отношения арифметического порядка. Например,
; •> end, но end •> ;
Обратите внимание также на то, что для многих пар лексем отношения предшествования не суще-
ствует. Это означает, что соответствующие пары лексем не могут находиться рядом ни в каком грамма-
тически правильном предложении. Если подобная комбинация лексем все же встретится в процессе
грамматического разбора, то она должна рассматриваться как синтаксическая ошибка.
Для применимости метода операторного предшествования необходимо, чтобы отношения предше-
ствования были заданы одиозначно, например, не должно быть одновременно отношений ; <• begin и ;
>• begin. Это требование выполняется для нашей грамматики, однако, несущественные ее изменения
могут привести к тому, что некоторые из отношений перестанут быть однозначными и метод опера-
торного предшествования станет не применимым.
Приведем пример разбора с помощью операторного предшествования. Пусть анализируется пред-
ложение read из нашей программы. Это предложение анализируется по лексемам слева направо. Для
каждой пары соседних операторов определено отношение предшествования
begin read ( ид. ) ;
<• = <•. •> •>
begin read ( <N1> ) ;
<• = = •>
begin <N2> ;
<•
На первом шаге процесса грамматического разбора выделим фрагмент, ограниченный отношения-
ми <• и •> для распознавания в терминах грамматики. В данном случае этот фрагмент содержит единст-
венную лексему ид. Эта лексема может быть распознана как нетерминал <значение> в соответствии с
правилом из грамматики.
Лексемы
var
begin
end
End.
Integer
for
read
write
to
do
;
program=
var = <
begin = = < < < <
end > > >
integer > >
for