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

UptoLike

69
рекурсивно. Если текущий символ (sym) входного файла совпадает с
символом в текущем узле структуры данных, то процедура переходит к узлу,
на который указывает поле suc, иначек узлу, на который указывает поле
alt. Полученная структура данных приведена на рис.12.1.
(
A
*
*
NULL
+
**
*
NULL
*
empty
NULL
*
)
NULL
x
NULL
*
NULL NULL
**
Рис. 12.1. Представление синтаксического графа в виде структуры данных.
void parse(hpointer goal, int &match)
{
pointer s;
s = goal->entry;
do
{
if(s->isTerminal)
{
if(s->tsym == sym)
{
match = 1;
sym = fgetc(input);
}
else
match = (s->tsym == empty)? 1 : 0;
}
else
parse(s->nsym, match);
if(match)
s = s->suc;
else
s = s->alt;
} while(s != NULL);
}
                                                                       69
рекурсивно. Если текущий символ (sym) входного файла совпадает с
символом в текущем узле структуры данных, то процедура переходит к узлу,
на который указывает поле suc, иначе – к узлу, на который указывает поле
alt. Полученная структура данных приведена на рис.12.1.

                     A

                     *



                     (          *            +          *
                                                     NULL
                 *       *   NULL
                                    *    *       *              *



                     x                  empty               )
                NULL NULL               NULL         NULL NULL
                                                 *

 Рис. 12.1. Представление синтаксического графа в виде структуры данных.


void parse(hpointer goal, int &match)
{
  pointer s;
  s = goal->entry;
  do
  {
     if(s->isTerminal)
     {
        if(s->tsym == sym)
        {
           match = 1;
           sym = fgetc(input);
        }
        else
           match = (s->tsym == empty)? 1 : 0;
     }
     else
        parse(s->nsym, match);
     if(match)
        s = s->suc;
     else
        s = s->alt;
  } while(s != NULL);
}