Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
12.02.2015
Размер:
1.01 Mб
Скачать

Создание распределенной системы решения задач

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

правила = '2,18,15,15,14,18,12,18,14'

шаг анализа = 26

==> свёртка:

Применено правило

с правой частью = '3'

цепочка = '33721x05632323721t05321tk5321h5328' стек = '0_r1A56CCc'

правила = '2,18,15,15,14,18,12,18,14,18'

шаг анализа = 27 ==> сдвиг (перенос):

цепочка = '3721x05632323721t05321tk5321h5328'

стек = '0_r1A56CCc3'

правила = '2,18,15,15,14,18,12,18,14,18'

шаг анализа = 28

==> свёртка:

Применено правило

с правой частью = 'CCc3'

цепочка = '3721x05632323721t05321tk5321h5328' стек = '0_r1A56C'

правила = '2,18,15,15,14,18,12,18,14,18,8'

шаг анализа = 29 ==> сдвиг (перенос):

цепочка = '721x05632323721t05321tk5321h5328' стек = '0_r1A56C3'

правила = '2,18,15,15,14,18,12,18,14,18,8'

шаг анализа = 30 ==> свёртка: Применено правило с правой частью = '3'

цепочка = '721x05632323721t05321tk5321h5328' стек = '0_r1A56Cc'

правила = '2,18,15,15,14,18,12,18,14,18,8,18'

шаг анализа = 31 ==> свёртка: Применено правило с правой частью = 'Cc'

цепочка = '721x05632323721t05321tk5321h5328' стек = '0_r1A56C'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13'

шаг анализа = 32 ==> сдвиг (перенос):

цепочка = '21x05632323721t05321tk5321h5328' стек = '0_r1A56C7'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13'

шаг анализа = 33 ==> свёртка: Применено правило с правой частью = '6C7'

цепочка = '21x05632323721t05321tk5321h5328' стек = '0_r1A5M'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10'

шаг анализа = 34 ==> сдвиг (перенос):

цепочка = '1x05632323721t05321tk5321h5328' стек = '0_r1A5M2'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10'

шаг анализа = 35 ==> свёртка: Применено правило с правой частью = '1A5M2'

цепочка = '1x05632323721t05321tk5321h5328' стек = '0_rS'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6'

шаг анализа = 36 ==> сдвиг (перенос):

цепочка = '5632323721t05321tk5321h5328' стек = '0_rS1x0'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6'

шаг анализа = 37 ==> сдвиг (перенос):

цепочка = '632323721t05321tk5321h5328' стек = '0_rS1x05'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6'

шаг анализа = 38 ==> сдвиг (перенос):

цепочка = '32323721t05321tk5321h5328' стек = '0_rS1x056'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6'

шаг анализа = 39 ==> сдвиг (перенос):

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Методические указания к выполнению курсовой работы

41

 

Системное программное обеспечение

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

цепочка = '2323721t05321tk5321h5328'

стек

= '0_rS1x0563'

 

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6'

шаг анализа = 40

==> свёртка:

Применено правило с правой частью = '3'

цепочка = '2323721t05321tk5321h5328'

стек

= '0_rS1x056c'

 

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18'

шаг анализа = 41

==> сдвиг (перенос):

цепочка = '323721t05321tk5321h5328'

стек

= '0_rS1x056c2'

 

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18'

шаг анализа = 42

==> свёртка:

Применено правило с правой частью = 'c2'

цепочка = '323721t05321tk5321h5328'

стек

= '0_rS1x056C'

 

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14'

шаг анализа = 43 ==> сдвиг (перенос):

цепочка = '23721t05321tk5321h5328' стек = '0_rS1x056C3'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14'

шаг анализа = 44 ==> свёртка: Применено правило с правой частью = '3'

цепочка = '23721t05321tk5321h5328' стек = '0_rS1x056Cc'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18'

шаг анализа = 45 ==> сдвиг (перенос):

цепочка = '3721t05321tk5321h5328' стек = '0_rS1x056Cc2'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18'

шаг анализа = 46 ==> свёртка: Применено правило с правой частью = 'c2'

цепочка = '3721t05321tk5321h5328' стек = '0_rS1x056CC'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14'

шаг анализа = 47 ==> сдвиг (перенос):

цепочка = '721t05321tk5321h5328' стек = '0_rS1x056CC3'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14'

шаг анализа = 48 ==> свёртка: Применено правило с правой частью = '3'

цепочка = '721t05321tk5321h5328' стек = '0_rS1x056CCc'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18'

шаг анализа = 49 ==> свёртка: Применено правило с правой частью = 'CCc'

