АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Польская запись. Алгоритм Бауэра-Замельзона

Читайте также:
  1. Алгоритм 1. Зупинка артеріальної кровотечі за допомогою закрутки
  2. Алгоритм 3.1. Транспортна іммобілізація
  3. Алгоритм 4.3. Діагностичний і лікувальний (перша медична допомога) пошук при струсі мозку.
  4. Алгоритм L.
  5. Алгоритм RLE
  6. Алгоритм автоматического формирования парных симметричных ключей шифрования-дешифрования открытых сообщений на рабочих станциях абонентов корпоративной системы.
  7. Алгоритм анализа реальности достижения поставленных профессиональных целей.
  8. Алгоритм виконання роботи
  9. АЛГОРИТМ ВИЯВЛЕННЯ ТА ДІАГНОСТИКИ ТУБЕРКУЛЬОЗУ
  10. Алгоритм выполнения работы
  11. Алгоритм геометрического расчета передачи
  12. Алгоритм действий в экстремальных ситуациях

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

Польская запись (в честь польского математика Лукасевича, предложившего этот вид записи выражений) представляет собой последовательность команд двух типов:

1) КI,где I – идентификатор операнда – выбрать число по имени I и заслать его в стек операндов;

2) K x, где x – операция – выбрать два верхних числа из стека операндов, произвести над ними операцию x и занести результат в стек операндов.

Рассмотрим алгоритм Бауэра-Замельзона, по которому осуществляется представление выражений в виде польской записи.

Алгоритм Бауэра-Замельзона. Грамматика, описывающая правила записи арифметических выражений, относится к классу грамматик операторного предшествования, т. е. порядок следования терминальных символов (знаков операций), однозначно определяет порядок выделения троек, причем нетерминальные символы (имена операндов) на этот порядок не влияют.

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

Согласно алгоритму Бауэра-Замельзона разбор выражения и формирование польской записи выполняется в два этапа:

1) разбор выражения и построение эквивалентной польской записи;

2) выполнение (или трансляция) польской записи.

При этом используется два стека: стек операций – на первом этапе и стек операндов – на втором этапе.

Построение польской записи выполняется следующим образом: транслятор читает выражение слева направо и вырабатывает последовательность команд по следующему правилу:

а) если символ – операнд, то вырабатывается команда КI,

б) если символ – операция, то выполняются действия согласно таблице 11:

Таблица 11 – Таблица генератора
h\x + * ( )  
® I I I ? Вых
+ II I I IV IV
* IV II I IV IV
( I I I III ?

Обозначения:

? - ошибка;

h - верхний символ в стеке операций;

x - текущий символ.

 

Операции:

I – заслать x в стек операций и читать следующий символ;

II – генерировать Kh, заслать x в стек операций и читать следующий символ;

III – удалить верхний символ из стека операций и читать следующий символ;

IV – генерировать Kh и повторить с тем же входным символом.

На этапе выполнения польская запись читается слева направо и выполняется.

Польская запись может использоваться как промежуточная форма не только для выражений, но и для других операторов. Соответственно при этом для получения записи должен использоваться модифицированный алгоритм Бауэра-Замельзона.

Пример. Построить тройки для выражения (a + b * c)/ d.

1. Построение польской записи:

Стек операций Символ Действие Команда
( I  
► ( a   Ka
► ( + I  
► (+ b   Kb
► (+ * I  
► (+ * c   Kc
► (+ * ) IV K*
► (+ ) IV K+
► ( ) III  
/ I  
► / d   Kd
► /   IV K/
  Конец  

В результате получаем:

Ka Kb Kc K* K+ Kd K/ или abc*+d/

2. Выполнение операций:

Стек операндов Команда Тройка
Æ Ka  
a Kb  
a b Kc  
a b c K* T1= b*c
a T1 K+ T2= a+T1
T2 Kd  
T2 d K/ T3= T2/d
T3    

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)