Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 65 стр.

UptoLike

65
{
ch = fgetc(input);
T(S2);
}
else
. . .
if(ch = 'xn')
{
ch = fgetc(input);
T(Sn);
}
else error();
В5а.
S
x
while(ch == 'x')
{
ch = fgetc(input); T(S);
}
Кроме того, часто встречающуюся конструкцию
ch = fgetc(input);
T(S);
while(W)
{
ch = fgetc(input);
T(S);
}
можно, разумеется, выразить короче:
do {
ch = fgetc(input);
T(S);
} while(W);
Мы намеренно не описываем пока функцию error ("ошибка").
Поскольку сейчас нас интересует лишь, как определить, правильно ли
входное предложение, мы можем считать, что эта процедура заканчивает
работу программы. На практике в случае появления неправильных
конструкций нужно
организовать корректную их диагностику, что будет
рассмотрено далее.
                                                                  65
{
    ch = fgetc(input);
    T(S2);
}
else
. . .
if(ch = 'xn')
{
   ch = fgetc(input);
   T(Sn);
}
else error();

     В5а.

        S        x

while(ch == 'x')
{
   ch = fgetc(input); T(S);
}
     Кроме того, часто встречающуюся конструкцию
ch = fgetc(input);
T(S);
while(W)
{
   ch = fgetc(input);
   T(S);
}
можно, разумеется, выразить короче:
do {
   ch = fgetc(input);
   T(S);
} while(W);
     Мы намеренно не описываем пока функцию error ("ошибка").
Поскольку сейчас нас интересует лишь, как определить, правильно ли
входное предложение, мы можем считать, что эта процедура заканчивает
работу программы. На практике в случае появления неправильных
конструкций нужно организовать корректную их диагностику, что будет
рассмотрено далее.