ВУЗ:
Составители:
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
- …
- следующая ›
- последняя »