Программа 5.20. Создание дерева синтаксического анализа.
Используя ту же
стратегию, которая была задействована
при оценке префиксных выражений, эта
программа создает дерево синтаксического
анализа из префиксного выражения. Для
простоты предполагается, что операндами
являются одиночные символы. Каждый
вызов рекурсивной функции создает новый
узел, передавая в него в качестве лексемы
следующий символ из массива входных
данных. Если лексема представляет собой
операнд, программа возвращает новый
узел, а если операция – то устанавливает
левый и правый указатели на дерево,
построенное (рекурсивно) для двух
аргументов.
Char *a; int i;
Struct node
{
Item item; node *l, *r;
Node(Item x)
{
item = x; l = 0; r
= 0;
}
};
typedef node* link;
link parse()
{
char t = a[i++]; link x
= new node(t0;
if ((t = = ‘+’) ||
(t = = ‘*’))
{
x->1 = parse();
x->r = parse();
}
return x;
}