цепочка = '721t05321tk5321h5328' стек = '0_rS1x056C'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9'

шаг анализа = 50 ==> сдвиг (перенос):

цепочка = '21t05321tk5321h5328' стек = '0_rS1x056C7'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9'

шаг анализа = 51

==> свёртка:

Применено правило

с правой частью = '6C7'

цепочка = '21t05321tk5321h5328' стек = '0_rS1x05M'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10'

шаг анализа = 52 ==> сдвиг (перенос):

цепочка = '1t05321tk5321h5328'

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

42

М.Ф.Степанов

Создание распределенной системы решения задач

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

стек = '0_rS1x05M2'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10'

шаг анализа = 53 ==> свёртка: Применено правило с правой частью = '1x05M2'

цепочка = '1t05321tk5321h5328' стек = '0_rSX'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7'

шаг анализа = 54 ==> свёртка: Применено правило с правой частью = 'SX'

цепочка = '1t05321tk5321h5328' стек = '0_rD'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17'

шаг анализа = 55 ==> свёртка: Применено правило с правой частью = 'rD'

цепочка = '1t05321tk5321h5328' стек = '0_R'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16'

шаг анализа = 56 ==> сдвиг (перенос):

цепочка = '5321tk5321h5328' стек = '0_R1t0'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16'

шаг анализа = 57 ==> сдвиг (перенос):

цепочка = '321tk5321h5328' стек = '0_R1t05'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16'

шаг анализа = 58 ==> сдвиг (перенос):

цепочка = '21tk5321h5328' стек = '0_R1t053'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16'

шаг анализа = 59 ==> свёртка: Применено правило с правой частью = '1t053'

цепочка = '21tk5321h5328' стек = '0_RB'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3'

шаг анализа = 60 ==> сдвиг (перенос):

цепочка = '1tk5321h5328' стек = '0_RB2'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3'

шаг анализа = 61 ==> сдвиг (перенос):

цепочка = '5321h5328' стек = '0_RB21tk'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3'

шаг анализа = 62 ==> сдвиг (перенос):

цепочка = '321h5328' стек = '0_RB21tk5'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3'

шаг анализа = 63 ==> сдвиг (перенос):

цепочка = '21h5328' стек = '0_RB21tk53'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3'

шаг анализа = 64 ==> свёртка: Применено правило с правой частью = '1tk53'

цепочка = '21h5328' стек = '0_RB2E'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3,4'

шаг анализа = 65 ==> сдвиг (перенос):

цепочка = '1h5328' стек = '0_RB2E2'

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3,4'

шаг анализа = 66 ==> сдвиг (перенос):

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Методические указания к выполнению курсовой работы

43

 

Системное программное обеспечение

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

цепочка = '5328'

 

 

 

 

 

 

стек

= '0_RB2E21h'

 

 

 

 

 

 

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3,4'

 

 

шаг анализа = 67

==> сдвиг (перенос):

 

 

 

 

цепочка = '328'

 

 

 

 

 

 

стек

= '0_RB2E21h5'

 

 

 

 

 

 

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3,4'

 

 

шаг анализа = 68

==> сдвиг (перенос):

 

 

 

 

цепочка = '28'

 

 

 

 

 

 

стек

= '0_RB2E21h53'

 

 

 

 

 

 

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3,4'

 

 

шаг анализа = 69

==> свёртка:

 

 

 

 

Применено правило с правой частью = '1h53'

 

 

 

 

цепочка = '28'

 

 

 

 

 

 

стек

= '0_RB2E2H'

 

 

 

 

 

 

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3,4,5'

 

 

шаг анализа = 70

==> сдвиг (перенос):

 

 

 

 

цепочка = '8'

 

 

 

 

 

 

стек

= '0_RB2E2H2'

 

 

 

 

 

 

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3,4,5'

 

 

шаг анализа = 71

==> свёртка:

 

 

 

 

Применено правило с правой частью = 'RB2E2H2'

 

 

 

цепочка = '8'

 

 

 

 

 

 

стек

= '0_Z'

 

 

 

 

 

 

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3,4,5,1'

 

шаг анализа = 72

 

 

 

 

 

 

==> в вершине стека символ начальный символ грамматики 'Z'

 

 

 

===> разбор завершен - цепочка допущена

 

 

 

 

цепочка = '8'

 

 

 

 

 

 

стек

= '0_'

 

 

 

 

 

 

правила = '2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3,4,5,1'

 

разбор закончен.

 

 

 

 

 

 

 

2.10.5. Программная реализация синтаксического анализатора

 

Модифицируем

тестовое

приложение,

включив

в

него

