Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lects_1.pdf
Скачиваний:
25
Добавлен:
09.06.2015
Размер:
731.64 Кб
Скачать

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

Рассмотрим пример построения Т - грамматики по СУ - схеме Т4.4.

Используя фигурные скобки для представления выходных символов и выполняя преобразование, получаем:

R = {<A> x{x}, <A> (<B>), <B> <A><C>,

<C> +<A>{+}<C>, <C> $ }.

Перевод цепочки (( x + x ) + x) с применением правил построенной грамматики может быть получен с помощью следующего вывода:

<A> (<B>) (<A><C>) ((<B>)<C>) ((<A><C>)<C>) ((x{x}<C>)<C>) ((x{x} +<A>{+}<C>)<C>) ((x{x} + x{x}{+}<C>)<C>) ((x{x} + x{x}{+})<C>) ((x{x} + x{x}{+}) + <A>{+}<C>) ((x{x} + x{x}{+}) + x{x}{+}<C>) ((x{x}+x{x}{+})+x{x}{+}).

Исключая из полученной цепочки вначале выходные, а затем входные символы, получаем выводимую пару

(((x + x) + x), {x}{x}{+}{x}{+}), т.е. (((x + x) + x), xx + x +)

которая совпадает с результатом вывода в заданной СУ - схеме.

4.8.1. Бесскобочные выражения

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

46

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

4.8.1.1. Префиксная польская запись (ПрПЗ)

Определение. 1) Если инфиксное выражение Е представляет собой один операнд а, то ПрПЗ выражения Е будет а.

2) Если инфиксное выражение имеет вид Е12, где * - знак операции, а Е1 и Е2 инфиксные выражения для операндов, то ПрПЗ этого выражения будет1'E2',

где E1', E2' - ПрПЗ выражений Е1 и Е2.

3) Если (Е) есть инфиксное выражение, то ПрПЗ этого выражения будет ПрПЗ Е

Это определение задает порядок построения ПрПЗ заданного инфиксного выражения. Например для выражения ( a + b ) * ( c – d ) построение ПрПЗ можно выполнить следующим образом. Обозначим операнды первой выполняемой операции:

E1 = (a + b) и E2 = (c - d).

Согласно определению префиксная запись выражения Е1 * Е2 - это * E1'E2', где Е1', Е2' - префиксные записи выражений Е1 и Е2. Выполнив построение префиксных записей для этих выражений,

E1' = +ab, E2' = -cd,

получим:

*+ ab - cd

4.8.1.2. Вычисление префиксных польских записей

Вычисление ПрПЗ можно представить следующим образом:

1.Просматриваем выражение слева направо, пока не найдем знак операции, за которым следуют два операнда.

2.Выполняем операцию и результат записываем на место выбранной тройки.

3.Повторяем пункт (1), пока не получим вместо выражения один результат. Вычисление префиксного выражения можно представить в виде:

47

1.*+ab-cd

2.*R1-cd

3.*R1R2

4.R3

Вычисление таких выражений на практике реализуется с использованием магазина.

4.8.1.3. Постфиксная польская запись

Определение. 1. Если инфиксное выражение Е представляет собой один операнд а, то ПоПЗ выражения Е будет а.

2.Если инфиксное выражение имеет вид Е12, где * - знак операции, E1, E2 - инфиксные выражения для операндов,

то ПоПЗ этого выражения будет - Е1'E2'*, где Е1',E2' - постфиксные выражения Е12.

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

Построим ПоПЗ выражения

( a + b ) * (c – d ).

Обозначая операнды внешней операции

E1 = ( a + b ) и E2 = ( c – d ),

найдем постфиксные записи операндов, которые имеют вид:

E1' = ab + и E2' = cd -.

Подставляя полученные постфиксные записи в выражение

E1'E2'*,

окончательно получаем:

ab + cd - *.

4.8.1.4. Вычисление постфиксных записей

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

1.Просматриваем выражение слева направо пока не найдем два стоящих рядом операнда, за которыми следует знак операции.

2.Выполняем операцию и записываем результат вместо выбранных операндов и операций.

48

3. Повторяем пункт (1) пока не получим вместо выражения единственный результат. Вычисление постфиксного выражения можно представить в виде:

1.ab+cd-*

2.R1cd-*

3.R1R2*

4.R3

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

1.Прочитать очередной символ входной цепочки.

2.Если входной символ - операнд, то выполнить его запись в магазин.

3.Если входной символ - оператор,то прочитать два операнда из магазина, выполнить

операцию и результат занести в магазин как операнд.

4. Повторять п.1, пока во входной цепочке не будут прочитаны все символы. Последовательность вычислений продемонстрируем на примере входной цепочки

ab+cd-*

и изобразим ее в виде следующей схемы:

 

Вход

Магазин

Операция

 

ab+cd-*

 

 

1.

b+cd-*

a

 

2.

+cd-*

ab

 

3.

cd-*

R1

a+b=R1

4.

d-*

R1c

 

5.

-*

R1cd

 

6.

*

R1R2

c-d = R2

7.

$

R3

R1*R2 = R3

49

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]