Автоматная реализация алгоритма разбора
Описание реализованного автомата разбора. Анализ особенностей использования Graphviz – программного обеспечения визуализации графа, позволяющего представлять различную информацию как диаграммы абстрактных графов и сетей. Программная реализация автомата.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 19.01.2020 |
Размер файла | 2,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Пояснительная записка
Автоматная реализация алгоритма разбора
Содержание пояснительной записки
- Порядок выполнения работы
- Постановка задачи
- Текстовое описание реализованного автомата разбора
- Пример реализации
- Таблица 1. Обозначения символов
- Таблица 2. Функции выходов
- Таблица 3. Таблица переходов
- Рисунок 1
- Приложение 1
- Приложение 2
- Список литературы
- Порядок выполнения работы
- Постановка задачи
- Составление таблиц переходов, выходов, и/или графа автомата
Разработка алгоритма работы реализуемого автомата
Программная реализация автомата
Написание пояснительной записки
Постановка задачи
Требуется реализовать автомат указанного типа для разбора и преобразования циклов, написанных на языке, соответствующих требованию варианта задания. Вариант задания также содержит типы входного и выходного циклов. Достаточно обрабатывать один цикл, в случае множественных или вложенных циклов во входных данных.
Текстовое описание реализованного автомата разбора
Для построения обоих типов автоматов, используется теория абстрактных конечных автоматов (КА). Для построения используется две базовые модели КА, функционально аналогичные: автомат Мура и автомат Мили.
Любой ЦА описывается следующем кортежем: М = {X, Y, S, д, л, s0}, где X, Y, S - соответственно множества входных, выходных значений ЦА и внутренних состояний.
X = {x1, x2, x3, …..xn}
Y = {y1, y2, y3, …..ym}
S = {s1, s2, s3, ……sk} где m, n, k - конечные значения.
Если m, n, k конечны, то автомат называют конечным.
Состояние ЦА определяется состоянием элементов памяти д, л - соответственно характеристические функции перехода из одного состояния в другое (д) и функция выхода ЦА (л). s0 - начальное состояние ЦА.
По закону функционирования или по виду выходной функции ЦА делятся на: автоматы 1-го рода (автоматы Мили) и автоматы 2-го рода (автоматы Мура).
Закон функционирования ЦА первого рода (автомата Мили) есть:
s (t)= ? (s (t-1), x (t)), y (t)= ? (s (t-1), x (t)), где
s (t) - состояние автомата в настоящий момент;
s (t-1)- состояние автомата в предыдущий момент. Если t=0, то s(t-1)=s0;
x (t) - входной сигнал в текущий момент;
? - оператор формирования данного состояния s;
? - оператор формирования данного выходного сигнала y.
Т.е., закон функционирования представляет собой совокупность двух функций: функции перехода ? и функции выхода ?, а также, что данное состояние s (t) зависит от предыдущего состояния s (t-1) и входного сигнала в данный момент времени, что выходной сигнал в данный момент времени так же определяется предыдущим состоянием и входным сигналом в данный момент времени.
Функция выхода ЦА 2-го рода отличается от такой функции ЦА 1-го рода тем, что используется состояние в данный момент времени s (t). Таким образом, закон функционирования ЦА 2-го рода есть:
S (t) = ? (s (t-1), x (t)), y (t) = ? (s (t), x (t)).
У ЦА Мили выходной сигнал имеется только тогда, когда есть входной сигнал, а у ЦА Мура выходной сигнал имеется всегда.
Пример реализации:
Задание.
Pascal. Преобразование цикла FOR в LABEL/GOTO
Входные данные |
Результат |
|
var i: integer; begin for i := 1 to 2 do write ('YES'); end. |
label Pr, Res; var i: integer; begin i:=0; Pr: if i=2 then goto Result; write ('YES'); i:=i+1; goto Pr; Res: end. |
Таблица 1. Обозначения символов
Входной символ |
Значение |
|
X1 |
Символ `f' |
|
Y1 |
Любой символ кроме `f' и символов, переводящих в другие состояния |
|
X2 |
Символ `o' |
|
Y2 |
Любой символ кроме `o' и символов, переводящих в другие состояния |
|
X3 |
Символ `r' |
|
Y3 |
Любой символ кроме `r' и символов, переводящих в другие состояния |
|
X4 |
Символ пробела |
|
Y4 |
Любой символ кроме пробела и символов, переводящих в другие состояния |
|
X5 |
Символ `:' |
|
Y5 |
Любой символ кроме `:' и символов, переводящих в другие состояния |
|
X6 |
Символ `=' |
|
Y6 |
Любой символ кроме `=' и символов, переводящих в другие состояния |
|
X7 |
Любое целое число |
|
Y7 |
Любой символ кроме пробела и целого числа |
|
X8 |
Символ `t' |
|
Y8 |
Любой символ кроме `t' и символов, переводящих в другие состояния |
|
X9 |
Символ `d' |
|
Y9 |
Любой символ кроме `d' и символов, переводящих в другие состояния |
|
X10 |
Символ, соответствующий символу идентификатора счетчика цикла |
|
Y10 |
Символ, не соответствующий символу идентификатора счетчика цикла |
|
X11 |
Выполнение тела цикла |
|
X12 |
Символ окончания входного потока |
|
Таблица 2. Функции выходов
Функция |
Значение |
|
W0 |
Нет вывода |
|
W1 |
Вывод входного символа |
|
W2 |
Вывод “f”, далее - входного символа |
|
W3 |
Вывод “fo”, далее - входного символа |
|
W4 |
Вывод “for”, далее - входного символа |
|
W5 |
Вывод заголовка цикла |
|
W6 |
Вывод увеличения счётчика “LOOP” |
На Рисунке 1 представлен граф распознающего автомата. Рисунок графа распознающего автомата выполнен в графическом редакторе CorelDraw.
Текстовое описание автомата.
Распознающий автомат A = {Q, У, F, X, Y, д, л}
Множество состояний автомата Q = {q0, q1, …. , q18}
Начальное состояние q0
Допускающим состоянием является состояние q16
Множество входящих сигналов {x1, x2, … , x12, y1, y2, …, y10}
Множество выходных сигналов {w0, w1, … , w6}
Таблица 3. Таблица переходов
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
x8 |
x9 |
x10 |
x11 |
x12 |
y1 |
y2 |
y3 |
y4 |
y5 |
y6 |
y7 |
y8 |
y9 |
y10 |
||
q0 |
q1 |
q0 |
|||||||||||||||||||||
q1 |
q2 |
q0 |
|||||||||||||||||||||
q2 |
q3 |
q0 |
|||||||||||||||||||||
q3 |
q4 |
q0 |
|||||||||||||||||||||
q4 |
q5 |
q0 |
|||||||||||||||||||||
q5 |
q6 |
q5 |
|||||||||||||||||||||
q6 |
q7 |
q6 |
|||||||||||||||||||||
q7 |
q8 |
q7 |
|||||||||||||||||||||
q8 |
q9 |
q8 |
|||||||||||||||||||||
q9 |
q10 |
q9 |
|||||||||||||||||||||
q10 |
q11 |
q10 |
|||||||||||||||||||||
q11 |
q12 |
q11 |
|||||||||||||||||||||
q12 |
q13 |
q12 |
|||||||||||||||||||||
q13 |
q14 |
q13 |
|||||||||||||||||||||
q14 |
q15 |
q14 |
|||||||||||||||||||||
q15 |
q16 |
q15 |
|||||||||||||||||||||
q16 |
q17 |
q16 |
|||||||||||||||||||||
q17 |
q18 |
||||||||||||||||||||||
q18 |
Рисунок 1.
Приложение 1.
Файл ConsoleApplication1.cpp
Приложение 2.
Текст программы:
#include "pch.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <fstream>
int main()
{
FILE *fin;
FILE *fout;
fopen_s(&fin, "D:\\Temp\\in.txt", "rt");
fopen_s(&fout, "D:\\Temp\\output.txt", "wt");
while (!feof(fin))
{
char str[255] = "";
char str2[255] = "";
fgets(str, 254, fin);
for (int i = 0; str[i] != 0; i++)
{
if ((str[i] == 'f') || (str[i] == 'F'))
{
if ((str[i+1] == 'o') || (str[i+1] == 'O'))
{
if ((str[i + 2] == 'r') || (str[i + 2] == 'R'))
{
fprintf(fout, "label Pr, Res; \n");
fprintf(fout, "var\n");
fprintf(fout, "i: integer;\n");
fprintf(fout, "begin\n");
fprintf(fout, "i:=0;\n");
fprintf(fout, "Pr:\n");
fprintf(fout, "if i=2 then goto\n");
fprintf(fout, "Result;\n");
fprintf(fout, "write ('YES');\n");
fprintf(fout, "i:=i+1;\n");
fprintf(fout, "goto Pr;\n");
fprintf(fout, "Res:\n");
fprintf(fout, "end.\n");
}
}
}
}
}
fclose(fin);
fclose(fout);
_getch();
return 0;
}
Примечание
Для построение графического представления распознающего автомата мы использовали Graphviz - программное обеспечение визуализации графа. Данное приложение позволяет представлять различную информацию как диаграммы абстрактных графов и сетей. Включает в себя как сам язык описания данных, так и инструмент для генерации графического изображения.
digraph G {
ranksep=.3;
node [shape = doublecircle , fontsize = 14];
edge[color="darkgreen",fontcolor="black",fontsize=12];
subgraph a {
q0->q0 [ label = "Y1/W1" ];
node [shape = circle , fontsize = 14];
rankdir = TB;
q0->q1 [ label = "X1/W0" ];
q1->q0 [ label = "Y1/W2" ];
q1->q2 [ label = "X2/W0" ];
q2->q0 [ label = "Y2/W3" ];
q2->q3 [ label = "X3/W0" ];
q3->q0 [ label = "Y3/W4" ];
q3->q4 [ label = "X4/W0" ];
q4->q4 [ label = "X4/W0" ];
q4->q5 [ label = "X5/W0" ];
q5->q5 [ label = "Y5/W0" ];
q5->q6 [ label = "X6/W0" ];
q6->q6 [ label = "Y6/W0" ];
q6->q7 [ label = "X4/W0" ];
q7->q7 [ label = "X4/W0" ];
q7->q8 [ label = "X7/W0" ];
q8->q8 [ label = "Y7/W0" ];
q8->q9 [ label = "X8/W0" ];
q9->q9 [ label = "Y8/W0" ];
q9->q10 [ label = "X2/W0" ];
q10->q10 [ label = "Y2/W0" ];
q10->q11 [ label = "X4/W0" ];}
q11->q11 [ label = "Y4/W0" ];
q11->q12 [ label = "X7/W0" ];
q12->q12 [ label = "Y7/W0" ];
q12->q13 [ label = "X4/W0" ];
q13->q13 [ label = "Y4/W0" ];
q13->q14 [ label = "X9/W0" ];
q14->q14 [ label = "Y9/W0" ];
q14->q15 [ label = "X2/W0" ];
q15->q15 [ label = "Y2/W0" ];
q15->q16 [ label = "X11/W5" ];
q16->q8 [ label = "Y10/W6" ];
q16->q17 [ label = "X10p/W6" ];
q17->q18 [ label = "X12/W0" ];
q18 [shape = doublecircle , fontsize = 14,style="filled",fillcolor="grey"]; }
}
граф визуализация программный graphviz
Список литературы
Горбатов В.А. Теория автоматов: учебник для вузов. - М.: АСТ: Астрель, 2008. - (Высшая школа). - 559с.
Карпов Ю.Г. Теория автоматов: Учебник для вузов. - СПб.: Питер, 2003. - (Учебник для вузов). - 206с.
Кузнецов О.П. Дискретная математика для инженера: учебник. - 6-е изд., стер. - СПб. [и др. ]: Лань, 2009. - 395 с.: ил.
Ахо А., Лам М., Сети Р., Ульман Дж.Д Компиляторы: принципы, технологии и инструментарий, 2 изд.: Пер. с англ. - М.: ООО «И.Д.Вильямс», 2011. - 1184 с.
Размещено на Allbest.ru
Подобные документы
Основные понятия и определения теории графов: теоремы и способы задания графа, сильная связность графов. Построение блок-схем алгоритма, тестирование разработанного программного обеспечения, подбор тестовых данных, анализ и исправление ошибок программы.
курсовая работа [525,6 K], добавлен 14.07.2012Синтез цифрового автомата с комбинационной частью на логических элементах. Реализация спроектированного автомата в виде иерархического блока со схемой замещения на библиотечных компонентах в режиме SPICE–проектов. Разработка абстрактных символов.
курсовая работа [831,2 K], добавлен 23.09.2013Синтез автомата для преобразования двоично-десятичного кода. Кодировка алфавитов и состояний. Построение булевых функций, минимизация. Разметка вход-выходных слов для автомата Мили и автомата Мура. Реализация на элементах малой степени интеграции.
контрольная работа [141,5 K], добавлен 14.10.2012Методы грамматического разбора при разработке учебного транслятора. Проектирование лексического анализатора и магазинного автомата. Программная реализация синтаксического анализатора текстового языка высокого уровня. Разработка модуля интерпретации.
курсовая работа [697,2 K], добавлен 06.01.2013Понятие семантики; обзор и анализ существующих средств семантического разбора естественно-языковых текстов. Разработка алгоритма работы системы на основе семантического анализа, его реализация на языке программирования; проектирование интерфейса системы.
дипломная работа [1,7 M], добавлен 18.03.2012Создание программного обеспечения для реализации алгоритма, позволяющего находить кратчайшее расстояние от одной из вершин графа до всех остальных, при условии, что ребра графа не имеют отрицательного веса. Примеры выполнения алгоритма Дейкстра.
курсовая работа [1,1 M], добавлен 11.01.2015Составление формальной грамматики, недетерминированный конечный автомат. Построение конечного автомата, программное моделирование работы конечного автомата. Граф детерминированного автомата, Синтаксическая диаграмма. Блок-схемы, примеры разбора строк.
курсовая работа [486,2 K], добавлен 19.11.2010Методика минимизации абстрактного автомата. Порядок построения графа полученного минимизированного автомата. Синтез на элементах ИЛИ-НЕ и Т-тригерах. Составление таблицы переходов. Разработка микропрограммного автомата, реализующего микропрограмму.
курсовая работа [997,7 K], добавлен 28.03.2011Сведение недетерминированного конечного автомата к детерминированному. Построение минимального детерминированного автомата из праволинейной грамматики двумя различными способами: с помощью сетей Петри и с помощью таблиц. Описание контрольного примера.
курсовая работа [903,9 K], добавлен 14.07.2012Разработка управляющего автомата, ориентированного на выполнение заданной микрооперации. Разработка алгоритма работы управляющего автомата. Листинг программы. Выбор оптимального варианта кодирования состояний автомата. Синтез функции возбуждения.
курсовая работа [506,9 K], добавлен 26.12.2012