|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Автомат с магазинной памятьюРаспознавание КС-грамматик выполняется автоматом с магазинной памятью. Автомат с магазинной памятью определяется семеркой: PM = (Q, S, Г, d, q 0, z 0, F), где Q – конечное множество состояний автомата; S – конечный входной алфавит; Г – конечное множество магазинных символов; d (q, ck, zj) – функция переходов; q 0 Î Q – начальное состояние автомата; z 0 Î Г – символ, находящийся в магазине в начальный момент, F Í Q – множество заключительных (допускающих) состояний. Пример. Синтаксический анализатор выражений. Алфавит языка записи выражений: S = {<Ид>, +, –, *, /, (,), ◄, ►}. Грамматика описывается синтаксическими диаграммами, представленными на рисунке 8. Рисунок 8 – Синтаксические диаграммы Подставляем диаграммы одна в другую, исключая промежуточные нетерминалы Терм и Множитель. В результате получаем полную синтаксическую диаграмму (см. рисунок 9), которая состоит из двух частей: основной и рекурсивной, что связано с наличием рекурсивного вложения правил продукции. Рисунок 9 – Синтаксическая диаграмма По диаграмме строим таблицу автомата, которая также будет состоять из двух частей (см. таблицу 8), которые можно объединить в одну. Таблица 8 – Таблица переходов автомата
Условные обозначения: К – конец разбора, E – состояние ошибки (все пустые ячейки должны содержать E), ¯ Y = <состояние> – рекурсивный вызов распознавателя, справа указан номер состояния после возврата из данного вызова; Y – возврат из рекурсии, следующее состояние определяется значением Y, При разработке алгоритма используем следующие обозначения: Mag – стек (магазин) распознающего автомата, элементы, записываемые в стек, – терминальные и нетерминальные символы; ¯ – запись в стек, – чтение из стека; q – текущее состояние; Table (<Текущее состояние>, <Анализируемый символ>) – элемент таблицы (матрицы) переходов, состоящий из следующих полей: q – следующее состояние (в том числе «¯» – рекурсивный вызов, «» – возврат из рекурсии), S – состояние после возврата из рекурсии, если необходим рекурсивный вызов, или Æ; String – исходная строка; Ind – номер символа исходной строки. Алгоритм программы, реализующей автомат, будет выглядеть следующим образом: q:=1 Ind:= 1 Mag:=Æ Цикл-пока q ¹ «E» и q ¹ «К» q:= Table [ q, String [ Ind ]]. q Если q = ¢¯¢ то Mag ¯ Table [ q, String [ Ind ]]. S q:= X иначе Если q = ¢¢ то Mag q иначе Ind:= Ind +1 Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |