Специальная математика. Соловьев А.Е. - 85 стр.

UptoLike

Составители: 

Рубрика: 

6
>
<
7.14. Метод рекурсивного спуска
Метод рекурсивного спуска позволяет писать программы синтаксического анализа на языке,
допускающем рекурсию, прямо по грамматическим правилам. Это на практике самый
простой и самый любимый народом метод написания синтаксических анализаторов.
Пусть дана грамматика:
1. S aAS E(1) = {a}
2. S b E(2) = {b}
3. A cASb E(3) = {c}
4. A E(4) = N(A) = {a,b}
Программа на некотором паскале-подобном языке будет:
program descent;
var ch:char;
begin
read(ch); {Встать на начало анализируемого текста}
s;
if ch<>‘’ then - else +; {- и + здесь следует понимать как успешное или неуспншное
завершение}
end.
procedure s;
begin
case ch of
‘a’:p1;
‘b’:p2;
‘c’,‘: - ;
end;
procedure p1;
begin
read(ch);
a;
s;
end;
procedure p3;
begin
read(ch);
a;
s;
read(ch);
if ch<>‘b then -;
end;
— 85 —
procedure a;
begin
case ch of
‘a’,’b’:p4;
‘c’:p3;
: - ;
end;
procedure p2;
begin
read(ch);
end;
procedure p4;
begin
end;
     ┤                          6
                                         >
                                <


                          7.14. Метод рекурсивного спуска

Метод рекурсивного спуска позволяет писать программы синтаксического анализа на языке,
допускающем рекурсию, прямо по грамматическим правилам. Это на практике самый
простой и самый любимый народом метод написания синтаксических анализаторов.

Пусть дана грамматика:
1. S  aAS       E(1) = {a}
2. S  b         E(2) = {b}
3. A  cASb       E(3) = {c}
4. A            E(4) = N(A) = {a,b}
Программа на некотором паскале-подобном языке будет:

program descent;
var ch:char;
begin
 read(ch); {Встать на начало анализируемого текста}
 s;
 if ch<>‘’ then - else +; {- и + здесь следует понимать как успешное или неуспншное
завершение}
end.

procedure s;                              procedure a;
begin                                     begin
 case ch of                                case ch of
  ‘a’:p1;                                   ‘a’,’b’:p4;
  ‘b’:p2;                                   ‘c’:p3;
  ‘c’,’┤‘: - ;                              ‘┤’: - ;
end;                                      end;

procedure p1;                             procedure p2;
begin                                     begin
 read(ch);                                 read(ch);
 a;                                       end;
 s;
end;

procedure p3;                             procedure p4;
begin                                     begin
 read(ch);                                end;
 a;
 s;
 read(ch);
 if ch<>‘b’ then -;
end;



                                             — 85 —