синтаксический анализатор и средства визуализации результатов его работы. Для отображения протокола и дерева вывода синтаксического анализа создадим страницу «Синтаксис», на которой разместим компонент PageControl с двумя страницами для отображения протокола «Протокол» и «Синтаксическая структура». Протокол будем отображать с помощью компонента TMemo, а дерево вывода - с помощью TTreeView.

Синтаксический анализатор для работы требует сведения о синтаксических символах (см. листинги 47 – 48 класса TSyntSymbol), представляя их в виде списка (см. листинги 49 - 50 класса TSyntSymbolList) и стека (см. листинги 51 - 52 класса

TSyntSymbolStack), правилах грамматики в виде списка TSyntRuleList

экземпляров класса TSyntRule (см. листинги 53 - 54 класса TSyntRule и листинги 55 - 56 класса TSyntRuleList).

Собственно эмулятор МП-автомата синтаксического анализатора реализован (см. листинги 57 - 58) в виде функции makeSyntSymbolList(), использующей вспомогательные функции getRelationStackToLexem() и getRelationSyntSymbolToSyntSymbol().

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

44

М.Ф.Степанов

Создание распределенной системы решения задач

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

На рисунках 17 – 18 приведены результаты синтаксического анализа.

Рисунок 17. Заключительный фрагмент протокола работы синтаксического анализатора

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Методические указания к выполнению курсовой работы

45

 

Системное программное обеспечение

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Рисунок 18. Дерево вывода, построенное синтаксическим анализатором

В результате получим последовательность правил: 2,18,15,15,14,18,12,18,14,18,8,18,13,10,6,18,14,18,14,18,9,10,7,17,16,3,4,5,1.

Этой последовательности правил будет соответствовать следующая цепочка вывода на основе грамматики G2 (символ " N" означает вывод по правилу N):

<задача> 1 <массивыCразмерностью><началоАнализа>;<конецАнализа>;<шаг>;

5 <массивыCразмерностью><началоАнализа>;<конецАнализа>; h=<вещественное число>;4 <массивыCразмерностью><началоАнализа>; tk=<вещественное число>; h=<вещественное

число>;

3 <массивыCразмерностью>t0=<вещественное число>;tk=<вещественное число>;h=<вещественное число>;

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

46

М.Ф.Степанов

Создание распределенной системы решения задач

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

16 <размерность>;<массивы>;t0=<вещественное число>;tk=<вещественное число>;h=<вещественное число>;

17 <размерность>;<матрицаА><векторX0>;t0=<вещественное число>;tk=<вещественное число>;h=<вещественное число>;

7 <размерность>;<матрицаА>x0=<матрица>; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

10 <размерность>;<матрицаА>x0=[<строкиМатрицы>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

9 <размерность>;<матрицаА>x0=[<строкиМатрицы><строкиМатрицы><строкаМатрицы>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

18

<размерность>;<матрицаА>x0=[<строкиМатрицы><строкиМатрицы><вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

14 <размерность>;<матрицаА> x0=[<строкиМатрицы><строкаМатрицы>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

18 <размерность>;<матрицаА> x0=[<строкиМатрицы><вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

14 <размерность>;<матрицаА> x0=[<строкаМатрицы>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

18 <размерность>;<матрицаA> x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

6 <размерность>;А=<матрица>; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

10 <размерность>;А=[<строкиМатрицы>];x0=[<вещественноеЧисло>; <вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

13 <размерность>;А=[<строкиМатрицы><строкаМатрицы>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

18 <размерность>;А=[<строкиМатрицы><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

8 <размерность>; А=[<строкиМатрицы><строкаМатрицы>;<вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

12 <размерность>; А=[<строкиМатрицы>;<строкаМатрицы><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

14 <размерность>; А=[<строкиМатрицы>;<вещественное число><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

13 <размерность>; А=[<строкиМатрицы><строкаМатрицы>;<вещественное число><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

14 <размерность>; А=[<строкиМатрицы><вещественное число>;<вещественное число><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

13 <размерность>; А=[<строкиМатрицы><строкаМатрицы><вещественное число>;<вещественное число><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>];

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Методические указания к выполнению курсовой работы

47

 

Системное программное обеспечение

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;14 <размерность>; А=[<строкиМатрицы><вещественное число><вещественное

число>;<вещественное число><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

11 <размерность>; А=[<строкаМатрицы>;<строкаМатрицы><вещественное число><вещественное число>;<вещественное число><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

14 <размерность>; А=[<строкаМатрицы>;<вещественное число><вещественное число><вещественное число>;<вещественное число><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

15 <размерность>; А=[<строкаМатрицы><вещественное число>;<вещественное число><вещественное число><вещественное число>;<вещественное число><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

15 <размерность>; А=[<строкаМатрицы><вещественное число><вещественное число>;<вещественное число><вещественное число><вещественное число>;<вещественное число><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

14 <размерность>; А=[<вещественное число><вещественное число><вещественное число>;<вещественное число><вещественное число><вещественное число>;<вещественное число><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

4 n=<целоеЧисло>; А=[<вещественное число><вещественное число><вещественное число>;<вещественное число><вещественное число><вещественное число>;<вещественное число><вещественное число><вещественное число>]; x0=[<вещественноеЧисло>;<вещественноеЧисло>;<вещественноеЧисло>]; t0=<вещественное число>; tk=<вещественное число>; h=<вещественное число>;

Подставив в полученную цепочку значения чисел, получим исходную входную цепочку, сделав допущение, что вещественное число при порождении всегда завершается пробелом в качестве разделителя :

n=3; А=[0 1 0 ;0 0 1 ; -1,5 -2,6 -3,7 ];x0=[-1,9 ;0 ;0 ];t0=-1,1 ;tk=+10,5 ;h=0,01 ;

2.11. Разработка генератора выходного представления

Результатом работы создаваемого транслятора тектового представления постановки задачи должен быть сформированный экземпляр класса TTask.

При этом следует иметь в виду, что единственными исполняемыми «операторами» текстовой постановки задачи являются операторы присваивания.

Поэтому на основании результатов синтаксического анализа (дерева разбора входной цепочки), пользуясь методами свертки объектного кода, можно непосредственно сформировать искомый экземпляр класса TTask, не порождая объектной программы.

Учитывая структуру дерева вывода, будем осуществлять его обход, раскрывая до «листьев» крайний левый нетерминал. Обработанные

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

48

М.Ф.Степанов

Создание распределенной системы решения задач

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

вершины – «листья», а также нетерминальные символы, не имеющие потомков будем удалять.

Исходный программный код функции makeOutText(), осуществляющей генерацию выходного представления текстовой постановки задачи на основании дерева вывода, построенного на этапе синтаксического анализа, приведен на листингах 59 – 60.

Для включения вызова и отображения результатов работы функции makeOutText() следует модифицировать исходные тексты функций translateTask() класса TTranslationThread и TranslationThreadDone()

класса экранной формы приложения (см. листинги 61 и 62). Изменения отмечены красным цветом.

Результаты работы транслятора (содержимое экземпляра класса TTask) будем визуализировать с помощью компонента TMemo на странице «Выходной текст», используя в функции TranslationThreadDone() для получения текстового представления сформированной в результате трансляции постановки задачи функцию getText() класса TTask.

Результаты решения констрольного примера приведены на рис. 19.

Рисунок 19. Постановка задачи, построенная транслятором

2.12. Модификация тестового приложения с целью обеспечения возможности решения функциональных задач, поставленных на входном языке, используя функциональный программный модуль, вызываемый из библиотеки динамической загрузки в специальном потоке команд (нити)

На данном этапе необходимо усовершенствовать тестовое приложение, снабдив его средствами решения функциональных задач, постановка которых задана в тестовой форме на входном языке.

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Методические указания к выполнению курсовой работы

49

 

Системное программное обеспечение

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

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

Поэтому пользователю для решения задачи достаточно щелчком на кнопке «Начать решение функциональной задачи» и, при успешном разборе постановки задачи, активизируется нить, в которой вызывается функциональный программный модуль.

Поскольку наше тестовое приложение уже обладает средствами вызова и визуализации результатов работы функционального программного модуля, то необходимо лишь модифицировать функцию

StartSolveBitBtnClick(), устранив из нее вызов функции setTask()

формирования постановки задачи, поскольку теперь она формируется разработанным транслятором.

Результаты решения тестовой задачи, очевидно, должны совпадать с ранее полученными (см. рис. 5, 6).

2.13.Разработка архитектуры распределенной информационной системы и спецификации протокола взаимодействия её компонентов

2.14.Разработка на основе ранее созданного тестового приложения серверного приложения, осуществляющего решение функциональной задачи по её текстовой постановке на входном языке, полученной по сети от клиентского приложения, используя функциональный программный модуль, вызываемый из библиотеки динамической загрузки в специальном потоке команд (нити)

2.15.Разработка на основе ранее созданного тестового приложения клиентского приложения (используются визуальные средства постановки задачи и отображения результатов её решения), позволяющего пользователю осуществить постановку задачи на входном языке, отправить ее серверному приложению, получить и визуализировать результаты

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

50

М.Ф.Степанов

Соседние файлы в папке Системное программирование