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

UptoLike

63
В5. Цикл вида
S
переводится в оператор
while(belongsTo(ch, L)) T(S);
где T(S) есть отображение S в соответствии с правилами В3-В7, а L есть
множество L = first(S).
В6. Элемента графа, обозначающий другой граф A
A
переводится в оператор обращения к функции A().
В7. Элемент графа, обозначающий терминальный символ
x
переводится в оператор
if(ch == ’x’) ch = fgetc(input);
else error();
где error() – функция, к которой обращаются при появлении неправильной
конструкции.
Теперь покажем применение этих правил на примере преобразования
редуцированного графа (см. рис.10.2) в программу грамматического разбора.
char ch;
void A()
{
if(ch == 'x') ch = fgetc(input);
else
if(ch == '(')
{
ch = fgetc(input);
A();
while(ch == '+')
{
ch = fgetc(input);
                                                                        63



      В5. Цикл вида

           S

переводится в оператор
while(belongsTo(ch, L)) T(S);
где T(S) есть отображение S в соответствии с правилами В3-В7, а L есть
множество L = first(S).


      В6. Элемента графа, обозначающий другой граф A

       A

переводится в оператор обращения к функции A().


      В7. Элемент графа, обозначающий терминальный символ

       x

переводится в оператор
if(ch == ’x’) ch = fgetc(input);
else error();
где error() – функция, к которой обращаются при появлении неправильной
конструкции.
      Теперь покажем применение этих правил на примере преобразования
редуцированного графа (см. рис.10.2) в программу грамматического разбора.
char ch;
void A()
{
   if(ch == 'x') ch = fgetc(input);
   else
     if(ch == '(')
     {
        ch = fgetc(input);
        A();
        while(ch == '+')
        {
          ch = fgetc(input);