ВУЗ:
Составители:
64
A();
}
if(ch == ')') ch = fgetc(input);
else error();
}
else error();
}
void main(int argc, char **argv)
{
ch =fgetc(input);
A();
}
При этом преобразовании свободно применялись некоторые очевидные
правила программирования, позволяющие упростить программу. Например,
при буквальном переводе четвертая строка имела бы вид:
if(ch == 'x')
if(ch == 'x') ch = fgetc(input); else error();
else ...
Ясно, что ее можно сократить, как это сделано в программе. Операторы
чтения в восьмой и двенадцатой строках тоже получены с помощью такого
же упрощения
.
По-видимому, полезно определить, когда вообще возможны подобные
упрощения, и показать это непосредственно в виде графов. Два основных
случая покрываются следующими дополнительными правилами:
В4а.
S
1
S
2
S
n
. . .
x
1
x
2
x
n
. . .
if(ch == 'x1')
{
ch = fgetc(input);
T(S1);
}
else
if(ch == 'x2')
64
A();
}
if(ch == ')') ch = fgetc(input);
else error();
}
else error();
}
void main(int argc, char **argv)
{
ch =fgetc(input);
A();
}
При этом преобразовании свободно применялись некоторые очевидные
правила программирования, позволяющие упростить программу. Например,
при буквальном переводе четвертая строка имела бы вид:
if(ch == 'x')
if(ch == 'x') ch = fgetc(input); else error();
else ...
Ясно, что ее можно сократить, как это сделано в программе. Операторы
чтения в восьмой и двенадцатой строках тоже получены с помощью такого
же упрощения.
По-видимому, полезно определить, когда вообще возможны подобные
упрощения, и показать это непосредственно в виде графов. Два основных
случая покрываются следующими дополнительными правилами:
В4а.
x1 S1
x2 S2
... ...
xn Sn
if(ch == 'x1')
{
ch = fgetc(input);
T(S1);
}
else
if(ch == 'x2')
Страницы
- « первая
- ‹ предыдущая
- …
- 62
- 63
- 64
- 65
- 66
- …
- следующая ›
- последняя »
