Построение детерминированного конечного автомата
Автор: Darksller • Декабрь 18, 2023 • Лабораторная работа • 11,708 Слов (47 Страниц) • 107 Просмотры
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
Учреждение образования
«Гомельский государственный технический университет имени П.О. Сухого»
Факультет автоматизированных и информационных систем
Кафедра «Информационные технологии»
Специальность 1-40 04 01 «Информатика и технологии программирования»
Отчет
по лабораторной работе №7
по теме: «Построение детерминированного конечного автомата»
по дисциплине: «Методы трансляции»
Составил: студент гр. ИП-31 Доктренко Д.И.
(подпись, дата)
Принял: доцент кафедры ИТ Кравченко О.А.
(должность)
Гомель 2023
Цель работы: проведение синтаксического анализа конструкции языка программирования с помощью детерминированного конечного автомата (ДКА).
Задание
Дано общее описание конструкции некоторого языка программирования. Задана конкретная конструкция. Предполагается, что проведен лексический анализ этой конструкции, в результате которого составлен новый (упрощенный) алфавит исходного языка. Данный алфавит характерен тем, что в нем каждое служебное слово, каждый идентификатор и каждое число, входящие в конструкцию языка программирования, рассматриваются как отдельные символы. Требуется:
1) составить ДКА, который анализирует синтаксическую правильность заданной конструкции, т. е. соответствие структуры конструкции общему описанию;
2) разработать программу (на одном из изученных языков программирования), которая моделирует работу ДКА;
3) проверить работу программы при анализе правильной и неправильной конструкции.
Вариант индивидуального задания
Вариант 16
Описание функции языка программирования имеет следующую структуру:
function имя_функции(список_параметров_функции) begin оператор_присваивания; оператор_присваивания; оператор_присваивания; end;
Оператор присваивания имеет одну из следующих структур:
переменная := выражение
переменная := алгебраическое_сложение выражение
переменная := выражение алгебраическое_сложение выражение
В левой части оператора присваивания в качестве переменной может использоваться имя функции.
Алгебраическое сложение – это одна из операций + или -.
Выражение – это переменная или число.
Список параметров функции разделяется символом «;». Количество параметров – от одного до трех. В качестве параметра функции может использоваться только переменная.
Пробелы могут стоять в конструкции в любом месте. Каждое служебное слово должно быть выделено пробелами.
Алфавит языка после лексического анализа:
Служебные слова: function, begin, end.
Знаки: ;, +, -, (, ), пробел.
Имена функций: f1, f2, f3, f4.
Переменные: a1, a2, a3, a4, a5, a6.
Числа: r1, r2, r3, r4, r5, r6.
Пример правильной конструкции:
function f1(a2; a5; а1) begin a3:= r1-a2-a5; a4:= r1+a2; f1:=-a4; end;
Пример неправильной конструкции:
function f1(a2, a5) begin a3:= r1-a2; a4:= r1+a2; f1:=-a4; end;
Модель ДКА:
[pic 1]
Таблица состояний:
Состояния | Символы | |||||||||||
пробел | function | begin | end | f1,…,f4 | a1,…,a6 | r1,…,r6 | := | ( | ) | +, - | ; | |
0 | 1 | E | E | E | E | E | E | E | E | E | E | E |
1 | 1 | 2 | E | E | E | E | E | E | E | E | E | E |
2 | 3 | E | E | E | E | E | E | E | E | E | E | E |
3 | 3 | E | E | E | 4 | E | E | E | E | E | E | E |
4 | 4 | E | E | E | E | E | E | E | 5 | E | E | E |
5 | 5 | E | E | E | E | 6 | E | E | E | E | E | E |
6 | 6 | E | E | E | E | E | E | E | E | 11 | E | 7 |
7 | 7 | E | E | E | E | 8 | E | E | E | E | E | E |
8 | 8 | E | E | E | E | E | E | E | E | 11 | E | 9 |
9 | 9 | E | E | E | E | 10 | E | E | E | E | E | E |
10 | 10 | E | E | E | E | E | E | E | E | 11 | E | E |
11 | 12 | E | E | E | E | E | E | E | E | E | E | E |
12 | 12 | E | 13 | E | E | E | E | E | E | E | E | E |
13 | 14 | E | E | E | E | E | E | E | E | E | E | E |
14 | 14 | E | E | E | E | 15 | E | E | E | E | E | E |
15 | 15 | E | E | E | E | E | E | 16 | E | E | E | E |
16 | 16 | E | E | E | E | 18 | 18 | E | E | E | 17 | E |
17 | 17 | E | E | E | E | 18 | 18 | E | E | E | E | E |
18 | 18 | E | E | E | E | E | E | E | E | E | 17 | 19 |
19 | 20 | E | E | E | E | E | E | E | E | E | E | E |
20 | 20 | E | E | 21 | E | 15 | E | E | E | E | E | E |
21 | 21 | E | E | E | E | E | E | E | E | E | E | 22 |
22 | E | E | E | E | E | E | E | E | E | E | E | E |
E | E | E | E | E | E | E | E | E | E | E | E | E |
Код программы:
using System;
using System.Collections.Generic;
...