Осуществляя перевод, сначала необходимо считать входной знак и
проверить его значение на пустоту. Если
значение входного знака не
является пустым и представляет собой операнд, то оно записывается в
выходную строку и происходит переход к считыванию следующего
входного знака и проверке его значения на пустоту. Если значение
входного знака не операнд, следующим шагом проверяется, является ли он
открывающей скобкой. В случае, если входной знак – открывающая
скобка, он помещается в вершину стека, ничего не выталкивая из него, и
происходит переход к считыванию следующего
входного знака и его
проверке на пустоту. Если же входной знак не является открывающей
скобкой, проверяется, является ли он закрывающей. Если является
таковым, то все знаки до открывающей скобки последовательно
помещаются в выходную строку, а затем открывающая и закрывающая
скобки уничтожаются. Происходит
переход к считыванию нового
входного знака и проверке его значения на пустоту. Если входной знак не
является скобкой, то его приоритет сравнивается с приоритетом знака в
вершине стека. Если приоритет входного знака оказывается больше, то он
помещается в вершину стека, ничего не выталкивая, и происходит переход
к считыванию следующего входного знака. Если нет, то символ из
вершины стека помещается в выходную строку, затем снова происходит
операция сравнения. Когда приоритет входного знака окажется больше
приоритета
знака в вершине стека, входной знак помещается в вершину
стека и происходит переход к считыванию следующего входного знака.
Когда входная строка оказывается пуста, необходимо проверить на
пустоту стек – если он содержит знаки (хотя бы один), то последовательно
они помещаются в выходную строку, если стек пуст – перевод окончен.
Польская инверсная запись представляет собой форму записи
арифметических выражений, отличительной особенностью которой
является то, что все операнды сгруппированы и
расположены перед
операторами, которые также сгруппированы. Для примера рассмотрим
входную строку:
Y
X
X
+
=
. Осуществив перевод данного арифметического
выражения в польскую инверсную запись по вышеописанному алгоритму,
получим выходную строку:
=
+
XXY
. Данный пример иллюстрирует
преимущество польской инверсной записи: группировка операторов и
операндов упрощает следующие синтаксический и семантический
анализы.
СПИСОК ЛИТЕРАТУРЫ
1.
Кузяков,
О.
Н.
Система
мониторинга
поверхности
технологического объекта, основанная на использовании муарового
эффекта / О. Н. Кузяков, У. В. Лаптева // Системный анализ и
76
информационные технологии «САИТ-2013»: материалы V Междунар.
конф. – Красноярск, 2013. – С. 362-367.
2.
Гордеев, А. В. Системное программное обеспечение / А. В.
Гордеев, А. Ю. Молчанов. – Санкт-Петербург: Питер, 2001. – 736 с.
3.
Компиляторы:
принципы, технологии и инструментарий / А. В.
Ахо [и др.]. – 2-е изд.; пер. с англ. – Москва : ООО «И. Д. Вильямс», 2008. -
1184
с.
УДК 681.51
Do'stlaringiz bilan baham: