Построенный автомат является недетерминированным.
Начальную конфигурацию с цепочкой a + a*a запишем так: (s0 , a+a*a , h0E).
Последовательность тактов работы построенного автомата, показывающая, что заданная цепочка допустима, имеет вид:
(s0 , a+a*a , h0E) ├ (s0 , a+a*a , h0T+E) ├ (s0 , a+a*a , h0T+T) ├ (s0 , a+a*a , h0T+F) ├
(s0 , a+a*a , h0T+a) ├ (s0 , +a*a , h0T+) ├ (s0 , a*a , h0T) ├ (s0 , a*a , h0F*T) ├
(s0 , a*a , h0F*F) ├ (s0 , a*a , h0F*a) ├ (s0 , *a , h0F* ) ├ (s0 , a , h0F) ├
(s0 , a , h0a) ├ (s0 , , h0) ├ (s0 , , ).
Отметим, что последовательность правил, используемая построенным автоматом, соответствует левому выводу входной цепочки:
E E+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a.
Если по такому выводу строить дерево, то построение будет происходить сверху вниз, т.е. от корня дерева к листьям.
Т
акой
способ построения дерева по заданной
цепочке называется нисходящим.
Магазинные автоматы называют часто распознавателями, поскольку они определяют, является ли цепочка, подаваемая на вход автомата, допустимой или нет, и следовательно, отвечают на вопрос, принадлежит ли эта цепочка языку, пораждаемому грамматикой, использованной для построения автомата.
Учитывая характер построения вывода в магазине, автоматы рассмотренного типа называют нисходящими распознавателями.
Написать программу, реализующую работу недетерминированного магазинного автомата.
Входные данные:
Текстовый файл с описанием грамматики, для которой строится магазинный автомат.
Каждая строка в файле может задавать несколько правил грамматики с одинаковой левой частью. В этом случае правила отделяются друг от друга символом ‘|’.
Для отделения левой части правила от правой используется символ ‘>’. В одной строке может быть несколько символов ‘>’. В этом случае первый из них трактуется, как символ, отделяющий правую и левую части продукции, все последующие – как терминальный символ.
Все нетерминалы задаются с помощью прописных букв латинского алфавита.
Все символы, не описанные выше, являются терминальными символами.
Правил в грамматике (а значит и во входном файле) – неограниченное количество.
Рекомендуется считать пробельные символы в файле незначащими, а для терминала «пробел» использовать какой-нибудь другой символ (например, ~, либо заключать пробел в апострофы).
Пример входного файла
E > E + T | T
T > T * F | F
F > ( E ) | a | ~
Строка символов, которую нужно проанализировать с помощью построенного автомата и дать заключение о допустимости (или недопустимости) автоматом данной цепочки символов.
Выходные данные
На оценку «удовлетворительно»: заключение о допустимости (или недопустимости) автоматом цепочки символов.
На оценку «отлично»: значение множеств P, Z и т.д.; список команд (1) – (4) (см раздел «Построение магазинного автомата»); цепочка конфигураций магазинного автомата, полученная в процессе его работы; заключение о допустимости (или недопустимости) автоматом цепочки символов.
При подготовка данной лабораторной работы были использованы материалы сайта http://mf.grsu.by/.
Copyright © 2005 – 2010 Voldem@r