Студопедия

КАТЕГОРИИ:

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


Пример 7.1.




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

IF (x<y) AND (a< >0) THEN b:=a+b*c ELSE b:=(a+b)*c; x:=a*b+c*d;

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

xy< a 0 < > AND 19 УПЛ b a b c * + := 26 БП b a b + c * := x a b * c d * + :=

 

Интерпретация ПОЛИЗа

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

 

1). Если сканируемый символ идентификатор или константа, то соответствующее им значение заносится в стек и осуществляется переход к следующему символу строки ПОЛИЗа. Это соответствует использованию правила <:операнд>::=идентификаторôконстанта

 

2). Если сканируемый символ унарный оператор, то он применяется к верхнему операнду в стеке, который затем заменяется на полученный результат. С точки зрения семантики это соответствует применению правила

<:операнд>::= <операнд><оператор>.

 

3). Если сканируемый символ бинарный арифметический или логический оператор, то он применяется к двум верхним операндам в стеке, и затем они заменяются на полученный результат. Это соответствует использованию правила <:операнд>::= <операнд><операнд><оператор>.

Одно из исключений – бинарный оператор присваивания, который в ПОЛИЗе имеет вид <пер><выр>:=. После его выполнения и <пер>, и <выр> должны быть исключены из стека, так как оператор ‘:=’ не имеет результирующего значения. При этом в стеке должно находится не значение <пер>, а ее адрес, так как значение <выр> должно сохраняться по адресу <пер>.

 

4). Бинарный оператор УПЛ, операндами которого является уже вычисленное значение логического выражения <выр> и номер символа строки ПОЛИЗа – <m>, также удаляет оба операнда из стека и не формирует в нем результата. Его действие состоит в том, что он анализирует значение выражения, и если оно равно 1 (истинно), то следующим сканируется символ, расположенный сразу за УПЛ. Если же значение выражения – 0 (ложно), то мы перемещаемся по строке ПОЛИЗа к символу, позиция которого указана в операнде <m>.

 

5). Унарный оператор БП, удаляя свой параметр, – номер символа < n > из стека, просто переводит сканирование к указанной позиции ПОЛИЗа.

 


Поделиться:

Дата добавления: 2014-11-13; просмотров: 153; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты