рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Вычисления арифметических записей на основе ПОЛИЗ

Вычисления арифметических записей на основе ПОЛИЗ - раздел Программирование, СИНТАКСИЧЕСКИЙ И СЕМАНТИЧЕСКИЙ АНАЛИЗ Существует Два Способа Записи Арифметических Выражений: 1) Инфиксная (Традици...

Существует два способа записи арифметических выражений: 1) инфиксная (традиционная) и 2) постфиксная (ПОЛИЗ)

Таблица 5.1

Инфиксная Постфиксная
a*b+c ab*c+
a+b*c abc*+
a+b*c-d/(a+b) abc*+dab+/-

 

Отличие ПОЛИЗ от инфиксной формы состоит в отсутствии круглых скобок () и порядок следования операндов и операций. Вычислять выражения на основе ПОЛИЗ значительно проще, так как отсутствие скобок, переопределяющих приоритет выполнения операций, исключает дополнительный алгоритм порядка выполнения операций. В ПОЛИЗ алгоритм выполнения жёстко определён по правилу: операция справа — результат выполнения двух операндов слева, при этом цепочка ПОЛИЗ просматривается слева направо.

Пример 5.6. Рассмотрим польскую запись ab*c+

Просматривая цепочку слева направо дойдём до знака *. Эта операция выполняется для операндов a и b, в результате образуется цепочка Zc+, где Z = a + b. Просматривая теперь эту цепочку до знака +, выполняем операцию R = Z + c.

Перевод инфиксной формы в ПОЛИЗ. Существует много способов перевода инфиксной записи в постфиксную. Наиболее удачным является алгоритмы Дейкстра и Гриса. Алгоритм Дейкстра основан на использовании стекового механизма с учётом приоритетов.

 

 

Алгоритм Дейкстра:

 

 

 

Рис 5.21. Стековый алгоритм

 

1. Входная строка – арифметическое или логическое выражение – помещается в стек и анализируется слева направо, то есть в вершине стека находится 1 левый символ.

2. Операнды переписываются в стек 2 без изменений. Знаки операций помещаются вначале в стек 3, а затем пересылаются в стек 2 по следующему правилу.

 

 
 
Если приоритет входного знака равен 0 или больше приоритета знака, находящегося в вершине, то новый знак добавляется в стек 3, в противоположном случае из стека 3 выталкивается в стек 2 знак, находящийся в вершине, а так же следующие за ним знаки с приоритетом больше или равным приоритету входного знака. После этого входной знак добавляется в стек операций.  

 

 


3. Открывающаяся скобка ‘(’ заносится в стек операций сразу, так как имеет минимальный приоритет , равный нулю, её не может вытолкнуть ни один знак, кроме закрывающейся скобки ‘)’, которая имеет приоритет, равный 1, и не превосходит другие приоритеты операций. И поэтому появление на входе закрывающейся скобки ‘)’ вызывает выталкивание всех знаков из стека 3, до тех пор, пока не появится открывающаяся скобка ‘(’, которая единственная имеет меньший приоритет. В стек закрывающаяся скобка ‘)’ не заносится. Появление в вершине стека 1 закрывающейся скобки ‘)’ и в вершине стека 3 открывающейся скобки ‘(’, вызывает их взаимное уничтожение и разбор продолжается с пункта 1.

 

Таким образом в стеке 2 образуется ПОЛИЗ без скобок!

Пусть дано выражение a+b*c-d/(a+b). Требуется перевести его в ПОЛИЗ. Рассмотрим перевод из инфиксной записи в постфиксную по шагам.

 

 

 

 

 

 

 

 

 

 

 

Таким образом инфиксное выражение a+b*c-d/(a+b) в ПОЛИЗ выглядит так: abc*+dab+/-

После перевода инфиксной записи в ПОЛИЗ алгоритм вычисления арифметический выражений упрощается и состоит в следующем.

 
 
ПОЛИЗ просматривается слева направо. Если анализируемый символ — операнд, то просматривается следующий элемент. Если рассматриваемый символ — операция, то её необходимо выполнить над двумя слева стоящими от неё операндами. Результат рассматривается как операнд в анализируемой строке. Это повторяется до последнего анализируемого символа в строке.  

 

 


Пример 5.7. abc*+dab+/-

1)

2)

3)

4)

5)

Алгоритм Дейкстры является эвристическим и трудно реализуется логически. Этого недостатка лишён алгоритм Гриса [1] или транслирующих грамматик, который использует формальные методы анализа и в связи с этим имеет строгую простую реализацию.

 

 

Алгоритм Гриса. (Транслирующих грамматик.)

Пустьграмматика арифметикиG[<AB>] определена как:

1. <AB> ® <AB>+T

2. <AB> ® T

3. T ® T*O

4. T ® O

5. O ® (<AB>)

6. O ® a | b | c

 

Введём семантические атрибуты в правилах 1, 3, 6.

 

1. <AB> ® <AB>+Ty2

3. T ® T*Oy1

6. O ® ay3 | by3 | cy3

 

где yi (i=1,2,3) – это запись соответствующего терминального символа в стек ПОЛИЗ.

Пример 5.8. Проанализируем выражение (a+b)*c с помощью процедуры выводимости, учитывая семантическую атрибутику

<AB> Þ T Þ T*O Þ (<AB>)*Oy1 Þ (<AB>+Ty2)*Oy1 Þ

Þ (ay3+Ty2)*Oy1 Þ (ay3+by3y2)*Oy1 Þ (ay3+by3y2)*cy3y1

 

Выстроим семантические атрибуты в той последовательности, в которой они появляются в процедуре разбора, в результате получим ПОЛИЗ

y3 y3 y2 y3 y1

¯ ¯ ¯ ¯ ¯

a b + c *

 

Алгоритм транслирующих грамматик, как это видно из примера, отличается простотой, оригинальностью и, самое главное, строгой формальной схемой. В отличие от эвристики Дейкстра, этот алгоритм основан на теории синтаксически ориентированных методов.

Отметим, что ПОЛИЗ используется в семантике компиляторов не только для арифметических выражений, но и для других языковых конструкций – деклараций, операторов цикла, условных операторов и т. д.

 

 

– Конец работы –

Эта тема принадлежит разделу:

СИНТАКСИЧЕСКИЙ И СЕМАНТИЧЕСКИЙ АНАЛИЗ

На сайте allrefs.net читайте: "СИНТАКСИЧЕСКИЙ И СЕМАНТИЧЕСКИЙ АНАЛИЗ"

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Вычисления арифметических записей на основе ПОЛИЗ

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

ПРОЦЕССОР ЧИСЛОВЫХ КОНСТАНТ
Приведем грамматику числовых констант в следующем виде G[<Число>]: 1. <Число> ® [+ | -] <Число Без Знака> 2. <Число Без Знака> ® <Десят

Очистка мусора
Мусором будем называть вспомогательные сиволы, которые не являются носителями смыслового содержания текста. Такими символами являются символы табуляции ‘t’, символы перевода на новую строку

Декомпозиция программы при лексическом анализе
Основным функциональным назначением сканера является декомпозиция программы на её терминальные составляющие: идентификаторы, ключевые слова, числовые константы, знаки операций и так далее. Эти язык

Семантика целого числа при сканировании
Для целого в алгоритме предусмотрен генератор условного кода 2. Под кодом здесь понимается класс целых. Часто, при обработки целых требуется не только их указатель(код) целого числа, но и значение

Лексический анализ идентификатора
Выделение идентификаторов кодом 2 не является полной информацией о каждом идентификаторе в отдельности. На этапе лексического анализа информационной характеристикой идентификатора является кортеж &

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

ОРГАНИЗАЦИЯ ТАБЛИЦ СИМВОЛОВ
Проверка правильности семантики и генерация кода требуют знания характеристик идентификаторов, констант, имён функций (библиотечных и внеших) и т.д. Определение 5.1. Табли

Структуры линейного формата
Для структур линейного формата существует два способа хранения имен. Первый – хранить символы имени в записях таблицы символов рис. 5.10, второй - в записи для имени размещать только указатель на о

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

Древовидные структуры
Существует способ представления таблиц с использованием двоичных деревьев Каждый узел дерева представляет собой заполненный элемент таблицы, причем корневой узел является первым элементом. Добавлен

Неупорядоченный поиск
Неупорядоченный поиск – это простейший способ организации таблицы символов. Он состоит в том, чтобы добавлять элементы для аргументов в порядке их поступления, без каких-либо попыток упорядочения.

Бинарный поиск
Поиск может быть выполнен более эффективно, если элементы таблицы упорядочены (отсортированы) согласно некоторому естественному порядку аргументов. Эффективным методом поиска в упорядоченн

Хеш-адресация
Данный метод в целом более эффективен, чем линейные списки, и используется для таблиц символов в большинстве случаев [13]. Схема открытого хеширования (хеш-таблица размера 211) приведена на рис.5.1

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

РЕКУРСИВНЫЙ СПУСК
Рассмотрим подкласс КС-грамматик - S-грамматики Определение 5.2. S-грамматики — это подкласс контекстно-свободных грамматик, таких что: 1. Правая часть

ДИАГНОСТИКА И НЕЙТРАЛИЗАЦИЯ СИНТАКСИЧЕСКИХ ОШИБОК
Диагностика — установка места возникновения и типа синтаксической ошибки. Кроме того, обработанная ошибка должна быть визуализирована пользователем в виде, удобном для её обнаружения. Нейт

Метод Айронса
  Основная идея — по контексту без возврата отбрасывать литеры, которые привели к тупиковой ситуации (когда продолжение анализа по грамматике невозможно) и разбор продолжается. Для ил

Алгоритм Айронса по исправлению ошибок
  Пусть xjy — куст исходной программы, где x — построенная часть, jy — недостроенная часть, jÎVT 1. Строим список L из литер недостающих час

ВОСХОДЯЩИЕ МЕТОДЫ АНАЛИЗА
  Анализ методами слева направо является более приоритетным и занимает 60..80% для грамматик определённого класса. Менее популярными являются методы анализа снизу вверх или восходящие

Грамматики простого предшествования.Отношения предшествования
  Отношения предшествования такие же отношения, как и логические конъюнкция, дизъюнкция, и несут смысл определённых операций. Примечание. Здесь и в дальнейшем будем рассматри

УПРАЖНЕНИЯ
Перевести в ПОЛИЗ инфиксные выражения 1 - 3   1. ( x2

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги