Научная статья на тему 'Разработка формы представления модифицированных продукционных алгоритмов в задачах логического управления'

Разработка формы представления модифицированных продукционных алгоритмов в задачах логического управления Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
122
47
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
АВТОМАТ / СОСТОЯНИЕ / АЛГОРИТМ / ПРОДУКЦИЯ / ПРОГРАММА / КОД / УПРАВЛЕНИЕ / ГЕНЕРАЦИЯ КОДА

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Довгаль В. М., Королькова В. О., Корольков О. Ф., Чаплыгин А. А.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Разработка формы представления модифицированных продукционных алгоритмов в задачах логического управления»

УДК 681.3

РАЗРАБОТКА ФОРМЫ ПРЕДСТАВЛЕНИЯ МОДИФИЦИРОВАННЫХ ПРОДУКЦИОННЫХ АЛГОРИТМОВ В ЗАДАЧАХ ЛОГИЧЕСКОГО

УПРАВЛЕНИЯ

© 2012 В. М. Довгаль1, О. Ф. Корольков2 А. А Чаплыгин3, В. О. Королькова4

1докт. техн. наук, профессор каф. программного обеспечения и администрирования информационных систем e-mail: vmdovgal@yandex. ru

Курский государственный университет

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

e-mail: oleg_korolkov@mail.ru 3канд. техн. наук, доцент каф. программного обеспечения вычислительной техники,

e-mail: alex_chaplygin@mail. ru 4инженер каф. программного обеспечения вычислительной техники e-mail: viktoria_korolkova@mail. ru

Юго-Западный государственный университет

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

Ключевые слова: автомат, состояние, алгоритм, продукция, программа, код, управление, генерация кода.

Введение

На протяжении двадцати лет ряд авторов [Туккель, Шалыто 2002] развивают направление, называемое «автоматное программирование», или «программирование от состояний», или «программирование с явным выделением состояний», с целью разработки инструментальных средств автоматической генерации кодов программ, основанной на расширенной модели конечных автоматов и ориентированной на создание широкого класса приложений в интересах реализации процессов управления сложными объектами. При этом на основе анализа предметной области выделяются источники входных воздействий для системы управления и механизмы, которые при заданных условиях формируют управляющие воздействия на объект. Механизмы управления реализуются одним автоматом или множеством взаимодействующих автоматов.

Методика преобразования автомата Мура в продукционный алгоритм

На основе алгоритмической системы А. А. Маркова одним из авторов данной статьи была разработана продукционная универсальная алгоритмическая система быстрых преобразований символьных данных[Довгаль 1996; Довгаль 2009]. Продукционные алгоритмы представляют собой конечный список продукций и переходов на их множестве, а каждая из продукций в общем случае задается словом вида

M1:!yi^fij ! :М2, (1)

где уі (образец), в] (модификатор) - цепочки символов заданного рабочего алфавита, М1, М2 - метки (натуральные числа) перехода на определенные номера продукций из их списка в алгоритме, ! (маркер) - указатель позиции в обрабатываемом слове, с которой необходимо выполнять сопоставление при обнаружении продукцией очередной позиции вхождения образца в пространстве обрабатываемого слова, а сопоставление должно быть продолжено.

Построим продукционный алгоритм, моделирующий работу автомата Мура (см. [Королькова и др. 2012]), представленного на рисунке 1.

Рис. 1. Граф автомата Мура

Произведем замену букв входного и выходного алфавита следующими: входные: х1 - 71, х1- 72, х2 - 73, х2 - 74, «-» - 75 (входной сигнал отсутствует);

выходные: у1 - 71, у2 - У2, у3 - 73, (у2, у3) - 74, у4 - 75, «-» - 76 (выходной сигнал отсутствует);

состояния: Б0, 81, Б2, Б3, Б4, Б5.

В указанной работе предложен нормальный алгоритм А.А. Маркова, реализующий заданный автомат Мура, который состоит из трех блоков и приводится ниже.

Первый блок композиции:

1 ^0

Второй блок композиции:

2 5071 7151

3 5072 7252

4 574 7355

5 573 745э

6 5273 735э

7 ^274 7355

8 5з74 745э

9 5э75 7454

10 5475 7650

11 5573 735э

12 5574 7355

Третий блок композиции

13 ф ^*.

(2)

Служебный символ «*» в продукции с номером 13 продукционного алгоритма (2) обозначает продукцию, завершающую свою работу после однократного срабатывания, а ф - алфавитная переменная, принимающая свои значения на алфавите внутренних состояний автомата.

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

Приведенный нормальный алгоритм, моделирующий работу управляющего автомата Мура, работает следующим образом. Пусть один из вариантов входного обрабатываемого слова будет иметь вид

72747474737575......... (3)

Тогда вначале однократно выполнит свою работу первая продукция алгоритма, являющаяся единственной в продукционном алгоритме (2), составляющем первый блок композиции, и будет осуществлен переход на второй блок композиции этого алгоритма, а слово будет иметь следующий вид:

57747474737575. (4)

Теперь будут сравниваться левые части продукций алгоритма (2) и в случае совпадения подчеркнутой части слова (4) будет проведена замена на правую часть продукции, после чего обрабатываемое слово будет иметь вид

