|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Польская инверсная запись
Вместо традиционного инфиксного представления арифметических и логических выражений в различных вычислителях часто используется польская инверсная запись (ПОЛИЗ), которая просто и точно указывает порядок выполнения операций без использования скобок. В этой записи, впервые примененной польским математиком Я. Лукашевичем, операторы располагаются непосредственно за операндами над которыми они выполняются в порядке их выполнения. Поэтому иногда ПОЛИЗ называют суффиксной, или постфиксной записью. Например, A+B записывается как AB+, A*B+C – как AB*C+, A*(B+C/D) – как ABCD/+*, а A*B+C*D – как AB*CD*+. В разделах 6.2, 6.4 будут обсуждаться методы перевода инфиксной записи в ПОЛИЗ с использованием синтаксического анализатора и семантических подпрограмм. Пока остановимся на простейших правилах, которые позволяют переводить в ПОЛИЗ вручную: 1). Идентификаторы и константы в ПОЛИЗе следуют в том же порядке, что и в инфиксной записи. 2). Операторы в ПОЛИЗе следуют в том порядке, в каком они должны вычисляться (слева направо). 3). Операторы располагаются непосредственно за своими операндами.
Таким образом, мы могли бы записать следующие синтаксические правила: <операнд>::=идентификаторôконстантаô<операнд><операнд><оператор> <оператор>::=+ô-ô*ô/ô¼ Унарный минус и другие унарные операторы можно представить двумя способами: либо записывать их бинарными операторами, то есть вместо -B писать 0-B, либо для унарного минуса можно ввести новый специальный символ, например @, и использовать еще одно синтаксическое правило <:операнд>::=<операнд>@. Таким образом выражение A+(-B+C*D) мы могли бы записать AB@CD*++. С равным успехом мы могли бы ввести префиксную запись, где операторы стоят перед операндами. Таким образом, арифметическое выражение, а далее мы покажем, что не только его, но и любую управляющую конструкцию, можно представить в трех формах записи: префиксной, инфиксной (обычная запись, где операторы располагаются между операндами, а круглые скобки позволяют изменять приоритет операций) и постфиксной. Человек традиционно использует инфиксную запись, тогда как для автоматического вычисления выражений самым удобным способом представления является постфиксная запись или ПОЛИЗ. В разделе 6.1.2 будет показано, как проводятся такие вычисления, но прежде пополним ПОЛИЗ новыми операторами. ПОЛИЗ расширяется достаточно просто. Нужно только придерживаться правила, что за операндами следует соответствующий им оператор. Так присваивание <переменная>:=<выражение> в ПОЛИЗе примет вид <переменная><выражение>:=. Например, присваивание А:=B*C+D*100 запишется в ПОЛИЗе как АBC*D100*+:=. О специфике вычисления данной бинарной операции будет сказано в разделе 6.1.2. Индексированную переменную в ПОЛИЗе, а точнее вычисление ее адреса можно представить в виде: идентификатор<индексные выражения>константа[, где [ –обозначает знак операции вычисления индекса, идентификатор – имя (базовый адрес) индексированной переменной, а константа – количество индексов (мерность массива). Так переменную A[i,j+k] можно представить в виде Аijk+2[. Условный оператор IF <выр> THEN <инстр 1> ELSE <инстр 2> в ПОЛИЗе будет иметь вид: <выр> < m > УПЛ <инстр 1> < n > БП <инстр 2>, где · <выр> – логическое выражение (условие), которое может принимать значения – 0 (FALSE, ложь) или 1 (TRUE, истина); · < m > – номер (место, позиция, индекс) символа ПОЛИЗа, с которого начинается <инстр 2>; · УПЛ (Условный Переход по Лжи) – оператор с двумя операндами <выр> и < m >, смысл которого состоит в том, что он изменяет традиционный порядок вычислений и осуществляет переход на символ строки ПОЛИЗа с номером < m >, если (и только если) <выр> – ложно (равно 0); · < n > – номер символа, следующего за <инстр 2>; · БП (Безусловный Переход) – оператор с одним операндом < n >, который также изменяет порядок вычислений по ПОЛИЗу и осуществляет переход на символ с номером < n >.
Операторы условного и безусловного перехода, как в свое время было показано Дейкстрой, составляют основу внутреннего представления любой структурной управляющей конструкции (циклов типа FOR, WHILE, REPEAT, оператора выбора и т.п.). В рассматриваемых нами примерах потребуется только один условный оператор – УПЛ, хотя никто не мешает определить целую группу таких операторов (смотри, например, мнемонику команды условного перехода языка ассемблера для ПЭВМ с процессором Intel 8086). Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |