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

UptoLike

<программа> <имя программы> var <раздел
переменных> begin <раздел операторов> end.
<имя программы> ид
<раздел переменных> <список переменных>:<тип>
<список переменных> ид {, ид}
<тип> integer
<оператор> <присваивание> / <ввод> /<вывод> /<цикл>
<присваивание> ид := <арифметическое выражение>
<арифметическое выражение> <слагаемое> {+<слагаемое>}{–<слагаемое>}
<слагаемое> <значение> {*<значение>} {div <значение>}
<ввод> read (<список переменных>)
<вывод> write (<список переменных>)
<цикл> for <выражение цикла> to <тело цикла>
<выражение цикла> ид :=<арифметическое выражение>
do <арифметическое выражение>
<тело цикла> <оператор>/ begin <раздел операторов> end
Приведем примеры алгоритмов синтаксического анализа методом рекурсивного спуска для некото-
рых предложений исходной программы с использованием приведенной грамматики.
Имеем предложение исходной программы: read (a).
Тогда процедура разбора этого предложения может иметь вид:
procedure <ввод>;
begin
BP := false;
if t = read then
begin
перейти к следующей лексеме;
if t = ( then begin
перейти к следующей лексеме;
if <список переменных> закончилась успешно
then
if t = ) then begin
BP := true;
перейти к следующей лексеме;
end; {if )}
end; {if (}
end; {if read}
if BP = true then успешное завершение
else неудачное завершение;
end;
В приведенной процедуре BP – вспомогательная переменная, а t – переменная, определяющая тип
лексемы. Процедура, соответствующая нетерминальному символу <ввод>, вызывает процедуру <список
переменных>:
procedure <список переменных>;
begin
BP := false;
if t=ид then
begin