7252747474737575 (5)

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

Нами предлагается модифицированный продукционный алгоритм [Довгаль 1996], в котором в блоке два после срабатывания очередной продукции происходит переход по метке. Первая метка в начале продукции является указателем перехода на следующую продукцию в случае несовпадения фрагмента слова и левой части (образца) предшествующей продукции при сопоставлении, а метка в конце продукции - это указатель, по которому происходит переход на номер следующей продукции. Тогда модифицированный продукционный алгоритм будет иметь следующий вид:

2 3 .• 5071 7151/4

3 14 / 5072 7252/6

4 5 / 5174 7355/10

5 14 /5173 7453/8

6 7 /5273 735э/8

7 14 /5274 7355/11

8 9 /5374 7453/8

9 14 /5375 7454/10

10 14 / 5475 7650/2

11 12 / 5573 7353/8

12 14 / 5574 7355/12

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

Используя язык программирования C#, запишем текст программы, которая непосредственно преобразует форму представления продукционного алгоритма в исходный код программы, моделирующей работу управляющего автомата без меток:

private void button1_Click(object sender, EventArgs e)

{

String s = "s0z2z4z4z4z3z5z5";

String[] val = {"s0z1", "s0z2", "s2z3",

"s1z4","s1z3","s2z4","s3z4","s3z5","s4z5","s5z3","s5z4"};

String[] new_val = {"y1s1", "y2s2","y3s3","y3s5","y4s3","y3s5","y4s3","y4s4","y6s0","y3s3","y3s5"}; int i;

while (true) {

for (i=0; i < val.Length; i++) {

if (s.Contains(val[i])) {

s = s.Replace(val[i], new_val[i]); break;

}

}

if (i == val.Length)

{

textBox1.Text = s; return;

}

}

Программа выполнена с использованием двух функций: Contains(), которая выдает true, если обнаружено вхождение текущего образца в строке (3), и Replace(), которая производит замену обнаруженного образца на модификатор, расположенный в правой части каждой продукции алгоритма (2).

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

Продукционный алгоритм задается в виде текстового файла:

1: s0z0 -> y1s1 :3 6: s0z2 -> y2s1:3 6: s1z1 -> y1s2: 4 6: s2z2 -> y2s2 :4,

где символ ‘:’ - разделитель тела продукции и метки перехода на соответствующий номер продукции. Если число в метке больше числа продукций, то произойдет выход из продукционного алгоритма по ошибке.

Программа автоматической генерации кода программы по заданному продукционному алгоритму:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define MAXSTR 1024

typedef struct { int m1;

char fromi[10]; char to[10]; int m2;

} production;

char *replace(char *s, char *w, char *f, char *t)

{

char *n = malloc(strlen(s) - (strlen(t) - strlen(f)));

memcpy(n, s, w - s);

memcpy(n + (w - s), t, strlen(t));

memcpy(n + (w - s) + strlen(t), w + strlen(f), strlen(s) - (w - s) -strlen(f));

*(n + strlen(s)) = 0; return n;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

}

int ma.in(int argc, char* argv[])

{

production *prod = malloc(MAXSTR * sizeof(production)); production *p = prod; int num = 0;

char *s = malloc(MAXSTR); char *ss; int i;

FILE *f;

if (argc < 2) {

fprintf(stderr, "Usage prod.exe <file name>\n"); return 1;

}

f = fopen(argv[1], "r"); while (!feof(f)) {

fscanf(f, "%i: %s -> %s :%i\n", &p->m1, p->from, p->to, &p->m2);

++p;

++num.;

}

scanf("%s", s); while (1) {

i = 0; p = prod; while (i < num) {

if (ss = strstr(s, p->from.)) {

s = replace(s, ss, p->from., p->to);

i = p->m2;

p = &prod[i];

} else { i = p->m1;

p = &prod[i];

}

}

if (i >= num) break;

}

printf("%s\n", s); return 0;

}

Таким образом, выполнены все необходимые построения для перехода от заданного управляющего автомата Мура к программе, моделирующей работу любого продукционного алгоритма, используемого для целей управления дискретными объектами.

Заключение

В работе предложена реализация технологической схемы «управляющий автомат - алгоритм - код программы», отличающейся от традиционной схемы «алгоритм - “ручной” метод реализации кода программы - исполнение кода». Таким

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

Библиографический список

Довгаль В. М. Методы модификации формальных систем обработки символьной информации. Курск, 1996. 113 с.

Довгаль В.М. и др. Инструментальные средства организации быстрых символьных вычислений: краткая история перспективы // Информационно-

измерительные и управляющие системы. 2009. № 4. Т. 7. С. 28-32.

Королькова В. О., Корольков О. Ф., Чаплыгин А. А. Довгаль В. М. К вопросу решения проблемы автоматической генерации кода программ по заданному управляющему продукционному алгоритму// В мире научных открытий. 2012. № 1 (25). С. 220-236.

Туккель Н. И., Шалыто А. А. От тьюрингова программирования к автоматному // Мир ПК. 2002. №2. С. 144-149.

i Надоели баннеры? Вы всегда можете отключить рекламу.