ВУЗ:
Составители:
28
Пример 2.12. Дано выражение a+5*b. Дерево разбора выражения и дина-
мика содержимого стека представлены на рисунке 2.8.
Рисунок 2.8 – Анализ выражения a+5*b
Проверка правильности операторов
Задачи проверки правильности операторов:
1) выяснить, все ли переменные, встречающиеся в операторах, описаны;
2) установить соответствие типов в операторе присваивания слева и спра-
ва от символа «:=»;
3) определить, является ли выражение Е в операторах условия и цикла
булевым.
Данные задачи решаются путем включения в правило S ранее рассмот-
ренной процедуры checkid, а также новых процедур eqtype и eqbool, имеющих
следующий вид:
procedure eqtype;
begin
outst(t2); outst(t1);
if t1<>t2 then ERR
end;
procedure eqbool;
begin
outst(t);
if t<>bool then ERR
end;
Правило S с учетом процедур СеА примет вид:
S→ I <checkid> := E <eqtype> | if E <eqbool> then S else S
while E <egbool> do S | write (E) | read (I <checkid> )
int
+
int
*
int
int
+
int
int
1)
E
E1
T + T
F
I
C
F * F
N
R
5
I
C
b
a
2)
3)
Пример 2.12. Дано выражение a+5*b. Дерево разбора выражения и дина-
мика содержимого стека представлены на рисунке 2.8.
E
E1
T + T 1) int + int * int
F F * F
2) int + int
I N I
3) int
C R C
a 5 b
Рисунок 2.8 – Анализ выражения a+5*b
Проверка правильности операторов
Задачи проверки правильности операторов:
1) выяснить, все ли переменные, встречающиеся в операторах, описаны;
2) установить соответствие типов в операторе присваивания слева и спра-
ва от символа «:=»;
3) определить, является ли выражение Е в операторах условия и цикла
булевым.
Данные задачи решаются путем включения в правило S ранее рассмот-
ренной процедуры checkid, а также новых процедур eqtype и eqbool, имеющих
следующий вид:
procedure eqtype;
begin
outst(t2); outst(t1);
if t1<>t2 then ERR
end;
procedure eqbool;
begin
outst(t);
if t<>bool then ERR
end;
Правило S с учетом процедур СеА примет вид:
S→ I := E | if E then S else S
while E do S | write (E) | read (I )
28
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »
