Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Обратная польская запись операций




Ассемблерный код и машинные команды

Машинные команды используют внутреннее представление программы полностью соответствующее объектному коду и сложные преобразования не требуются. Команды ассемблера представляют собой форму записи машинных команд, поэтому в качестве формы внутреннего представления программы практически ничем не отличается от них.

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

Тем не менее, машинные команды – это язык, на котором должна быть записана результирующая программа. Поэтому компилятор, так или иначе, должен работать с ними. Кроме того, только обрабатывая машинные команды (или их представление в форме команд ассемблера), можно добиться наиболее эффективной результирующей программы. Любой компилятор работает с представлением результирующей программы в форме машинных команд, однако их обработка происходит, как правило, на завершающих этапах фазы генерации кода.

 

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

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

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

1) Если Е является переменной или константой, то постфиксная запись Е представляет собой Е.

2) Если Е – выражение вида Е1 op Е2 , где op – произвольный бинарный оператор, то постфиксная запись Е представляет собой Е1’ Е2’ op, где Е1’ и Е2’ - постфиксные записи для Е1 и Е2 соответственно.

3) Если Е – выражение вида (Е1), то постфиксная запись для Е1 представляет собой также и постфиксную запись для Е.

4) Скобки в постфиксной записи не используются.

Например, постфиксная запись для выражения (8-3)+5 представляет 83-5+.

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

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

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

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

 




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 953; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.