Синтаксис языков программирования. Нисходящий синтаксический анализ, процедурная и автоматные реализации, страница 6

Проверим правильность грамматики на примере тестовой программы:

class class1

{

float w2;

char s2;

class1()

              {

              w2 <= 2.45;

              s2 <= 'r';}

m1(int q1)           {

              float s2;

              s2 <= w2 * q1 - 8;

              return s2;}

m2(int r4, char d3)            {

              bool f3;

              integ f4; f4<=2.1;

              when (f4!=r4 && r4 >= 6х453)

                            then {f3 <= L_1;

                                           repeat {int f5 <= m1(3); d3 <= d3+1;} when d3 <= 'e'}

               else f3 <= L_0;

              select f3

              case L_1 return L_0;

              case L_0 return L_1;

              end}

}

class class2

{

integer d2;

bool s23;

class2(int g4, bool jj77)   

              {

              d2 <= g4;

              s23 <= jj77;}

mm1 (integ f55)  {

              float f3 <= f55 * 3.14;

              when f3 <= 40 then f3 <= 50;

              }

}

main()

{

inte p1;

o1 <= new class1 (3);

p1 <= o1.m1(14);

bool p2;

p2 <= o1.m2(p1,'e');

delete o1;

o2 <= new class2 (3,p2);

o2.mm1(5);

delete o2;

}

Выводы

В ходе выполнения 5-й лабораторной работы были изучены основные идеи и понятия нисходящих методов синтаксического анализа, выявлены свойства формальных грамматик, необходимых для реализации нисходящего восстановления дерева грамматического разбора, приобретены навыки построения процедурной и различных автоматных реализаций нисходящего анализа, исследованы поведения нисходящих синтаксических акцепторов.