ВУЗ:
Составители:
Рубрика:
┤ 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 —
Страницы
- « первая
- ‹ предыдущая
- …
- 83
- 84
- 85
- 86
- 87
- …
- следующая ›
- последняя »